update readme, add gitignore, update paths for drc history to include windows
This commit is contained in:
parent
50e94d245b
commit
fc7bfbe64d
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Virtual Environment
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
ENV/
|
||||||
|
|
||||||
|
# Python cache files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
*.egg-info/
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# IDE specific files
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# MCP specific
|
||||||
|
~/.kicad_mcp/drc_history/
|
248
README.md
248
README.md
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
> ⚠️ **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 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).
|
||||||
|
|
||||||
This guide will help you set up a Model Context Protocol (MCP) server for KiCad on macOS, allowing you to interact with KiCad projects through Claude Desktop or other MCP-compatible clients.
|
> **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.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
@ -14,7 +16,13 @@ This guide will help you set up a Model Context Protocol (MCP) server for KiCad
|
|||||||
- [3. Configure Claude Desktop](#3-configure-claude-desktop)
|
- [3. Configure Claude Desktop](#3-configure-claude-desktop)
|
||||||
- [4. Restart Claude Desktop](#4-restart-claude-desktop)
|
- [4. Restart Claude Desktop](#4-restart-claude-desktop)
|
||||||
- [Understanding MCP Components](#understanding-mcp-components)
|
- [Understanding MCP Components](#understanding-mcp-components)
|
||||||
- [Available Features](#available-features)
|
- [Features and Usage Guide](#features-and-usage-guide)
|
||||||
|
- [Project Management](#project-management)
|
||||||
|
- [PCB Design Analysis](#pcb-design-analysis)
|
||||||
|
- [Design Rule Checking (DRC)](#design-rule-checking-drc)
|
||||||
|
- [PCB Visualization](#pcb-visualization)
|
||||||
|
- [Templates and Prompts](#templates-and-prompts)
|
||||||
|
- [Usage Examples](#usage-examples)
|
||||||
- [Development Guide](#development-guide)
|
- [Development Guide](#development-guide)
|
||||||
- [Troubleshooting](#troubleshooting)
|
- [Troubleshooting](#troubleshooting)
|
||||||
- [Contributing](#contributing)
|
- [Contributing](#contributing)
|
||||||
@ -23,7 +31,7 @@ This guide will help you set up a Model Context Protocol (MCP) server for KiCad
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- macOS with KiCad installed
|
- macOS, Windows, or Linux with KiCad installed
|
||||||
- Python 3.10 or higher
|
- Python 3.10 or higher
|
||||||
- Claude Desktop (or another MCP client)
|
- Claude Desktop (or another MCP client)
|
||||||
- Basic familiarity with the terminal
|
- Basic familiarity with the terminal
|
||||||
@ -41,10 +49,14 @@ kicad-mcp/
|
|||||||
├── kicad_mcp/ # Main package directory
|
├── kicad_mcp/ # Main package directory
|
||||||
│ ├── __init__.py # Package initialization
|
│ ├── __init__.py # Package initialization
|
||||||
│ ├── server.py # MCP server setup
|
│ ├── server.py # MCP server setup
|
||||||
|
│ ├── context.py # Lifespan management and shared context
|
||||||
│ ├── resources/ # Resource handlers
|
│ ├── resources/ # Resource handlers
|
||||||
│ ├── tools/ # Tool handlers
|
│ ├── tools/ # Tool handlers
|
||||||
│ ├── prompts/ # Prompt templates
|
│ ├── prompts/ # Prompt templates
|
||||||
│ └── utils/ # Utility functions
|
│ └── utils/ # Utility functions
|
||||||
|
├── docs/ # Documentation
|
||||||
|
│ ├── drc_guide.md # Design Rule Check guide
|
||||||
|
│ └── thumbnail_guide.md # PCB Thumbnail feature guide
|
||||||
└── tests/ # Unit tests
|
└── tests/ # Unit tests
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -52,16 +64,19 @@ kicad-mcp/
|
|||||||
|
|
||||||
### 1. Set Up Your Python Environment
|
### 1. Set Up Your Python Environment
|
||||||
|
|
||||||
First, let's install `pip` and set up our environment:
|
First, let's install dependencies and set up our environment:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create a new directory for our project
|
# Create a new directory for our project
|
||||||
mkdir -p ~/Projects/kicad-mcp
|
mkdir -p ~/Projects/kicad-mcp
|
||||||
cd ~/Projects/kicad-mcp
|
cd ~/Projects/kicad-mcp
|
||||||
|
|
||||||
|
# Clone the repository
|
||||||
|
git clone https://github.com/lamaalrajih/kicad-mcp.git .
|
||||||
|
|
||||||
# Create a virtual environment and activate it
|
# Create a virtual environment and activate it
|
||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
source venv/bin/activate
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||||
|
|
||||||
# Install the MCP SDK and other dependencies
|
# Install the MCP SDK and other dependencies
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
@ -79,7 +94,9 @@ python -m mcp.dev main.py
|
|||||||
python main.py
|
python main.py
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Configure Claude Desktop
|
### 3. Configure an MCP Client
|
||||||
|
|
||||||
|
The server can be used with any MCP-compatible client. Here's how to set it up with Claude Desktop as an example:
|
||||||
|
|
||||||
Now, let's configure Claude Desktop to use our MCP server:
|
Now, let's configure Claude Desktop to use our MCP server:
|
||||||
|
|
||||||
@ -110,11 +127,28 @@ vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
|
|||||||
|
|
||||||
Replace `/ABSOLUTE/PATH/TO/YOUR/PROJECT/kicad-mcp` with the actual path to your project directory (e.g., `/Users/yourusername/Projects/kicad-mcp`).
|
Replace `/ABSOLUTE/PATH/TO/YOUR/PROJECT/kicad-mcp` with the actual path to your project directory (e.g., `/Users/yourusername/Projects/kicad-mcp`).
|
||||||
|
|
||||||
3. Save the file and exit the editor.
|
#### Windows Configuration
|
||||||
|
|
||||||
### 4. Restart Claude Desktop
|
On Windows, the configuration would look like:
|
||||||
|
|
||||||
Close and reopen Claude Desktop to load the new configuration.
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"kicad": {
|
||||||
|
"command": "C:\\Path\\To\\Your\\Project\\kicad-mcp\\venv\\Scripts\\python.exe",
|
||||||
|
"args": [
|
||||||
|
"C:\\Path\\To\\Your\\Project\\kicad-mcp\\main.py"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The configuration should be stored in `%APPDATA%\Claude\claude_desktop_config.json`.
|
||||||
|
|
||||||
|
### 4. Restart Your MCP Client
|
||||||
|
|
||||||
|
Close and reopen your MCP client (e.g., Claude Desktop) to load the new configuration. The KiCad server should appear in the tools dropdown menu or equivalent interface in your client.
|
||||||
|
|
||||||
## Understanding MCP Components
|
## Understanding MCP Components
|
||||||
|
|
||||||
@ -142,28 +176,161 @@ The Model Context Protocol (MCP) defines three primary ways to provide capabilit
|
|||||||
- Invoked by user choice (typically from a menu)
|
- Invoked by user choice (typically from a menu)
|
||||||
- Example: The `debug_pcb_issues` prompt helps users troubleshoot PCB problems
|
- Example: The `debug_pcb_issues` prompt helps users troubleshoot PCB problems
|
||||||
|
|
||||||
## Available Features
|
## Features and Usage Guide
|
||||||
|
|
||||||
The KiCad MCP Server provides several capabilities:
|
Here's how to use each of the key features of the KiCad MCP Server through any MCP-compatible client (examples show prompts for Claude Desktop, but the concepts apply to any MCP client):
|
||||||
|
|
||||||
### Resources
|
### Project Management
|
||||||
- `kicad://projects` - List all KiCad projects
|
|
||||||
- `kicad://project/{path}` - Get details about a specific project
|
|
||||||
- `kicad://schematic/{path}` - Extract information from a schematic file
|
|
||||||
- `kicad://drc/{path}` - Get a detailed Design Rule Check report for a PCB
|
|
||||||
- `kicad://drc/history/{path}` - Get DRC history report with trend analysis
|
|
||||||
|
|
||||||
### Tools
|
#### Listing Projects
|
||||||
- Project management tools (find projects, get structure, open in KiCad)
|
|
||||||
- Analysis tools (validate projects, generate thumbnails)
|
|
||||||
- Export tools (extract bill of materials)
|
|
||||||
- Design Rule Check tools (run DRC checks, get detailed violation reports, track DRC history and improvements over time)
|
|
||||||
- PCB Visualization - Generate thumbnails of PCB layouts for easy project identification ([see guide](docs/thumbnail_guide.md))
|
|
||||||
|
|
||||||
### Prompts
|
To see all KiCad projects available on your system:
|
||||||
- Create new component guide
|
|
||||||
- Debug PCB issues guide
|
```
|
||||||
- PCB manufacturing checklist
|
Could you list all my KiCad projects?
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will use the `kicad://projects` resource to display a formatted list of your KiCad projects, including their paths and last modified dates.
|
||||||
|
|
||||||
|
#### Project Details
|
||||||
|
|
||||||
|
To get details about a specific project:
|
||||||
|
|
||||||
|
```
|
||||||
|
Show me details about my KiCad project at /path/to/your/project.kicad_pro
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will display project information including available files, settings, and metadata.
|
||||||
|
|
||||||
|
#### Opening Projects
|
||||||
|
|
||||||
|
To open a KiCad project:
|
||||||
|
|
||||||
|
```
|
||||||
|
Can you open my KiCad project at /path/to/your/project.kicad_pro?
|
||||||
|
```
|
||||||
|
|
||||||
|
This will launch KiCad with the specified project open. Note that this requires KiCad to be properly installed.
|
||||||
|
|
||||||
|
### PCB Design Analysis
|
||||||
|
|
||||||
|
#### Validating Projects
|
||||||
|
|
||||||
|
To validate a KiCad project for issues:
|
||||||
|
|
||||||
|
```
|
||||||
|
Validate my KiCad project at /path/to/your/project.kicad_pro
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will check for missing files, incorrect formats, and other common issues.
|
||||||
|
|
||||||
|
#### Schematic Information
|
||||||
|
|
||||||
|
To extract information from a schematic:
|
||||||
|
|
||||||
|
```
|
||||||
|
What components are in my schematic at /path/to/your/project.kicad_sch?
|
||||||
|
```
|
||||||
|
|
||||||
|
This will display component information extracted from the schematic file.
|
||||||
|
|
||||||
|
### Design Rule Checking (DRC)
|
||||||
|
|
||||||
|
#### Running DRC Checks
|
||||||
|
|
||||||
|
To check your PCB layout for design rule violations:
|
||||||
|
|
||||||
|
```
|
||||||
|
Run a DRC check on my KiCad project at /path/to/your/project.kicad_pro
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will analyze your PCB layout for violations of design rules and provide a detailed report.
|
||||||
|
|
||||||
|
#### Viewing DRC History
|
||||||
|
|
||||||
|
To see how DRC violations have changed over time:
|
||||||
|
|
||||||
|
```
|
||||||
|
Show me the DRC history for my KiCad project at /path/to/your/project.kicad_pro
|
||||||
|
```
|
||||||
|
|
||||||
|
This displays a trend of violations over time, helping you track your progress as you fix issues.
|
||||||
|
|
||||||
|
DRC history is persistently stored on your filesystem at `~/.kicad_mcp/drc_history/` and is preserved across sessions. Each project's history is saved in a JSON file with a format like `projectname_[hash]_drc_history.json`. The system keeps track of up to 10 most recent DRC checks per project, allowing you to monitor your progress in fixing design rule violations over time.
|
||||||
|
|
||||||
|
#### Getting Help with DRC Violations
|
||||||
|
|
||||||
|
For help with fixing DRC issues, use the Fix DRC Violations prompt:
|
||||||
|
|
||||||
|
```
|
||||||
|
I need help fixing DRC violations in my KiCad project at /path/to/your/project.kicad_pro
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will guide you through understanding and resolving each type of violation.
|
||||||
|
|
||||||
|
### PCB Visualization
|
||||||
|
|
||||||
|
#### Generating PCB Thumbnails
|
||||||
|
|
||||||
|
To visualize your PCB layout:
|
||||||
|
|
||||||
|
```
|
||||||
|
Generate a thumbnail for my KiCad PCB at /path/to/your/project.kicad_pro
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will create a visual representation of your PCB board, showing layers, traces, and components.
|
||||||
|
|
||||||
|
### Templates and Prompts
|
||||||
|
|
||||||
|
#### Using Prompt Templates
|
||||||
|
|
||||||
|
Claude Desktop provides several specialized prompts for common KiCad workflows. Access these by clicking the "Prompt Templates" button in Claude Desktop, then selecting one of the KiCad templates:
|
||||||
|
|
||||||
|
- **Create New Component** - Guides you through creating a new KiCad component
|
||||||
|
- **Debug PCB Issues** - Helps troubleshoot common PCB design problems
|
||||||
|
- **PCB Manufacturing Checklist** - Prepares your design for manufacturing
|
||||||
|
- **Fix DRC Violations** - Assists with resolving design rule violations
|
||||||
|
- **Custom Design Rules** - Helps create specialized design rules for your project
|
||||||
|
|
||||||
|
## Usage Examples
|
||||||
|
|
||||||
|
Here are some complete examples of how to interact with the KiCad MCP Server through Claude Desktop:
|
||||||
|
|
||||||
|
### Example 1: Basic Project Workflow
|
||||||
|
|
||||||
|
```
|
||||||
|
Claude, I've just started a new KiCad project but I need some guidance. Can you list my existing KiCad projects first so I can see what I've already worked on?
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will list your KiCad projects. Then you might ask:
|
||||||
|
|
||||||
|
```
|
||||||
|
Great, can you show me details about the project at /Users/me/Documents/KiCad/amplifier/amplifier.kicad_pro?
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will display information about that specific project. Then you could continue:
|
||||||
|
|
||||||
|
```
|
||||||
|
I need to check if there are any design rule violations. Can you run a DRC check on that project?
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: Getting PCB Design Help
|
||||||
|
|
||||||
|
```
|
||||||
|
I'm having trouble with my PCB design in KiCad. I keep getting clearance errors between traces. Can you help me understand how to fix this?
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will explain clearance errors and suggest solutions. You could continue:
|
||||||
|
|
||||||
|
```
|
||||||
|
Can you show me a thumbnail of my PCB layout at /Users/me/Documents/KiCad/amplifier/amplifier.kicad_pro so I can see the problematic areas?
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will generate and display a thumbnail of your PCB. Then you might ask:
|
||||||
|
|
||||||
|
```
|
||||||
|
Let's run a full DRC check on this project to identify all the issues I need to fix.
|
||||||
|
```
|
||||||
|
|
||||||
## Development Guide
|
## Development Guide
|
||||||
|
|
||||||
@ -204,16 +371,28 @@ pytest
|
|||||||
|
|
||||||
If you encounter issues:
|
If you encounter issues:
|
||||||
|
|
||||||
1. **Server Not Appearing in Claude Desktop:**
|
1. **Server Not Appearing in MCP Client:**
|
||||||
- Check your `claude_desktop_config.json` file for errors
|
- Check your client's configuration file for errors (e.g., `claude_desktop_config.json` for Claude Desktop)
|
||||||
- Make sure the path to your project and Python interpreter is correct
|
- Make sure the path to your project and Python interpreter is correct
|
||||||
- Ensure Python can access the `mcp` package
|
- Ensure Python can access the `mcp` package
|
||||||
|
- Check if your KiCad installation is detected
|
||||||
|
|
||||||
2. **Server Errors:**
|
2. **Server Errors:**
|
||||||
- Check the terminal output when running the server in development mode
|
- Check the terminal output when running the server in development mode
|
||||||
|
- Look for errors in the logs at `~/.kicad_mcp/logs` or `logs/` directory
|
||||||
- Make sure all required Python packages are installed
|
- Make sure all required Python packages are installed
|
||||||
- Verify that your KiCad installation is in the standard location
|
- Verify that your KiCad installation is in the standard location
|
||||||
|
|
||||||
|
3. **KiCad Python Modules Not Found:**
|
||||||
|
- This is a common issue. The server will still work but with limited functionality
|
||||||
|
- Ensure KiCad is installed properly
|
||||||
|
- Check if the right paths are set in `config.py`
|
||||||
|
|
||||||
|
4. **DRC History Not Saving:**
|
||||||
|
- Check if the `~/.kicad_mcp/drc_history/` directory exists and is writable
|
||||||
|
- Verify that the project path used is consistent between runs
|
||||||
|
- Check for errors in the logs related to DRC history saving
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Want to contribute to the KiCad MCP Server? Here's how you can help improve this project:
|
Want to contribute to the KiCad MCP Server? Here's how you can help improve this project:
|
||||||
@ -223,6 +402,12 @@ Want to contribute to the KiCad MCP Server? Here's how you can help improve this
|
|||||||
3. Add your changes
|
3. Add your changes
|
||||||
4. Submit a pull request
|
4. Submit a pull request
|
||||||
|
|
||||||
|
Key areas that need work:
|
||||||
|
- Improving cross-platform compatibility
|
||||||
|
- Adding more comprehensive tests
|
||||||
|
- Enhancing error handling
|
||||||
|
- Adding support for more KiCad features
|
||||||
|
|
||||||
## Future Development Ideas
|
## Future Development Ideas
|
||||||
|
|
||||||
Interested in contributing? Here are some ideas for future development:
|
Interested in contributing? Here are some ideas for future development:
|
||||||
@ -232,7 +417,10 @@ Interested in contributing? Here are some ideas for future development:
|
|||||||
3. Add support for generating manufacturing files
|
3. Add support for generating manufacturing files
|
||||||
4. Implement component search tools
|
4. Implement component search tools
|
||||||
5. Enhance BOM capabilities with supplier integration
|
5. Enhance BOM capabilities with supplier integration
|
||||||
6. Add tests!
|
6. Add support for interactive design checks
|
||||||
|
7. Implement a simple web UI for configuration and monitoring
|
||||||
|
8. Add automated circuit analysis features
|
||||||
|
9. Add tests!
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ This will allow users to compare DRC results over time.
|
|||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import platform
|
||||||
import time
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Dict, List, Any, Optional
|
from typing import Dict, List, Any, Optional
|
||||||
@ -16,9 +17,13 @@ from kicad_mcp.utils.logger import Logger
|
|||||||
logger = Logger()
|
logger = Logger()
|
||||||
|
|
||||||
# Directory for storing DRC history
|
# Directory for storing DRC history
|
||||||
|
if platform.system() == "Windows":
|
||||||
|
# Windows: Use APPDATA or LocalAppData
|
||||||
|
DRC_HISTORY_DIR = os.path.join(os.environ.get("APPDATA", os.path.expanduser("~")), "kicad_mcp", "drc_history")
|
||||||
|
else:
|
||||||
|
# macOS/Linux: Use ~/.kicad_mcp/drc_history
|
||||||
DRC_HISTORY_DIR = os.path.expanduser("~/.kicad_mcp/drc_history")
|
DRC_HISTORY_DIR = os.path.expanduser("~/.kicad_mcp/drc_history")
|
||||||
|
|
||||||
|
|
||||||
def ensure_history_dir() -> None:
|
def ensure_history_dir() -> None:
|
||||||
"""Ensure the DRC history directory exists."""
|
"""Ensure the DRC history directory exists."""
|
||||||
os.makedirs(DRC_HISTORY_DIR, exist_ok=True)
|
os.makedirs(DRC_HISTORY_DIR, exist_ok=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user