Skip to main content
Glama
kicad-mcp

kicad-mcp

by antonmadto

kicad-mcp

CI License: MIT Python 3.10+

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, and CLAUDE.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

kicad-cli

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-mcp

The 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

KICAD_MCP_SEARCH_PATHS

os.pathsep-separated project roots (also the file-access confinement boundary)

~/Documents/KiCad, ~/KiCad

KICAD_MCP_CLI_PATH

override for the kicad-cli executable

auto-discovered per platform

KICAD_MCP_FREEROUTING_JAR

Freerouting jar for autoroute (Phase 6)

unset

KICAD_MCP_ALLOW_SCHEMATIC_WRITE

1 to enable experimental schematic writes

0

KICAD_MCP_CLI_TIMEOUT

seconds for kicad-cli subprocess calls

120

KICAD_MCP_IPC_TIMEOUT

seconds for IPC calls

10

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 tools
add_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

    B3.4/5.0

    Scored across 47 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An 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.
      39
      1
      MIT
    • A
      license
      A
      quality
      A
      maintenance
      MCP servers for KiCad schematic, PCB, symbol, footprint, and project automation, enabling AI-assisted electronic design via tools for read/write, analysis, and exports.
      109
      426 PyPI
      16
      GPL 3.0
    • A
      license
      B
      quality
      B
      maintenance
      An MCP server that enables AI assistants to analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code for KiCad projects.
      39
      184
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      An MCP server providing full control over KiCad 10, enabling PCB editing, schematic editing, design data, and production output via natural language.
      102
      1
      MIT