EDA MCP Server

Local setup required. This server has to be cloned and prepared on your machine before you register it in Claude Code.
1

Set the server up locally

Run this once to clone and prepare the server before adding it to Claude Code.

Run in terminal
git clone https://github.com/SaeronLab/eda-mcp.git
cd eda-mcp
uv sync
2

Register it in Claude Code

After the local setup is done, run this command to point Claude Code at the built server.

Run in terminal
claude mcp add eda-mcp -- node "<FULL_PATH_TO_EDA_MCP>/dist/index.js"

Replace <FULL_PATH_TO_EDA_MCP>/dist/index.js with the actual folder you prepared in step 1.

README.md

MCP server for Electronic Design Automation tools supporting KiCad 9.x

eda-mcp

MCP server for EDA (Electronic Design Automation) tools. Currently supports KiCad 9.x with 39 tools covering the full PCB design workflow.

Requirements

Installation

git clone https://github.com/SaeronLab/eda-mcp.git
cd eda-mcp
uv sync

Claude Code Configuration

Add to your .mcp.json:

{
  "mcpServers": {
    "eda-mcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["--directory", "/path/to/eda-mcp", "run", "eda-mcp"]
    }
  }
}

Tools

Core (6)

Tool Description
kicad.get_session_state Current session state and capabilities
kicad.create_project Create a new KiCad project
kicad.open_project Open an existing project
kicad.list_projects Find projects in a directory
kicad.save_project Save all project files
kicad.help Workflow and tool documentation

Schematic (13)

Tool Description
kicad.add_component Add a symbol to the schematic
kicad.add_power_symbol Add VCC, GND, +3V3, etc.
kicad.set_value Set component value (10k, 100nF)
kicad.set_reference Change reference designator
kicad.set_component_field Set custom fields (MPN, supplier)
kicad.delete_component Remove a component
kicad.move_component Reposition a component
kicad.add_wire Connect two points with a wire
kicad.add_net_label Add a named net label
kicad.add_global_label Add a cross-sheet label
kicad.add_no_connect Mark unused pins
kicad.annotate_schematic Auto-assign reference designators
kicad.list_components List all components with details

PCB (10)

Tool Description
kicad.create_board_outline Draw the PCB boundary
kicad.set_design_rules Set min trace/clearance/drill
kicad.create_net_class Create net class with specific rules
kicad.route_trace Route a copper trace
kicad.place_via Place a via
kicad.fill_zones Fill copper zones
kicad.add_text Add silkscreen text
kicad.add_line Add lines/shapes to layers
kicad.design_summary Board statistics and sanity check
kicad.list_footprints List all footprints on the PCB

Export (7)

Tool Description
kicad.export_netlist Export netlist from schematic
kicad.export_gerbers Export Gerber manufacturing files (DRC-gated)
kicad.export_bom Export Bill of Materials
kicad.export_pdf Export schematic/PCB to PDF
kicad.export_svg Export schematic/PCB to SVG
kicad.run_drc Design Rules Check
kicad.run_erc Electrical Rules Check

Library (3)

Tool Description
kicad.search_symbols Search component symbols
kicad.search_footprints Search PCB footprints
kicad.get_symbol_info Get symbol pins and properties

Architecture

src/eda_mcp/
├── server.py              # FastMCP server, tool registration
├── session.py             # Session state management
├── common/
│   ├── types.py           # ToolResponse, Position
│   └── errors.py          # Error hierarchy
└── plugins/
    └── kicad/
        ├── discovery.py   # KiCad path detection
        ├── guardrails.py  # Pre-export safety checks
        ├── worker.py      # Async pcbnew worker manager
        ├── worker_process.py  # Persistent pcbnew subprocess
        ├── sexp/
        │   ├── parser.py  # S-expression parser
        │   └── writer.py  # S-expression writer
        └── tools/
            ├── schematic.py  # Schematic manipulation via sexp
            ├── cli.py        # kicad-cli exports (Gerber, PDF, DRC)
            └── library.py    # Symbol/footprint search

Three integration paths:

  • S-expression parser/writer — Direct manipulation of .kicad_sch files with round-trip fidelity
  • Persistent pcbnew worker — JSON-RPC subprocess using KiCad's Python API for PCB operations
  • kicad-cli — Subprocess calls for exports, DRC, and ERC

Development

uv run pytest tests/ -v          # Run all tests
uv run ruff check src/ tests/    # Lint
uv run pyright src/              # Type check

License

MIT

Tools (39)

kicad.get_session_stateGet current session state and capabilities
kicad.create_projectCreate a new KiCad project
kicad.open_projectOpen an existing project
kicad.list_projectsFind projects in a directory
kicad.save_projectSave all project files
kicad.helpWorkflow and tool documentation
kicad.add_componentAdd a symbol to the schematic
kicad.add_power_symbolAdd VCC, GND, +3V3, etc.
kicad.set_valueSet component value
kicad.set_referenceChange reference designator
kicad.set_component_fieldSet custom fields
kicad.delete_componentRemove a component
kicad.move_componentReposition a component
kicad.add_wireConnect two points with a wire
kicad.add_net_labelAdd a named net label
kicad.add_global_labelAdd a cross-sheet label
kicad.add_no_connectMark unused pins
kicad.annotate_schematicAuto-assign reference designators
kicad.list_componentsList all components with details
kicad.create_board_outlineDraw the PCB boundary
kicad.set_design_rulesSet min trace/clearance/drill
kicad.create_net_classCreate net class with specific rules
kicad.route_traceRoute a copper trace
kicad.place_viaPlace a via
kicad.fill_zonesFill copper zones
kicad.add_textAdd silkscreen text
kicad.add_lineAdd lines/shapes to layers
kicad.design_summaryBoard statistics and sanity check
kicad.list_footprintsList all footprints on the PCB
kicad.export_netlistExport netlist from schematic
kicad.export_gerbersExport Gerber manufacturing files
kicad.export_bomExport Bill of Materials
kicad.export_pdfExport schematic/PCB to PDF
kicad.export_svgExport schematic/PCB to SVG
kicad.run_drcDesign Rules Check
kicad.run_ercElectrical Rules Check
kicad.search_symbolsSearch component symbols
kicad.search_footprintsSearch PCB footprints
kicad.get_symbol_infoGet symbol pins and properties

Configuration

claude_desktop_config.json
{"mcpServers": {"eda-mcp": {"type": "stdio", "command": "uv", "args": ["--directory", "/path/to/eda-mcp", "run", "eda-mcp"]}}}

Try it

Create a new KiCad project in my current directory.
Add a 10k resistor component to the schematic and set its reference designator to R1.
Run the electrical rules check (ERC) on my current schematic.
Export the current PCB design to Gerber files for manufacturing.
Search for a footprint for a USB-C connector.

Frequently Asked Questions

What are the key features of EDA MCP?

Full PCB design workflow management for KiCad 9.x. Direct manipulation of .kicad_sch files via S-expression parsing. Persistent pcbnew worker for automated PCB operations. Automated export capabilities for Gerbers, BOM, PDF, and SVG. Integrated design rule (DRC) and electrical rule (ERC) checking.

What can I use EDA MCP for?

Automating repetitive schematic entry tasks using natural language. Programmatically generating manufacturing files from PCB designs. Performing automated sanity checks on board designs before fabrication. Searching and integrating library components into designs via chat.

How do I install EDA MCP?

Install EDA MCP by running: git clone https://github.com/SaeronLab/eda-mcp.git && cd eda-mcp && uv sync

What MCP clients work with EDA MCP?

EDA MCP works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep EDA MCP docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare