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_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
Tools (39)
kicad.get_session_stateGet current session state and capabilitieskicad.create_projectCreate a new KiCad projectkicad.open_projectOpen an existing projectkicad.list_projectsFind projects in a directorykicad.save_projectSave all project fileskicad.helpWorkflow and tool documentationkicad.add_componentAdd a symbol to the schematickicad.add_power_symbolAdd VCC, GND, +3V3, etc.kicad.set_valueSet component valuekicad.set_referenceChange reference designatorkicad.set_component_fieldSet custom fieldskicad.delete_componentRemove a componentkicad.move_componentReposition a componentkicad.add_wireConnect two points with a wirekicad.add_net_labelAdd a named net labelkicad.add_global_labelAdd a cross-sheet labelkicad.add_no_connectMark unused pinskicad.annotate_schematicAuto-assign reference designatorskicad.list_componentsList all components with detailskicad.create_board_outlineDraw the PCB boundarykicad.set_design_rulesSet min trace/clearance/drillkicad.create_net_classCreate net class with specific ruleskicad.route_traceRoute a copper tracekicad.place_viaPlace a viakicad.fill_zonesFill copper zoneskicad.add_textAdd silkscreen textkicad.add_lineAdd lines/shapes to layerskicad.design_summaryBoard statistics and sanity checkkicad.list_footprintsList all footprints on the PCBkicad.export_netlistExport netlist from schematickicad.export_gerbersExport Gerber manufacturing fileskicad.export_bomExport Bill of Materialskicad.export_pdfExport schematic/PCB to PDFkicad.export_svgExport schematic/PCB to SVGkicad.run_drcDesign Rules Checkkicad.run_ercElectrical Rules Checkkicad.search_symbolsSearch component symbolskicad.search_footprintsSearch PCB footprintskicad.get_symbol_infoGet symbol pins and propertiesConfiguration
{"mcpServers": {"eda-mcp": {"type": "stdio", "command": "uv", "args": ["--directory", "/path/to/eda-mcp", "run", "eda-mcp"]}}}