kicad-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KICAD_MCP_CLI_PATH | No | override for the kicad-cli executable; auto-discovered per platform | |
| KICAD_MCP_CLI_TIMEOUT | No | seconds for kicad-cli subprocess calls | 120 |
| KICAD_MCP_IPC_TIMEOUT | No | seconds for IPC calls | 10 |
| KICAD_MCP_SEARCH_PATHS | No | os.pathsep-separated project roots (also the file-access confinement boundary) | ~/Documents/KiCad,~/KiCad |
| KICAD_MCP_FREEROUTING_JAR | No | Freerouting jar for autoroute (Phase 6) | |
| KICAD_MCP_ALLOW_SCHEMATIC_WRITE | No | 1 to enable experimental schematic writes | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_server_statusA | Report kicad-mcp backend availability, capabilities, and KiCad version. Use this first to see what is possible in the current environment: headless analysis/export (kicad-cli), schematic reads (S-expr), and live board editing (IPC, needs a running KiCad). |
| list_projectsA | List KiCad projects discoverable under the configured search paths. |
| get_project_infoB | Info for a project (.kicad_pro path or its directory): associated files. |
| create_projectB | Create a new, minimal KiCad project under |
| get_board_infoB | Summarize a board: copper layers, thickness, nets, footprints, extents. |
| get_board_stackupB | Ordered physical stackup (dielectric + copper layers with thickness). |
| list_schematic_componentsB | List schematic components (reference, value, lib_id, footprint). |
| list_schematic_netsB | List nets with their fan-out (node count), from the exported netlist. |
| trace_netB | Show every pin (ref + pin number/function) connected to a given net. |
| run_ercB | Run Electrical Rules Check on the schematic; return normalized findings. |
| run_drcC | Run Design Rules Check on the board; return normalized findings. |
| export_gerbersC | Plot gerbers + drill files for the board into a directory. |
| export_bomB | Export the schematic Bill of Materials as CSV. |
| export_netlistC | Export the schematic netlist (KiCad s-expression format). |
| export_stepC | Export a STEP 3D model of the board. |
| render_boardA | Render a 3D PNG of the board from a side (top/bottom/left/right/front/back). |
| export_fab_packageC | Bundle a complete fab package (gerbers + drill + BOM + CPL) into a zip. |
| review_designA | Audit a board against the full Hartley/Phil's Lab rule catalog. Returns findings grouped by severity with rule IDs, one-line physics rationales, and citations, plus a markdown summary. |
| review_topicB | Audit one rule family: stackup, grounding, return_path, decoupling, dfm. |
| set_design_contextC | Provide facts the files cannot contain (rise times, clocks, target impedances, connector-facing nets, fab house) to sharpen the review. |
| get_live_board_statusA | Status of the board open in the running KiCad (via IPC): item counts, layers, KiCad version. Requires the GUI with the API enabled. |
| list_live_footprintsA | List footprints on the live board with position/rotation/layer. |
| move_footprintB | Move a footprint to (x, y) in mm on the live board. Single undo step. |
| rotate_footprintB | Set a footprint's rotation in degrees on the live board. Single undo step. |
| duplicate_footprintA | Copy a placed footprint to a new reference + position (KiCad 9 IPC cannot place from a library, so cloning an on-board part is the supported 'add a part'). Give x_mm/y_mm for an absolute spot, else it offsets. |
| get_netclassesA | List netclasses on the live board with their track/clearance/via/diff- pair constraints and member nets. |
| add_zoneB | Add a copper zone on a layer from a polygon of [x, y] mm points, optionally assigned to a net (e.g. GND). Single undo step. |
| refill_zonesA | Refill all copper zones on the live board. |
| save_boardA | Save the live board to disk — required before render_board / run_drc can see live edits (they read the file). |
| route_traceA | Route a trace along [x, y] mm waypoints on a layer, optionally on a net. Multi-segment, single undo step. |
| add_viaB | Add a via at (x, y) mm. Defaults to the standard 0.7/0.3 mm geometry. |
| route_differential_pairA | Route a differential pair: P and N run parallel to the centerline waypoints, offset by (width+gap)/2 each side. Single undo step. |
| set_symbol_propertyA | [EXPERIMENTAL] Set a property (Value, Footprint, ...) on an existing schematic symbol. Requires KICAD_MCP_ALLOW_SCHEMATIC_WRITE=1 and the file closed in KiCad. Returns the post-edit ERC report. |
| duplicate_symbolA | [EXPERIMENTAL] Clone a placed symbol with a new reference, offset by (dx, dy) mm. Fresh UUIDs; the new part's pins start unconnected. Requires KICAD_MCP_ALLOW_SCHEMATIC_WRITE=1 and the file closed in KiCad. |
| search_symbolsB | Search installed KiCad symbol libraries; returns Lib:Symbol ids. |
| search_footprintsA | Search installed KiCad footprint libraries; returns Lib:Footprint ids. |
| search_jlcpcb_partsA | Search a local JLCPCB parts DB by MPN/description. Needs KICAD_MCP_JLCPCB_DB set to a jlcparts-style SQLite database. |
| get_task_statusC | Poll a background task (autoroute, batch export). Returns the result once status is 'done'. |
| list_tasksA | List background tasks and their statuses (newest first). |
| cleanup_tasksA | Drop finished background tasks from the queue. |
| export_fab_package_asyncA | Start a fab-package export in the background; poll it with get_task_status. Use for large boards that may exceed the request timeout. |
| autoroute_boardA | Autoroute a Specctra .dsn with Freerouting (background task → task_id). Needs KICAD_MCP_FREEROUTING_JAR and Java. Note: KiCad 9 cannot export DSN headlessly, so export the .dsn from the KiCad GUI first. |
| get_review_historyA | Show past review/DRC runs for a project (counts over time). Filter by kind: 'review' or 'drc'. |
| list_tool_categoriesA | List tool categories with a description and tool count. Start here to navigate the tool surface. |
| get_category_toolsB | List the tools in a category with their one-line descriptions. |
| search_toolsB | Search tools by name or description substring. |
| execute_toolB | Dispatch to any tool by name with an arguments object. Convenience for tools reached via the categories above. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| review_board | Guided full design review of a KiCad board using the review engine. |
| plan_stackup | Interview + recommend a stackup following the Hartley/Phil rules. |
| debug_emi | Hartley-style EMI diagnostic tree. |
| prepare_fab | Pre-release DFM checklist before generating fab outputs. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 47 tools
Most tools have clearly distinct purposes, though a few (e.g., routing-related tools like autoroute_board, route_trace, route_differential_pair) could potentially be confused. Descriptions are detailed enough to differentiate them.
All tools follow a consistent verb_noun pattern in snake_case, such as add_via, create_project, get_board_info. There are no deviations or mixed conventions.
With 47 tools, the server is on the higher end, but given the complexity of KiCad PCB design, each tool addresses a specific need. The count is borderline but not excessive.
The tool surface covers most key operations: project management, schematic and board editing, routing, export, DRC/ERC, and review. Minor gaps exist (e.g., no explicit tool to delete footprints), but they are mostly workable.