{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_e2bq2q59hjvq","handle":"koppar","url":"https://wellknown.network/agents/koppar","links":{"self":"https://wellknown.network/agents/koppar/record.json","html":"https://wellknown.network/agents/koppar","markdown":"https://wellknown.network/agents/koppar/record.md","api":"https://wellknown.network/api/v1/agents/koppar","status":"https://wellknown.network/api/v1/agents/koppar/status","claim":"https://wellknown.network/agents/koppar/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/koppar/claim.json","badge":"https://wellknown.network/agents/koppar/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/koppar/history","tools":"https://wellknown.network/api/v1/agents/koppar/tools"},"ard":{"identifier":"urn:air:app.koppar.ai:server:koppar","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Koppar","summary":"Design a KiCad PCB from a prompt: parts, schematic checks, routing, KiCad DRC and Gerbers.","description":"Design a KiCad PCB from a prompt: parts, schematic checks, routing, KiCad DRC and Gerbers.","publisher":{"name":"ai.koppar","url":null},"homepage":"https://docs.koppar.ai/agents/mcp","repository":null,"version":"1.0.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://app.koppar.ai/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-17T23:44:42.630809Z","publishedAt":"2026-10-17T23:44:42.630809Z","registryName":"ai.koppar/koppar"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"media.3d","name":"3D & Design","confidence":1,"provenance":"derived"},{"slug":"dev.package-management","name":"Packages & Dependencies","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.977,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"research.web","name":"Deep Web Research","confidence":0.54,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":0.525,"provenance":"derived"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["commerce","content","dev","media","productivity","research"],"language":"fr"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-10-24T04:23:25.035Z","lastProbedAt":"2026-10-24T04:23:25.035Z","statusComputedAt":"2026-10-24T04:25:43.112Z","reliability30d":{"probes":11,"successRate":1,"p50Ms":26,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":11,"ok":11,"authBoundaryOk":0,"serviceOk":11,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-24T04:23:25.035Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":28,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T21:25:24.551Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T14:28:10.248Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":108,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T07:26:16.331Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":21,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T00:31:13.702Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":18,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T17:31:53.108Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T11:34:25.354Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T04:28:31.823Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T22:30:13.745Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T12:25:19.758Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":25,"error":null,"detail":{"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"toolCount":66,"toolsHash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","serverName":"koppar","capabilities":["tools","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_workflow_guide","description":"How 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 "},{"name":"create_design","description":"Start 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"},{"name":"list_designs","description":"The 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 trash"},{"name":"delete_design","description":"Move 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 remov"},{"name":"restore_design","description":"Put a deleted design back from the trash (within 7 days of delete_design)."},{"name":"get_design","description":"Where 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,"},{"name":"search_kicad_symbol","description":"Search 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 abou"},{"name":"get_kicad_symbol","description":"Return 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 top"},{"name":"search_kicad_footprint","description":"Search KiCad's standard footprint libraries. Returns 'Library:Footprint' strings suitable for the footprint= argument of Part(...). Query with the package famil"},{"name":"create_custom_symbol","description":"Register 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-mat"},{"name":"add_custom_footprint","description":"Give 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 lib"},{"name":"save_dossier","description":"Store the research dossier (markdown with ## Parts list, ## Power rails, ## Topology constraints, ## Notes, as the research guide describes). The verified pin t"},{"name":"submit_circuit","description":"Compile and check a complete SKiDL script: the symbol and footprint pre-flight (unambiguous typos are corrected and listed), SKiDL, the ERC score, KiCad ERC, fl"},{"name":"edit_circuit","description":"Apply 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 ba"},{"name":"read_design_file","description":"Read 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"},{"name":"get_review_packet","description":"Everything 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"},{"name":"get_board_context","description":"What 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"},{"name":"start_board","description":"Start place and route with your board plan (the JSON object from the board guide: board, stated, edge, chain, groups, near, side, fixed, keepouts, netClasses). "},{"name":"get_board_status","description":"The board run: stage, size, layers, placement, routing completion, open nets, DRC counts; once finished, DRC violations by type, whether the fab files are relea"},{"name":"get_bom","description":"The live-priced BOM: each line with references, value, footprint, the chosen offer (seller, part number, MPN, price, stock, match quality), alternatives and tot"},{"name":"choose_bom_part","description":"Pick 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 automat"},{"name":"consolidate_bom_basic","description":"Move 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"},{"name":"get_fab_status","description":"Whether the board has earned its fab files (zero serious DRC errors, nothing unconnected), and if not, why not."},{"name":"list_order_providers","description":"The PCB and assembly providers, whether each can quote and take this kind of board today, and what a handoff sends them."},{"name":"get_order_price","description":"One 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."},{"name":"send_order_to_provider","description":"Upload 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 "},{"name":"upload_board","description":"Replace 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 b"},{"name":"get_downloads","description":"Download URLs for the design (KiCad project, schematic, netlist, BOM CSV, board file, 3D model, Gerbers, order bundle) and which are available now. They take th"},{"name":"import_kicad_project","description":"Bring 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), b"},{"name":"get_board_info","description":"The board as it stands: copper layers, outline, design rules and net classes, counts (footprints, nets, tracks, vias, zones, keepouts, KiCad unconnected items),"},{"name":"place_footprints","description":"Put 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"},{"name":"auto_place","description":"Pack footprints inside the board outline with Koppar's heuristic placer (ratsnest-driven, courtyard-legal). By default every unlocked footprint moves and locked"},{"name":"anneal_place","description":"Dense placement by simulated annealing: wirelength inside the outline with courtyard gaps, edge connectors held on their edge, fixed and locked parts held, keep"},{"name":"set_board_outline","description":"Replace 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 fo"},{"name":"set_design_rules","description":"Set 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 gener"},{"name":"set_keepouts","description":"Add 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_z"},{"name":"check_net_rules","description":"Check 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 "},{"name":"check_physics","description":"Judge 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"},{"name":"set_zones","description":"Add 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"},{"name":"add_copper","description":"Lay 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"},{"name":"prune_vias","description":"Remove 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 removi"},{"name":"set_silkscreen","description":"Take clutter off the silkscreen. values \"hide\" (default) hides value and part-number fields; references \"keep\" (default), \"fab\" (moved to the fabrication layer)"},{"name":"route_board","description":"Route 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 "},{"name":"repair_board","description":"Keep 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 defa"},{"name":"ripup_routing","description":"Delete 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 ch"},{"name":"cleanup_board","description":"Sweep 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 thei"},{"name":"add_project_files","description":"Unpack 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 file"},{"name":"swap_footprint","description":"Replace 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"},{"name":"fill_zones","description":"Refill every copper zone with KiCad's zone filler."},{"name":"stamp_silkscreen","description":"Silkscreen stamps for release, both off unless asked for: a small spec badge (\"routed with Koppar\", optionally the title, revision and part count) in the larges"},{"name":"tie_rail_pads","description":"Tie 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 th"},{"name":"widen_nets","description":"Grow 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"},{"name":"finish_board","description":"Close 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 ne"},{"name":"bridge_islands","description":"A 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 "},{"name":"tidy_copper","description":"After 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 "},{"name":"polish_vias","description":"After 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 onl"},{"name":"couple_pairs","description":"After 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 el"},{"name":"diagnose_open_nets","description":"For 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 "},{"name":"board_census","description":"The 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 SM"},{"name":"run_drc","description":"KiCad'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, pa"},{"name":"score_board","description":"Export 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 = volum"},{"name":"render_board","description":"An 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, court"},{"name":"export_step","description":"Export the assembled board as STEP (3D models, DNP parts left out). Download it as workspace.step; workspace.zip includes it."},{"name":"list_board_revisions","description":"The snapshots of this board, newest first. Revision N is the board as it was before change N (revision 0 is the project as imported); restore_board_revision N g"},{"name":"restore_board_revision","description":"Put the board and its rules back as they were in a revision from list_board_revisions. The current board is saved as a new revision first, so the restore itself"},{"name":"get_board_job","description":"The design's latest board job: its status and, once it ends, its result or error. wait_s holds the call until it ends."}],"package":null,"toolSurface":{"id":"ts_4xzruyfkujsm","endpointId":"ep_wvwcc9exbk5r","hash":"24bbf645dca605b92fb9f9a076ffade561dd9d88d3fd22922d81c10de9fb85b2","toolCount":66,"serverName":"koppar","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-21T03:27:10.703Z","lastSeenAt":"2026-10-24T04:23:25.039Z","observations":11,"toolNames":["get_workflow_guide","create_design","list_designs","delete_design","restore_design","get_design","search_kicad_symbol","get_kicad_symbol","search_kicad_footprint","create_custom_symbol","add_custom_footprint","save_dossier","submit_circuit","edit_circuit","read_design_file","get_review_packet","get_board_context","start_board","get_board_status","get_bom","choose_bom_part","consolidate_bom_basic","get_fab_status","list_order_providers","get_order_price","send_order_to_provider","upload_board","get_downloads","import_kicad_project","get_board_info","place_footprints","auto_place","anneal_place","set_board_outline","set_design_rules","set_keepouts","check_net_rules","check_physics","set_zones","add_copper","prune_vias","set_silkscreen","route_board","repair_board","ripup_routing","cleanup_board","add_project_files","swap_footprint","fill_zones","stamp_silkscreen","tie_rail_pads","widen_nets","finish_board","bridge_islands","tidy_copper","polish_vias","couple_pairs","diagnose_open_nets","board_census","run_drc","score_board","render_board","export_step","list_board_revisions","restore_board_revision","get_board_job"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_wvwcc9exbk5r","url":"https://app.koppar.ai/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-23T07:26:16.344Z","auth":{"observedAt":"2026-10-23T07:26:16.365Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-23T07:26:16.402Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"app.koppar.ai","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-10-12T14:58:23.000Z","validTo":"2027-01-10T14:58:22.000Z","daysToExpiry":78,"sanCount":1,"fingerprint256":"F3:80:90:1F:63:6B:32:DB:1A:75:02:DC:D0:38:11:51:53:F2:01:69:95:22:FB:CA:DF:6E:94:EA:B6:03:DE:62"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"ai.koppar/koppar","url":"https://registry.modelcontextprotocol.io/v0/servers/ai.koppar%2Fkoppar","firstSeenAt":"2026-10-21T03:20:28.555Z","fetchedAt":"2026-10-21T03:20:28.555Z","normalizedAt":"2026-10-21T03:20:28.555Z"}]},"firstSeenAt":"2026-10-21T03:20:28.555Z","updatedAt":"2026-10-24T04:27:33.440Z"}