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