mcp-kicad
by daedalus
README.md
mcp-kicad — MCP server exposing KiCad PCB Editor functionality via IPC API.
[](https://pypi.org/project/mcp-kicad/)
[](https://pypi.org/project/mcp-kicad/)
[](https://github.com/astral-sh/ruff)
## Install
```bash
pip install mcp-kicad
```
## Requirements
- KiCad 9.0 or higher with the IPC API server enabled
- Go to **Preferences > Plugins** in KiCad and enable the API server
## Usage
The MCP server communicates with a running KiCad instance via the IPC API. Start KiCad first, then run the server:
```bash
mcp-kicad
```
Or configure it in your MCP client:
```json
{
"mcpServers": {
"mcp-kicad": {
"command": "mcp-kicad",
"env": {}
}
}
}
```
## Tools
The server exposes the following tools:
- **Connection**: `connect_kicad`, `check_connection`
- **Board**: `get_board_info`, `get_layers`, `get_board_design_settings`
- **Footprints**: `list_footprints`, `get_footprint`, `search_footprints`
- **Nets**: `list_nets`, `get_net`, `list_netclasses`
- **Zones**: `list_zones`
- **Tracks/Vias**: `list_tracks`, `list_vias`
- **Pads**: `list_pads`
- **Text**: `list_texts`, `get_text_extents`
- **Project**: `get_project`, `get_version`
## Example
```python
from mcp_kicad import mcp_server
# Connect to running KiCad
result = mcp_server.connect_kicad()
# Get board info
board_info = mcp_server.get_board_info()
print(board_info)
# List all footprints
footprints = mcp_server.list_footprints()
for fp in footprints:
print(f"{fp['reference']}: {fp['value']}")
```
## Development
```bash
git clone https://github.com/daedalus/mcp-kicad.git
cd mcp-kicad
pip install -e ".[test]"
# run tests
pytest
# format
ruff format src/ tests/
# lint
ruff check src/ tests/
# type check
mypy src/
```
mcp-name: io.github.daedalus/mcp-kicadTDQS
B3/5.0
Scored across 41 tools
Disambiguation5/5
Each tool targets a distinct action and object (e.g., create_arc vs create_line, list_nets vs list_tracks). Overlaps are minimal and descriptions clarify differences.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern in snake_case (e.g., create_arc, list_footprints, get_board_info). No mixing of conventions.
Tool Count3/5
41 tools is high, but the domain (PCB design) requires many operations. Some redundancy exists (check_connection vs get_version), and a few tools could be merged (e.g., move_footprint and move_item).
Completeness2/5
The toolset covers creation, listing, and basic manipulation but lacks update/modify operations for existing items, no netclass creation, and no design rule checking. Significant gaps for a full PCB workflow.
Maintenance
ActivityInactive
ResponsivenessNo issues