
Koppar MCP server
Which MCP servers are Koppar's own, from the official registry and from asking its own domain, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.
read 2026-10-27
- Registry nameai.koppar/kopparverified in the MCP registry
The registry name sits under koppar.ai. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.
- Stateanswerschecked 2026-10-27
- Tools64
- Server calls itselfkoppar
- Server version0.1.0
- Protocol version2025-06-18
On 2026-10-27 the server answered initialize and tools/list without a sign-in. First answer in 480 ms.
- Its tools do every use case we checked: Design a USB-C powered breadboard supply with switch and LED; Lay out a CAN bus sensor node with an STM32G0; Get a priced bill of materials for a finished board.
Once connected
- For "Design a USB-C powered breadboard supply with switch and LED", the likely first call is create_design.
- For "Lay out a CAN bus sensor node with an STM32G0", the likely first call is create_design.
- For "Get a priced bill of materials for a finished board", the likely first call is get_bom.
- create_design, delete_design, create_custom_symbol, add_custom_footprint, edit_circuit change data without a sign-in: anyone with the address can call them.
- Its definitions take about 25085 tokens of context: enable only the tools a task needs.
- Parameters are untyped or undescribed in 27 of 65 tools: check arguments before calling.
Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.
- INITE MCP score74 of 100answers 100 · does the job 100 · definitions 93 · context 43 · connects 100 · lowered by the warning signs below
- What an agent can do with it3 of 3 use cases
- Answered100% of days8 of 8 daily checks
- Median first answer498 ms
- Space in an agent's context≈ 25,085 tokensthe definitions of all its tools (65), which an agent carries on every turn
- Tool definitionsA · 93 of 100
- Typed results0 of 65 toolsdeclared outputSchema: results come typed, read once
- Parameters without a description: in 27 of 65
What an agent can do with it
- can do · Design a USB-C powered breadboard supply with switch and LED
- can do · Lay out a CAN bus sensor node with an STM32G0
- can do · Get a priced bill of materials for a finished board
Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?
Worth a look
- Tools that change data, on a server that answers without a sign-in: create_design, delete_design, create_custom_symbol, add_custom_footprint, edit_circuit
A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (25%), doing the product's job (25%), definitions (20%), context (10%), use (10%) and how readily a client connects (10%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →
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). Read the stage…
create_designStart a new design from the user's brief (what the board must do, its interfaces, power, size and constraints). Returns the design_id every other tool takes and the web_url where the user follows the design. Uses no generation quota: the…
list_designsThe user's designs, newest first, including ones made in the web app (an agent can continue those too) and board workspaces (kind "board workspace"). With trashed, the designs in the trash instead (deleted, restorable for 7 days).
delete_designMove a design (or a board workspace) to the trash: it leaves list_designs and the web app, and restore_design brings it back for 7 days, after which it is removed for good. permanent removes it, its files and its session right away…
restore_designPut a deleted design back from the trash (within 7 days of delete_design).
get_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.
search_kicad_symbolSearch KiCad's standard symbol libraries for parts whose name contains a substring. Use this whenever you are not 100% sure the (library, name) pair you're about to pass to Part(...) exists. Always prefer the package-suffixed variant the…
get_kicad_symbolReturn the full pin list (number, name, electrical type) and description for a specific KiCad symbol. For some high-risk power parts it also returns curated topology_constraints from datasheet-style application notes and…
search_kicad_footprintSearch KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package family and pin count ('LGA-14', 'QFN-24', 'SOIC-8'), optionally a body size or…
create_custom_symbolRegister a connectable schematic symbol for a part that is NOT in KiCad's libraries (search_kicad_symbol returned nothing). Use this for specialty ICs — LED-matrix drivers, niche sensors, etc. — INSTEAD of telling the synthesizer to model…
add_custom_footprintGive the design a footprint of your own: a KiCad .kicad_mod (the file's text) for a package KiCad's libraries lack. It joins the design's "custom" footprint library and is used as "custom:<name>": pass that to create_custom_symbol…
save_dossierStore the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin tables from your lookups on this design are appended, and verified entries the…
submit_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. Returns…
edit_circuitApply SEARCH/REPLACE patches to your latest script and re-run every check, as submit_circuit does. The latest script is your last submission when it was sent back (attempt_N_circuit.py), otherwise the design's circuit.py. Each search must…
read_design_fileRead a text file of the design: prompt.txt (brief), dossier.md, circuit.py, circuit.net, result.json, circuit.erc.json (KiCad ERC violations), attempt_N_circuit.py / attempt_N_error.txt, board_plan.json, pcb_result.json, pcb_run.log…
get_review_packetEverything a design review needs in one text: the brief, the dossier, circuit.py and the compiled connectivity (every net with every pin and its function), with the reviewer instructions. Review it yourself and fix blockers with…
get_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. Needs an accepted schematic.
start_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). The plan is clamped and returned as applied. Runs for minutes in the…
get_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…
get_bomThe live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and totals. refresh asks the sellers again (tens of seconds).
choose_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. Sourcing only: a different component is a circuit change.
consolidate_bom_basicMove every resistor, capacitor and inductor bought outside JLCPCB's basic library onto an in-stock basic-library part of the same value, package and (capacitors) at least the same voltage rating. Each part outside that library adds a…
get_fab_statusWhether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not.
list_order_providersThe PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them.
get_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.
send_order_to_providerUpload the released board (Gerbers, BOM, placement) to a manufacturer and return the page where the user pays. This publishes the design to a third party: call it only when the user has explicitly asked to order from that provider, and…
upload_boardReplace the design's board with a .kicad_pcb you routed or edited yourself (the file, base64). The board must carry the design's circuit: every schematic part by reference, every pad on the net the netlist gives it; a footprint swap is…
get_downloadsDownload URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take the same Authorization: Bearer API key; the CLI fetches them with `koppar…
import_kicad_projectBring an existing KiCad project in as a board workspace: the project folder as a ZIP (the .kicad_pcb, .kicad_pro, schematics, footprint and 3D-model folders), base64-encoded, up to about 18 MB zipped. The CLI does this with `koppar import…
get_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…
place_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…
auto_placePack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked ones stay; refs names exactly which move (all others stay). Constraints…
anneal_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…
set_board_outlineReplace everything on Edge.Cuts with a new outline: rect (optionally with corner_radius_mm), a polygon of points, or fit_to_parts (the rectangle around every footprint courtyard plus margin_mm). Give exactly one.
set_design_rulesSet the project design rules (.kicad_pro) and copper layer count. Works on a board workspace and on a generated design (create_design → start_board). On a generated design the rules go into circuit.kicad_pro/.kicad_dru in place (the…
set_keepoutsAdd or remove keepout rule areas. Each keepout is a rect or polygon on the given copper layers (default all) and forbids what it names: no_tracks, no_vias, no_zone_fills (all three default true), no_pads, no_footprints. route_board keeps…
check_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…
check_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…
set_zonesAdd or remove copper zones (pours). Each zone pours its net on the given copper layers over rect or polygon, by default the whole board outline. priority orders overlapping zones (higher fills first); clearance_mm and min_thickness_mm…
add_copperLay exact copper by hand where the routers leave a gap: tracks as polylines on one copper layer, and through vias. width_mm, diameter_mm and drill_mm default to the board's current track and via sizes. Nets must exist on the board…
prune_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. nets limits the candidates (GND and the plane…
set_silkscreenTake clutter off the silkscreen. values "hide" (default) hides value and part-number fields; references "keep" (default), "fab" (moved to the fabrication layer) or "hide"; texts "fab" moves footprint texts off the silkscreen. run_drc's…
route_boardRoute under the project's rules and net classes. By default (no nets, no router, none of the single-route options below) it runs the full route pipeline Koppar benchmarks: the learned router on the whole board racing the negotiated router…
repair_boardKeep the copper of every net it already connects and route the nets still open around it: route_board with preserve_existing. The learned router service by default; router "ts" for the local router, which also keeps partial copper and…
ripup_routingDelete tracks and vias: of the given nets, on the given layers (vias are not layer-filtered), with an end inside region, or all. Filters combine. tracks/vias choose which kinds (both by default); zones also deletes the copper zones…
cleanup_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. Contact is copper overlap, as KiCad judges it…
add_project_filesUnpack a ZIP into the project folder, keeping its paths: new footprints into a .pretty library the fp-lib-table names, 3D models, a library table. Existing files are kept unless overwrite is true; the reply lists written, replaced and…
swap_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. pad_map…
fill_zonesRefill every copper zone with KiCad's zone filler.
stamp_silkscreenSilkscreen stamps for release, both off unless asked for: a small spec badge ("routed with Koppar", optionally the title, revision and part count) in the largest free patch of the front or back silk, and JLCPCB's JLCJLCJLCJLC placeholder…
tie_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. A tie is placed only…
widen_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. Nothing moves and no via is added, so the score…
finish_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…
bridge_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. Reports the…
tidy_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…
polish_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…
couple_pairsAfter route_board: re-route the weakly coupled differential pairs one at a time, least coupled first. Both legs are ripped and routed alone around everything else as a pair; the new copper stays only when the pair's coupled share rises by…
diagnose_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). A…
run_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…
render_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. side top|bottom, region [x, y, w, h] mm for a crop…
The first 60 of 64, as the server listed them.
How to connect
Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:
{
"mcpServers": {
"koppar": {
"type": "http",
"url": "https://app.koppar.ai/mcp"
}
}
}Add it
Claude Code, in a terminal
claude mcp add --transport http koppar https://app.koppar.ai/mcpclaude.ai, ChatGPT and other clients: add https://app.koppar.ai/mcp as a custom connector in the settings.
Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.
Before we count this visit
Analytics and ad measurement tell us which pages and which of our ads do their job: Google Analytics and Google Ads, the Meta pixel, Yandex Metrica, and one first-party id of our own. Nothing is stored until you answer, and declining changes nothing about the site.