kicad mcp
A Model Context Protocol server that enables interaction with KiCad electronic design projects, allowing users to list projects, analyze PCB designs, run design rule checks, and visualize PCB layouts through natural language.
A Model Context Protocol server that enables interaction with KiCad electronic design projects, allowing users to list projects, analyze PCB designs, run design rule checks, and visualize PCB layouts through natural language.
⚠️ WARNING: This project was quickly hacked together and is largely untested. Expect things to break. Use at your own risk. I plan on improving it over time, but if you find bugs, please open an issue or submit a pull request to fix them (see Contributing section below).
⚠️ WARNING: This project is optimized for Mac. While there exists some basic support for Windows and Linux, not all functionality is guaranteed to work.
This guide will help you set up a Model Context Protocol (MCP) server for KiCad. While the examples in this guide often reference Claude Desktop, the server is compatible with any MCP-compliant client. You can use it with Claude Desktop, your own custom MCP clients, or any other application that implements the Model Context Protocol.
First, let's install dependencies and set up our environment:
# Clone the repository
git clone https://github.com/lamaalrajih/kicad-mcp.git .
# Create a virtual environment and activate it
python3 -m venv venv
source venv/bin/activate # On Windows: venvScriptsactivate
# Install the MCP SDK and other dependencies
pip install -r requirements.txt
Create a .env
file to customize where the server looks for your KiCad projects:
# Copy the example environment file
cp .env.example .env
# Edit the .env file
vim .env
In the .env
file, add your custom project directories:
# Add paths to your KiCad projects (comma-separated)
KICAD_SEARCH_PATHS=~/pcb,~/Electronics,~/Projects/KiCad
Once the environment is set up, you can run the server:
# Run in development mode
python -m mcp.dev main.py
# Or run directly
python main.py
Now, let's configure Claude Desktop to use our MCP server:
# Create the directory if it does not exist
mkdir -p ~/Library/Application Support/Claude
# Edit the configuration file
vim ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"kicad": {
"command": "/ABSOLUTE/PATH/TO/YOUR/PROJECT/kicad-mcp/venv/bin/python",
"args": [
"/ABSOLUTE/PATH/TO/YOUR/PROJECT/kicad-mcp/main.py"
]
}
}
}
Replace /ABSOLUTE/PATH/TO/YOUR/PROJECT/kicad-mcp
with the actual path to your project directory.
Close and reopen your MCP client to load the new configuration.
The Model Context Protocol (MCP) defines three primary ways to provide capabilities:
Resources are read-only data sources that LLMs can reference:
- Similar to GET endpoints in REST APIs
- Provide data without performing significant computation
- Used when the LLM needs to read information
- Typically accessed programmatically by the client application
- Example: kicad://projects
returns a list of all KiCad projects
Tools are functions that perform actions or computations:
- Similar to POST/PUT endpoints in REST APIs
- Can have side effects (like opening applications or generating files)
- Used when the LLM needs to perform actions in the world
- Typically invoked directly by the LLM (with user approval)
- Example: open_project()
launches KiCad with a specific project
Prompts are reusable templates for common interactions:
- Pre-defined conversation starters or instructions
- Help users articulate common questions or tasks
- Invoked by user choice (typically from a menu)
- Example: The debug_pcb_issues
prompt helps users troubleshoot PCB problems
The KiCad MCP Server provides several key features, each with detailed documentation:
Example: "Show me all my recent KiCad projects" → Lists all projects sorted by modification date
PCB Design Analysis: Get insights about your PCB designs and schematics
Example: "Analyze the component density of my temperature sensor board" → Provides component spacing analysis
Netlist Extraction: Extract and analyze component connections from schematics
Example: "What components are connected to the MCU in my Arduino shield?" → Shows all connections to the microcontroller
BOM Management: Analyze and export Bills of Materials
Example: "Generate a BOM for my smart watch project" → Creates a detailed bill of materials
Design Rule Checking: Run DRC checks and track your progress over time
KiCad 9.0+ Compatible: Uses the new KiCad CLI or IPC API automatically
PCB Visualization: Generate visual representations of your PCB layouts
Example: "Show me a thumbnail of my audio amplifier PCB" → Displays a visual render of the board
Circuit Pattern Recognition: Automatically identify common circuit patterns in your schematics
For more examples and details on each feature, see the dedicated guides in the documentation.
While our documentation often shows examples like:
Show me the DRC report for /Users/username/Documents/KiCad/my_project/my_project.kicad_pro
You do not need to type the full path to your files! The LLM can understand more natural language requests.
For example, instead of the formal command above, you can simply ask:
Can you check if there are any design rule violations in my Arduino shield project?
Or:
I'm working on the temperature sensor circuit. Can you identify what patterns it uses?
The LLM will understand your intent and request the relevant information from the KiCad MCP Server. If it needs clarification about which project you're referring to, it will ask.
Detailed documentation for each feature is available in the docs/
directory:
The KiCad MCP Server can be configured using environment variables or a .env
file:
Environment Variable | Description | Example |
---|---|---|
KICAD_SEARCH_PATHS |
Comma-separated list of directories to search for KiCad projects | ~/pcb,~/Electronics,~/Projects |
KICAD_USER_DIR |
Override the default KiCad user directory | ~/Documents/KiCadProjects |
KICAD_APP_PATH |
Override the default KiCad application path | /Applications/KiCad7/KiCad.app |
See Configuration Guide for more details.
The KiCad MCP Server is organized into a modular structure:
kicad-mcp/
├── README.md # Project documentation
├── main.py # Entry point that runs the server
├── requirements.txt # Python dependencies
├── .env.example # Example environment configuration
├── kicad_mcp/ # Main package directory
│ ├── __init__.py
│ ├── server.py # MCP server setup
│ ├── config.py # Configuration constants and settings
│ ├── context.py # Lifespan management and shared context
│ ├── resources/ # Resource handlers
│ ├── tools/ # Tool handlers
│ ├── prompts/ # Prompt templates
│ └── utils/ # Utility functions
├── docs/ # Documentation
└── tests/ # Unit tests
To add new features to the KiCad MCP Server, follow these steps:
See Development Guide for more details.
If you encounter issues:
mcp
packageCheck if your KiCad installation is detected
Server Errors:
Check Claude logs at:
~/Library/Logs/Claude/mcp-server-kicad.log
(server-specific logs)~/Library/Logs/Claude/mcp.log
(general MCP logs)Working Directory Issues:
See Troubleshooting Guide for more details.
Want to contribute to the KiCad MCP Server? Here's how you can help improve this project:
Key areas for contribution: - Adding support for more component patterns in the Circuit Pattern Recognition system - Improving documentation and examples - Adding new features or enhancing existing ones - Fixing bugs and improving error handling
See CONTRIBUTING.md for detailed contribution guidelines.
Interested in contributing? Here are some ideas for future development:
This project is open source under the MIT license.