kicad-mcp
Provides tools to analyze, review, export, and edit KiCad electronic design automation (EDA) projects, including PCB layout, schematic, and design rule checks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kicad-mcp Run a design review on my board"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kicad-mcp
An MCP server that lets Claude analyze, review, and export KiCad 9 designs — and (with a running KiCad) edit boards live. Its differentiator is a built-in design-review engine encoding the teachings of Rick Hartley and Phil Salmony (Phil's Lab): stackup, return paths, grounding, decoupling, crosstalk, SMPS layout, mixed-signal partitioning, and DFM — with anti-myth guards so it never nags about 90° corners or "shield" moats.
Status: All phases (0–6) implemented. Headless analysis/verify/export, a 23-rule review engine across 10 families (with anti-myth guards), live board editing via IPC (verified against KiCad 9.0.8), experimental schematic writes, symbol/footprint/JLCPCB search, an async task queue, a tool router, and review history, and rip-up/re-routing. 45 tools + 4 router tools, 4 prompts, 191 tests. See
docs/architecture.md,PLAN.md§8, andCLAUDE.md.
The review engine (the differentiator)
review_design audits a board against a cited rule catalog and returns findings
grouped by severity — each with a rule ID, a one-line physics rationale, a
citation, and the exact location. v1 covers five families:
Family | Rules | Checks |
stackup | K1, K2, K5, K6 | signal-adjacent-to-plane, bad 4-layer order, tight pwr–gnd cavity, 2-layer ground |
grounding | G1, G2 | split ground plane, separate analog/digital grounds |
return_path | R5 | trace crossing a gap in its reference plane (geometric) |
decoupling | DEC-1 | 100 nF near every IC |
dfm | RTE-2, RTE-3, DFM-4 | power track width, via annular ring, board outline / mounting holes |
Anti-myth by construction: no rule fires on 90° corners, guard traces, via
fill, or length-in-mm. A golden test asserts a board full of 90° corners produces
zero findings. Use set_design_context to supply rise times / clocks / target
impedances the files can't contain.
Related MCP server: mcp-server-kicad
Tools
Foundation: get_server_status · list_projects · get_project_info ·
create_project · get_board_info · get_board_stackup ·
list_schematic_components · list_schematic_nets · trace_net · run_erc ·
run_drc · export_gerbers · export_bom · export_netlist · export_step ·
render_board · export_fab_package
Review engine: review_design · review_topic · set_design_context (+ the
review_board prompt)
Live editing (needs a running KiCad with the IPC API enabled):
get_live_board_status · list_live_footprints · move_footprint ·
rotate_footprint · route_trace · add_via · route_differential_pair ·
add_zone · refill_zones · save_board
The visual loop: edit live → save_board → render_board → inspect the PNG →
edit again. Every mutation is one undo step (Cmd/Ctrl-Z reverts it in the GUI).
Architecture
One Python process (FastMCP, stdio). Three backends behind one capability interface, selected at runtime with graceful degradation:
Backend | Library | Role | Needs |
| subprocess | ERC/DRC, netlist, BOM, gerbers, renders, fab package | KiCad 9 installed |
S-expr | kicad-skip + sexpdata | schematic/board read (writes gated, experimental) | file closed in GUI |
IPC | kicad-python (kipy) | live PCB editing (Phase 3) | running KiCad + IPC API |
If the GUI is down, editing tools return actionable errors while analysis/review/export keep working headless.
Install (dev)
uv venv
uv pip install -e ".[dev]"
uv run pytest
uv run ruff check .Or with stock tooling:
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest && ruff check .Run
python -m kicad_mcp # stdio MCP server
# or the installed console script:
kicad-mcpThe first tool to call is get_server_status, which reports which backends
are live, what capabilities are available, and the detected KiCad version.
Configuration (KICAD_MCP_*)
Variable | Meaning | Default |
|
|
|
| override for the | auto-discovered per platform |
| Freerouting jar for autoroute (Phase 6) | unset |
|
|
|
| seconds for kicad-cli subprocess calls |
|
| seconds for IPC calls |
|
kicad-cli is discovered at the platform default
(/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli on macOS,
C:\Program Files\KiCad\9.0\bin\kicad-cli.exe on Windows, kicad-cli on PATH on
Linux), overridable via KICAD_MCP_CLI_PATH.
License
MIT — see LICENSE.
Available Tools
47 toolsadd_viaB
Add a via at (x, y) mm. Defaults to the standard 0.7/0.3 mm geometry.
Inputs: x_mm (required), y_mm (required), net, size_mm, +1 more.
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.
Inputs: layer (required), polygon_mm (required), net.
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.
Inputs: dsn_path (required), output_ses.
cleanup_tasksA
Drop finished background tasks from the queue.
Inputs: no named parameters.
create_projectB
Create a new, minimal KiCad project under directory (within roots).
Inputs: name (required), directory (required).
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.
Inputs: reference (required), new_reference (required), x_mm, y_mm.
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.
Inputs: project (required), reference (required), new_reference (required), dx_mm, +1 more.
execute_toolB
Dispatch to any tool by name with an arguments object. Convenience for tools reached via the categories above.
Inputs: name (required), arguments.
export_bomB
Export the schematic Bill of Materials as CSV.
Inputs: project (required), output.
export_fab_packageC
Bundle a complete fab package (gerbers + drill + BOM + CPL) into a zip.
Inputs: project (required), output.
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.
Inputs: project (required), output.
export_gerbersC
Plot gerbers + drill files for the board into a directory.
Inputs: project (required), output_dir.
export_netlistC
Export the schematic netlist (KiCad s-expression format).
Inputs: project (required), output.
export_stepC
Export a STEP 3D model of the board.
Inputs: project (required), output.
get_board_infoB
Summarize a board: copper layers, thickness, nets, footprints, extents.
Inputs: project (required).
get_board_stackupB
Ordered physical stackup (dielectric + copper layers with thickness).
Inputs: project (required).
get_category_toolsB
List the tools in a category with their one-line descriptions.
Inputs: category (required). Returns: result
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.
Inputs: no named parameters.
get_netclassesA
List netclasses on the live board with their track/clearance/via/diff- pair constraints and member nets.
Inputs: no named parameters. Returns: result
get_project_infoB
Info for a project (.kicad_pro path or its directory): associated files.
Inputs: project (required).
get_review_historyA
Show past review/DRC runs for a project (counts over time). Filter by kind: 'review' or 'drc'.
Inputs: project (required), kind. Returns: result
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).
Inputs: no named parameters.
get_task_statusC
Poll a background task (autoroute, batch export). Returns the result once status is 'done'.
Inputs: task_id (required).
list_live_footprintsA
List footprints on the live board with position/rotation/layer.
Inputs: no named parameters. Returns: result
list_projectsA
List KiCad projects discoverable under the configured search paths.
Inputs: no named parameters. Returns: result
list_schematic_componentsB
List schematic components (reference, value, lib_id, footprint).
Inputs: project (required). Returns: result
list_schematic_netsB
List nets with their fan-out (node count), from the exported netlist.
Inputs: project (required). Returns: result
list_tasksA
List background tasks and their statuses (newest first).
Inputs: no named parameters. Returns: result
list_tool_categoriesA
List tool categories with a description and tool count. Start here to navigate the tool surface.
Inputs: no named parameters. Returns: result
move_footprintB
Move a footprint to (x, y) in mm on the live board. Single undo step.
Inputs: x_mm (required), y_mm (required), reference (required).
refill_zonesA
Refill all copper zones on the live board.
Inputs: no named parameters.
render_boardA
Render a 3D PNG of the board from a side (top/bottom/left/right/front/back).
Inputs: project (required), side, output.
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.
Inputs: project (required).
review_topicB
Audit one rule family: stackup, grounding, return_path, decoupling, dfm.
Inputs: topic (required), project (required).
rotate_footprintB
Set a footprint's rotation in degrees on the live board. Single undo step.
Inputs: degrees (required), reference (required).
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.
Inputs: layer (required), net_n (required), net_p (required), gap_mm (required), +2 more.
route_traceA
Route a trace along [x, y] mm waypoints on a layer, optionally on a net. Multi-segment, single undo step.
Inputs: layer (required), width_mm (required), points_mm (required), net.
run_drcC
Run Design Rules Check on the board; return normalized findings.
Inputs: project (required).
run_ercB
Run Electrical Rules Check on the schematic; return normalized findings.
Inputs: project (required).
save_boardA
Save the live board to disk — required before render_board / run_drc can see live edits (they read the file).
Inputs: no named parameters.
search_footprintsA
Search installed KiCad footprint libraries; returns Lib:Footprint ids.
Inputs: query (required), limit. Returns: result
search_jlcpcb_partsA
Search a local JLCPCB parts DB by MPN/description. Needs KICAD_MCP_JLCPCB_DB set to a jlcparts-style SQLite database.
Inputs: query (required), limit, basic_only. Returns: result
search_symbolsB
Search installed KiCad symbol libraries; returns Lib:Symbol ids.
Inputs: query (required), limit. Returns: result
search_toolsB
Search tools by name or description substring.
Inputs: query (required). Returns: result
set_design_contextC
Provide facts the files cannot contain (rise times, clocks, target impedances, connector-facing nets, fab house) to sharpen the review.
Inputs: project (required), fab_house, rise_time_ns, connector_nets, +2 more.
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.
Inputs: value (required), project (required), property (required), reference (required).
trace_netB
Show every pin (ref + pin number/function) connected to a given net.
Inputs: net (required), project (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
Maintenance
Related MCP Connectors
Autonomous multi-layer PCB routing, KiCad 9 DRC/DFM verification & IPC-2141A impedance MCP server.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server for Electronic Design Automation that provides comprehensive tools for managing KiCad 9.x PCB design workflows. It enables users to create schematics, layout PCBs, perform design rule checks, and export manufacturing files through a standardized interface.391MIT
- AlicenseAqualityAmaintenanceMCP servers for KiCad schematic, PCB, symbol, footprint, and project automation, enabling AI-assisted electronic design via tools for read/write, analysis, and exports.109426 PyPI16GPL 3.0
- AlicenseBqualityBmaintenanceAn MCP server that enables AI assistants to analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code for KiCad projects.39184MIT
- AlicenseBqualityBmaintenanceAn MCP server providing full control over KiCad 10, enabling PCB editing, schematic editing, design data, and production output via natural language.1021MIT