Design
koppar.ai
Koppar guides end-to-end electronics board design, from brief and research through SKiDL schematic synthesis, design review, board planning, and KiCad part search.
ENDPOINT 1
https://app.koppar.ai/mcp
MCP server metadata
- Name
- koppar
- Version
- 0.1.0
Koppar turns a circuit description into a manufacturable PCB. Through these tools YOU do the thinking (part research, writing the SKiDL schematic, reviewing it, planning the board) and Koppar does the deterministic work: KiCad library lookups, compiling and checking the circuit, place and route, the design-rule check, live BOM pricing and fab files. No model runs on the Koppar side. Workflow: 1. create_design with the user's brief. Give the user the web_url: the design, schematic, 3D board and BOM appear there as you work. 2. Research. Read get_workflow_guide(stage="research"). Verify every part with search_kicad_symbol, get_kicad_symbol and search_kicad_footprint, passing design_id so parts you register (create_custom_symbol, database parts) belong to the design. A package KiCad does not have: give create_custom_symbol its .kicad_mod as footprint_mod and the part uses that footprint (custom:<name>) on the board and in the project. Write the dossier and save it with save_dossier; resolve every part it reports unresolved. 3. Schematic. Read get_workflow_guide(stage="synthesis"). Write the SKiDL script and send it with submit_circuit. Fix every blocking finding and resubmit (edit_circuit patches circuit.py in place) until accepted is true. Warnings do not block. 4. Review, for designs with 4 or more active ICs. get_review_packet, review it as its instructions say, and fix the blocking issues with edit_circuit. 5. Board. get_board_context, write the plan JSON as get_workflow_guide(stage="board") describes, start_board with it, then get_board_status with wait_s until the run ends. A board that fails (open nets, DRC errors) gets a changed plan (larger board, 4 copper layers, parts moved) and another start_board. Fab files are released only for a board with zero serious DRC errors and nothing unconnected. set_design_rules changes a built board's rules (clearance, widths, net classes) in place: the copper stays, DRC re-judges it, and the next start_board routes to them. 6. Parts and fab. get_bom (choose_bom_part changes an offer), get_fab_status, get_order_price, and get_downloads for the KiCad project, Gerbers and the assembly order bundle. upload_board puts a board you routed or edited yourself onto the design (same parts and nets as the schematic; KiCad DRC re-judges it and the chat is told). send_order_to_provider uploads the design to a manufacturer: only when the user asks for it. Board workspace, for a KiCad project the user already has: import_kicad_project with the zipped project folder (the CLI's `koppar import <folder>` zips and uploads it), then work on the board directly. get_board_info (every part's position, rotation, side, lock, courtyard; rules; counts), place_footprints (exact positions, nothing nudged), auto_place, set_board_outline, set_design_rules (preset "jlcpcb"), set_keepouts, set_zones (copper pours), route_board (with no nets or router: the full route pipeline Koppar benchmarks, the learned router racing the negotiated one, repair rounds and copper finishing, up to 20 minutes; with nets or a router: one route, keeping the copper of nets already connected, the learned router service, 1 to 8 layers with 1 a single-sided board routed on one face, or router "ts" for the local one), ripup_routing, cleanup_board, fill_zones, repair_board (a local "ts" repair scoped to the nets still open often closes what the service leaves), run_drc, score_board (bounding-box volume + 50 x vias + 5000 x copper layers) and export_step. Each tool runs as a job: a long one returns status "running" and get_board_job follows it. Every change snapshots the board first: list_board_revisions and restore_board_revision undo. get_downloads gives workspace.zip (the project), the board file, the STEP and the last render. Work the way a designer does, and check yourself with the same tools: (1) auto_place with placer "ml", two_sided when the board is tight, edge for the connectors that must sit on an edge, and refine "anneal" (grid_mm 0.254 keeps passives on a 10 mil grid) — the learned placer sets the structure, the annealer the tightness; anneal_place alone refines any placement from where the parts stand. (2) render_board (side, region crop, drc_markers, ratsnest) and LOOK at it before routing: connectors flush to their edges, holes free, escape room around fine-pitch ICs. (3) route_board, then run_drc. (4) A net that stays open after repair_board: diagnose_open_nets says whether a pad is cramped (then move the parts it names — no router will reach it) or which nets to rip and route first; do not repeat repair_board on it. (5) board_census compares the copper with designer-routed boards (signal vias per net, via-free nets, signal copper on the outer layers, vias in pads) and lists the gaps; prune_vias, route_board with no_via_in_pad or via_economy, and a tighter placement close them. (6) get_board_info reports walled_pads and forced_vias up front: pad rows no track can leave, and nets with SMD pads on both sides — placement and stackup facts, not router settings. To continue a design the user already has (including one made in the web app), find it with list_designs and start from get_design with its design_id instead of create_design. A submission that is sent back leaves the design's accepted schematic in place; what you do shows up in that design's chat. A board takes minutes; tell the user what is running rather than calling tools in a tight loop.
Known tools 61
get_workflow_guideHow to drive Koppar end to end, and the instructions for each stage you do yourself: "research" (part research and the dossier), "synthesis" (writing the SKiDL schematic), "review" (design review), "board" (the board plan).
Inferred read-onlycreate_designStart a new design from the user's brief (what the board must do, its interfaces, power, size and constraints).
Inferred read-onlylist_designsThe user's designs, newest first, including ones made in the web app (an agent can continue those too).
Inferred read-onlyget_designWhere a design stands: the brief, the schematic (accepted or the last blocking error, ERC, part and net counts, submissions), the board run, the readable files, and the next step.
Inferred read-onlysearch_kicad_symbolSearch KiCad's standard symbol libraries for parts whose name contains a substring.
Inferred read-onlyget_kicad_symbolReturn the full pin list (number, name, electrical type) and description for a specific KiCad symbol.
Inferred read-onlycreate_custom_symbolRegister a connectable schematic symbol for a part that is NOT in KiCad's libraries (search_kicad_symbol returned nothing).
Inferred read-onlysave_dossierStore the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes).
Inferred read-onlysubmit_circuitCompile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, floating subsystems, parts without a footprint, and supplier sourcing.
Inferred read-onlyedit_circuitApply SEARCH/REPLACE patches to your latest script and re-run every check, as submit_circuit does.
Inferred read-onlyget_review_packetEverything a design review needs in one text: the brief, the dossier, circuit.
Inferred read-onlyget_board_contextWhat the board plan is decided from: the computed minimum board, BOARD STATS (pad density, fine-pitch parts, fanout), the parts and nets, board instructions the user gave, and the plan schema with its rules.
Inferred read-onlystart_boardStart place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses).
Inferred read-onlyget_board_statusThe board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are released and, when not, the diagnosed causes (first = fix first: parts that did not fit, collisions, missing footprints, open nets, thin power).
Inferred read-onlyget_bomThe live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and totals.
Inferred read-onlychoose_bom_partPick which offer a BOM line uses: the line's references and a seller part number or MPN from its offer or alternatives in get_bom; null goes back to the automatic pick.
Inferred read-onlyget_fab_statusWhether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not.
Inferred read-onlylist_order_providersThe PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them.
Inferred read-onlyget_order_priceOne price for a quantity: parts from the sellers, the board and assembly from the chosen provider's quote, setup fees, and what the total does not include.
Inferred read-onlysend_order_to_providerUpload the released board (Gerbers, BOM, placement) to a manufacturer and return the page where the user pays.
Potential side effectsget_downloadsDownload URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now.
Inferred read-onlyimport_kicad_projectBring an existing KiCad project in as a board workspace: the project folder as a ZIP (the .
Inferred read-onlyget_board_infoThe board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items), zones and keepouts, and every footprint with reference, value, footprint, position (origin, mm), rotation, side, locked, DNP, courtyard box and 3D models.
Inferred read-onlyplace_footprintsPut footprints exactly where given: KiCad board coordinates of the footprint origin in mm (y grows downward), rotation in degrees as KiCad shows it, side F or B (changing side flips the footprint, as KiCad does), locked.
Inferred read-onlyauto_placePack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal).
Inferred read-onlyanneal_placeDense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keepout rectangles kept clear (routing corridors), and a per-pad price for the bottom side (flip_cost, mm of wirelength; each bottom-side pad whose net has top-side pins costs a via).
Inferred read-onlycheck_net_rulesCheck the copper against the project's net classes and differential pairs, which KiCad's DRC does not: every class or pair net's narrowest track and the length below its class width, and every pair (X_P/X_N, X+/X-, CAN X_H/X_L) with its coupled share at the class's diff_pair_gap, both lengths and the skew.
Inferred read-onlycheck_physicsJudge the copper by physics, which KiCad's DRC does not: impedance from the stackup on controlled nets, IR drop and heating on rails with a stated current, pair and lane skew, a ground via beside every high-speed layer change, 3W spacing between high-speed runs, and the via path under exposed paddles.
Potential side effectsadd_copperLay exact copper by hand where the routers leave a gap: tracks as polylines on one copper layer, and through vias.
Inferred read-onlyprune_viasRemove every via the board does not need: groups of vias come out, the zones are refilled and KiCad's unconnected count compared, and a via stays only if removing it disconnects something.
Potential side effectsrepair_boardKeep the copper of every net it already connects and route the nets still open around it: route_board with preserve_existing.
Inferred read-onlyripup_routingDelete tracks and vias: of the given nets, on the given layers (vias are not layer-filtered), with an end inside region, or all.
Potential side effectscleanup_boardSweep the routing: zero-length and duplicate tracks, stub tracks (a free end, and everything the track touches stays joined without it), and vias that meet their net on fewer than two layers.
Inferred read-onlyadd_project_filesUnpack a ZIP into the project folder, keeping its paths: new footprints into a .
Inferred read-onlyswap_footprintReplace footprints in place with another footprint from a library in the project's fp-lib-table (library:name): the reference, value, position, rotation (or rot_deg), side, lock and schematic link stay, and nets move pad by pad.
Inferred read-onlytie_rail_padsTie neighbouring same-net SMD pads of the plane nets (GND, the rails with a pour) together on their own layer with short tracks, so a group shares one via to the plane instead of one via per pad, as a designer does.
Inferred read-onlywiden_netsGrow the tracks (and optionally vias) of the named nets in place, each as wide as its clearance to every other net's copper, holes and the board edge allows, up to the net's target width.
Inferred read-onlyfinish_boardClose what the router left open the way a designer does: for each open net the diagnosis names the copper boxing it in; that copper is ripped (never a poured net), the open nets are routed FIRST into the space, then the ripped nets go back around them; up to `rounds` rounds, each kept only if KiCad counts fewer unconnected items.
Inferred read-onlybridge_islandsA filled pour cut into islands by routing: one through-via per island that KiCad finds cut off from its net, placed well inside the island and inside the net's main copper on another layer, clear of every other net between.
Inferred read-onlytidy_copperAfter routing: every run redrawn as the fewest 0/45/90-degree segments that clear, and every track narrower than its net's netclass width widened where it fits (slid sideways, bumped around a lone obstacle, or necked only over the stretch that needs it; a via or thin track of another net moved aside when that is all that is in the way).
Inferred read-onlypolish_viasAfter route_board and prune_vias: rip one net at a time, most vias first, route it alone around everything else at a high via price, and keep the new copper only when KiCad counts fewer vias with no new open item or DRC error (a reroute that cuts a pour into islands first gets one via per island, bridge_islands).
Inferred read-onlycouple_pairsAfter route_board: re-route the weakly coupled differential pairs one at a time, least coupled first.
Inferred read-onlydiagnose_open_netsFor every net still open (or the nets named): each pad with the escape corridors free on its own layer, whether a via can be dropped beside it at all, and what blocks it (which part's pads, which net's tracks or vias, the board edge).
Inferred read-onlyboard_censusThe numbers a designer judges routed copper by — signal vias per net, share of signal nets without a via, share of signal copper on the outer layers, vias in SMD pads, plane stitching — next to the bands of designer-routed reference boards with the same layer count, and a gap_to_designers list saying where this board is not yet human-grade.
Inferred read-onlyrun_drcKiCad's DRC on the board as it is now, with schematic parity when the project has its schematic: error and warning counts by type, shorts, unconnected items, parity items, and the first violations with their items and positions (types filters, max_violations caps; default 40).
Inferred read-onlyscore_boardExport the assembled board (3D models, DNP parts left out) and measure it: bounding-box size and volume, via count, copper layers, and the PCBGolf score = volume (mm³) + 50 × vias + 5000 × copper layers.
Inferred read-onlyrender_boardAn exact 2D picture of the board as an engineer reads it: copper per layer (the facing layer full strength, the others faded), pads, vias, pours, outline, courtyards and refs.
Inferred read-onlyrestore_board_revisionPut the board and its rules back as they were in a revision from list_board_revisions.
Inferred read-onlyget_board_jobThe design's latest board job: its status and, once it ends, its result or error.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.koppar]
url = "https://app.koppar.ai/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"koppar": {
"type": "http",
"url": "https://app.koppar.ai/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: koppar
Remote MCP URL: https://app.koppar.ai/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"koppar": {
"url": "https://app.koppar.ai/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"koppar": {
"type": "http",
"url": "https://app.koppar.ai/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "koppar",
"transport": "streamable-http",
"url": "https://app.koppar.ai/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Loading Trust v2 evidence…
Checking the associated registrable domain. The BuiltWith key remains server-side.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.