kicad-mcp
At present, this server exposes only a single tool:
health— reports the status of the server, KiCad,kicad-cli, and the active project.
However, according to its README, it is designed to provide a comprehensive suite of KiCad automation tools for PCB and schematic design, including:
Reading schematics and PCBs (TOON encoding)
Placing and moving footprints
Routing boards (manual track/via placement or autorouting via Freerouting)
Managing zones (copper planes, keepouts, fill)
Validating designs with ERC/DRC
Editing schematics (symbols, values, footprints, pins)
Exporting manufacturing files (Gerbers, BOM, renders)
Saving board state
Currently, only the health probe is implemented in the actual schema; the other tools are described but not yet exposed.
Allows an LLM agent to operate on KiCad EDA projects, reading schematics in compressed TOON format, executing atomic tools, and updating context via delta and local area.
Click on "Install 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-mcpread the TOON schematic and list all components"
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 (Model Context Protocol) server that lets an LLM agent operate KiCad directly — read schematics and PCBs in a token-efficient format, place footprints, draw copper, run an autorouter, validate with ERC/DRC, and export manufacturing files — through 32 purpose-built tools instead of raw file editing.
Status: past MVP. The full PCB write loop (placement → outline → zones/GND plane → autorouting → DRC → export) has been closed and re-validated against real KiCad 10.0.4 for months. It is now in a pre-release consolidation phase: a structured Validation Suite exercises the flow against real open-hardware projects to find where it actually breaks, on purpose, before anyone else does. See Known limitations below — this README leads with them rather than burying them.
What it does
kicad-mcp automates the canonical KiCad PCB flow: place footprints → draw board outline → add copper zones/GND plane → route with Freerouting (headless autorouter) → refill zones and re-run DRC → export gerbers/BOM/renders. State is exposed to the LLM agent as TOON, a compact encoding designed to keep token usage low across many small tool calls rather than re-serializing the whole board every time.
It talks to a running KiCad instance over KiCad's own local IPC API
(kicad-python) for live edits, and shells out to kicad-cli for
DRC/ERC/export — it does not parse or hand-edit .kicad_pcb/.kicad_sch
files itself for PCB work (schematic editing is the one exception, see
limitation 7 below).
Validated scale, stated plainly: the flow has completed end-to-end, with results within the project's own acceptance thresholds, on boards up to 63 footprints / 48 nets / 2 layers. It was also run against a 437-footprint / 380-net / 4-layer board (HackRF One) specifically to find the scaling ceiling — the autorouter did not complete on that board (see limitation 2). Treat "small-to-medium 2-layer board" as the demonstrated sweet spot today, not "any KiCad project."
Related MCP server: KiCAD Schematic Manipulation MCP Server
Quickstart
git clone https://github.com/Gato513/kicad-mcp.git
cd kicad-mcp
uv sync # install dependencies (uv, https://docs.astral.sh/uv/)
python3 scripts/verificar_entorno.py # environment check — run this before anything else
uv run pytest -m "not integration" # offline unit + golden tests (394 passing today)verificar_entorno.py tells you exactly what's missing for the mode
you're in (plain unit tests vs. tests that need a running KiCad) and
prints the fix, so start there rather than guessing at env vars.
To actually drive KiCad you need:
KiCad ≥ 9.0 installed, 10.0.4 is the validated target (see ADR-0002), with Preferences → Plugins → Enable API server turned on and KiCad restarted.
KICAD_MCP_PROJECTset to the.kicad_proyou want the server to operate on.KICAD_MCP_FREEROUTING_JARset to a localfreerouting-*.jarif you wantroute_boardto actually autoroute (Java ≥ 17 required).KICAD_API_SOCKETonly if your KiCad API socket isn't at the defaultipc:///tmp/kicad/api.sock.
Then register the server with an MCP client (uv run kicad-mcp runs it
over stdio) or probe it by hand with the official inspector:
npx @modelcontextprotocol/inspector uv run kicad-mcpA minimal first call once connected: health() to confirm the bridge can
see your KiCad instance, then run_drc() against a project you don't
mind DRC-checking.
Known limitations
This section exists because a colleague who tries this on their own board deserves to know where it stops working before they hit it, not after. Each item links to the session or document where it was found and verified — nothing here is a guess.
Validated up to 63 footprints / 2 layers; a 437-footprint / 4-layer board found the scaling ceiling, not a routed result. See
docs/analisis/validation-suite-sintesis-A-B-C.mdfor the full three-point comparison (13 fp → 63 fp → 437 fp).Freerouting 2.1.0 can enter an internal crash-loop on large/complex boards (observed on the 437-footprint board: repeated internal
NullPointerExceptions, no routing progress for a full hour). This is an upstream Freerouting issue, not a kicad-mcp bug —route_boarditself behaved correctly on the timeout (no corrupted state). Seedocs/BACKLOG.md(F-V3-ROUTER-TIMEOUT-HARD).add_zone(fill=true)can crash KiCad after 3-4 consecutive calls on large boards. Root cause is not conclusively identified — code analysis found no bridge-side cause, and the failure signature (zone fragmentation) looks like a pcbnew fill behavior at scale, but this wasn't confirmed by reproduction this cycle. Workaround: callfill_zones()once at the end instead offill=trueper zone. Full writeup:docs/analisis/auditoria-contratos-bridge.md§4.Most write tools don't save to disk by themselves. Tools like
add_track,add_via,move_footprintmutate the live, in-memory board and expect the caller to invokesave_board()explicitly. The tools that guarantee disk == memory when they return successfully areroute_board,fill_zones,add_zone(fill=true), anddelete_tracks_bulkwhen the board has copper zones — see ADR-0012.delete_tracks_bulkbehaves differently depending on the board. If the board contains at least one copper zone — a board-wide check, not a geometric test of whether the deletion actually touched that zone — it refills zones, re-enforces hole clearance and saves to disk before returning, raisingPOST_ZONE_PERSIST_FAILEDif that save fails rather than succeeding silently. On a board with no copper zone it stays in-memory like the tools above, andsave_board()is the caller's job.delete_zoneandadd_keepout_zonedon't recompute neighboring zone fills on their own — tracked asA2/A3indocs/analisis/auditoria-contratos-bridge.md§5.2.Freerouting doesn't treat a GND copper plane as an exclusion zone for nets it doesn't own — it only routes to the plane's own net, not around it. A specific same-layer variant of the resulting orphaned-via pattern isn't fixed by the existing post-route stitching yet. See
F-D5-01-Bindocs/BACKLOG.md.Schematic editing is direct file mutation (
kicad-skip), not IPC — KiCad 10 doesn't expose a schematic API. This also means the schematic write tools (add_symbol,set_value,set_footprint,connect_pins) are purely additive today: there's nodelete_wireor similar, so an agent can build a schematic but not clean one up. Seedocs/guias/guia-paleta.mdfor the one real hazard this creates (never edit a schematic file while KiCad's own editor has it open).Long-running tool calls (e.g. a full autoroute) can exceed an MCP client's idle timeout (~1818s observed) before KiCad/Freerouting finishes. This is a client-side limitation, not a kicad-mcp bug — driving the call from a detached process (
nohup+disown) works around it. Seedocs/historico/sesiones/33-reporte.md.GUI-dependent tests require a human with KiCad open and are not automated — this is a constraint of KiCad's IPC API on this version, not a project shortcut. See
docs/guias/pruebas-gui.mdfor the manual protocol.Practically Linux-only (ADR-0005). KiCad 10.0.4 is the validated target; 9.0 is the documented minimum (ADR-0002).
Documentation
docs/analisis/validation-suite-sintesis-A-B-C.md— the cross-board evidence behind the scale claims above.docs/analisis/auditoria-contratos-bridge.md— full audit of every write tool's persistence/error/sync/reload contract.docs/adr/— one architectural decision record per file (why KiCad 10, why stdio-only, why no database, theroute_boardpersistence contract, etc.).docs/architecture-for-contributors.md— start here if you're new: real process topology, tool taxonomy, and how to navigate the ADRs/specs/session-report layers below.docs/DECISIONES.md— index of ADRs plus informal decisions not yet promoted to one.docs/investigacion/— root-cause investigation reports for specific bugs.docs/glosario.md— EDA/KiCad domain glossary.docs/guias/guia-paleta.md— protocol for populating a schematic withadd_symbol.docs/guias/pruebas-gui.md— manual test protocol for the GUI-dependent test suite.docs/INDEX.md— full documentation map, if you need something not linked above.
Contributing
Contributions are welcome. CONTRIBUTING.md covers
setup, the project's write-tool contract (the 4 axes every write tool is
checked against), and the review conventions that shaped the codebase —
read it before opening a PR that touches anything under src/kicad_mcp/tools/
or src/kicad_mcp/bridge/.
License
Apache License 2.0 — see LICENSE. Runtime dependencies with
other licenses (KiCad and Freerouting are GPL-3.0, invoked as external
processes rather than linked; kicad-skip is LGPL-2.1) are listed in
NOTICE.
Acknowledgments
KiCad — the EDA platform this project automates, not replaces.
Freerouting — the headless autorouter
route_boarddrives. Its 2.1.0 crash-loop on large boards is a real, documented limitation (see above) — it's still the best open autorouter available for this integration.ANAVI Technology and Great Scott Gadgets — authors of the real open-hardware designs (
anavi-dev-mic,anavi-macro-pad-12,hackrf-one) used as ground truth in the Validation Suite.Built with heavy use of Claude (Anthropic) as the agentic development environment throughout this project's write-tool implementation and validation cycles — noted here for transparency about how the codebase was produced, not as an endorsement of any particular workflow.
(También disponible en español.)
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- Alicense-qualityBmaintenanceEnables natural language interaction with KiCad projects, schematics, and PCBs, supporting project management, design rule checking, netlist extraction, and datasheet RAG search.2MIT
- Alicense-qualityDmaintenanceEnables AI tools to create, edit, and inspect KiCAD schematic files, including components, wires, labels, and sheets.MIT
- Alicense-qualityDmaintenanceEnables AI assistants like Claude to interact with KiCAD for PCB design automation, providing comprehensive tool schemas and real-time project state access.642MIT
- AlicenseAqualityAmaintenanceA read-only MCP server for AI agents to understand KiCad projects through progressive disclosure, providing compact summaries and drill-down tools for components, nets, traces, and ERC/DRC checks without blowing context budgets.71MIT
Related MCP Connectors
Agent-first CAD: editable .kcad.ts source, deterministic review, OpenCASCADE kernel.
DXF and PDF/X-4 for AI agents: structured facts, PNG renders, an interactive in-chat viewer.
Git-backed platform for skills, tools, and context for AI agents
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gato513/kicad-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server