The KiCAD MCP Server provides a standardized interface that enables AI assistants to interact with KiCAD for automated PCB design workflows, offering 122 tools across 16 categories including schematic design, footprint/symbol creation, autorouting via Freerouting integration, and JLCPCB component catalog access with 2.5M+ parts. It exposes real-time project state through dynamic resources and includes specialized capabilities such as FFC/ribbon cable passthrough workflows, datasheet enrichment, and cross-platform support (Linux, Windows, macOS) with experimental real-time KiCAD UI integration via IPC API. This server solves the problem of enabling natural language control and AI-assisted automation of complex PCB design operations while maintaining full MCP protocol compliance and comprehensive error handling.
https://github.com/mixelpixx/KiCAD-MCP-Server/discussions/73
A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with KiCAD for PCB design automation. Built on the MCP 2025-06-18 specification, this server provides comprehensive tool schemas and real-time project state access for intelligent PCB design workflows.
The Model Context Protocol is an open standard from Anthropic that allows AI assistants to securely connect to external tools and data sources. This implementation provides a standardized bridge between AI assistants and KiCAD, enabling natural language control of PCB design operations.
Key Capabilities:
https://github.com/mixelpixx/arduino-ide
A complete workflow for designing passthrough adapter boards (e.g. Raspberry Pi CSI cable adapters) is now supported:
connect_passthrough — wires all pins of one connector to the matching pins of
another in the schematic (J1 pin N → J2 pin N, auto-named nets).sync_schematic_to_board — imports the net assignments into the PCB.route_pad_to_pad — routes each connection with automatic via insertion when
pads are on opposite copper layers.snapshot_project — saves a named checkpoint into <project>/snapshots/.route_pad_to_pad now correctly detects
when a footprint is on B.Cu and inserts the required via. (KiCAD 9 SWIG returned
F.Cu for all SMD pads regardless of layer — fixed.)add_board_outline now correctly applies
cornerRadius when shape="rounded_rectangle".Set KICAD_MCP_DEV=1 in your Claude Desktop MCP environment to automatically save
the MCP session log into the project's logs/ folder on every export_gerber and
snapshot_project call. Useful for debugging and for attaching to GitHub issues.
"env": {
"KICAD_MCP_DEV": "1"
}
Privacy warning: The session log contains your full tool call history (including file paths and design details). Review or delete
logs/before sharing a project directory publicly.
See CHANGELOG for the full list of changes in this release.
The schematic workflow was completely broken in previous versions - this is now fixed AND dramatically enhanced!
What was broken:
create_project only created PCB files, no schematicsadd_schematic_component called non-existent API methodsComplete Implementation (3 Phases):
Phase 1: Component Placement Foundation
create_project now creates both .kicad_pcb and .kicad_sch filesclone() APIPhase 2: Dynamic Symbol Loading (BREAKTHROUGH!)
.kicad_sym library filesPhase 3: Intelligent Wiring System (NEW in v2.1.0)
Technical Architecture: The kicad-skip library cannot create symbols or wires from scratch. We implemented a comprehensive solution:
.kicad_sym library files using S-expression parserlib_symbols sectionExample - Complete Circuit Creation:
# Load power symbols dynamically
loader.load_symbol_dynamically(sch_path, "power", "VCC")
# Place components with auto-rotation
ComponentManager.add_component(sch, {
"type": "STM32F103C8Tx",
"library": "MCU_ST_STM32F1",
"reference": "U1",
"x": 100, "y": 100, "rotation": 0
})
# Connect with intelligent routing
ConnectionManager.add_connection(sch_path, "U1", "1", "R1", "2", routing="orthogonal_h")
# Connect to power nets
ConnectionManager.connect_to_net(sch_path, "U1", "VDD", "VCC")
# Analyze connectivity
connections = ConnectionManager.get_net_connections(sch, "VCC", sch_path)
# Returns: [{"component": "U1", "pin": "VDD"}, {"component": "R1", "pin": "1"}]
Test Results:
See Schematic Tools Reference for the complete schematic tool documentation.
We are currently implementing and testing the KiCAD 9.0 IPC API for real-time UI synchronization:
Note: IPC features are under active development and testing. Enable IPC in KiCAD via Preferences > Plugins > Enable IPC API Server.
For OpenCode on Windows, the backend can be configured as auto, ipc, or
swig during setup. See OpenCode (Windows) for the
configuration command and backend options.
We've implemented an intelligent tool router to keep AI context efficient while maintaining full functionality:
list_tool_categories - Browse all available categoriesget_category_tools - View tools in a specific categorysearch_tools - Find tools by keywordexecute_tool - Run any tool with parametersWhy this matters: By organizing tools into discoverable categories, Claude can intelligently find and use the right tool for your task without loading all 122 tool schemas into every conversation. This reduces context consumption while maintaining full access to all functionality.
Usage is seamless: Just ask naturally - "export gerber files" or "add mounting holes" - and Claude will discover and execute the appropriate tools automatically.
Complete integration with JLCPCB's parts catalog, providing two complementary approaches for component selection:
Dual-Mode Architecture:
Key Features:
Why this matters: JLCPCB offers PCB assembly services where Basic parts have no assembly fee, while Extended parts charge $3 per unique component. This integration helps you find the cheapest components with the best availability, potentially saving hundreds of dollars on assembly costs for production runs.
See JLCPCB Usage Guide for detailed setup and usage instructions.
Every tool now includes complete JSON Schema definitions with:
Access project state without executing tools:
kicad://project/current/info - Project metadatakicad://project/current/board - Board propertieskicad://project/current/components - Component list (JSON)kicad://project/current/nets - Electrical netskicad://project/current/layers - Layer stack configurationkicad://project/current/design-rules - Current DRC settingskicad://project/current/drc-report - Design rule violationskicad://board/preview.png - Board visualization (PNG)The server provides 122 tools organized into 16 functional categories. With the router pattern, tools are automatically discovered as needed -- just ask Claude what you want to accomplish.
For the complete tool reference with access types (direct/routed/additional), see Tool Inventory.
create_project - Initialize new KiCAD projectsopen_project - Load existing project filessave_project - Save current project stateget_project_info - Retrieve project metadatasnapshot_project - Save named checkpoint snapshotset_board_size - Configure PCB dimensionsadd_board_outline - Create board edge (rectangle, circle, polygon, rounded rectangle)add_layer - Add custom layers to stackset_active_layer - Switch working layerget_layer_list - List all board layersget_board_info - Retrieve board propertiesget_board_2d_view - Generate board preview imageget_board_extents - Get board bounding boxadd_mounting_hole - Place mounting holesadd_board_text - Add text annotationsadd_zone - Add copper zone/pour with clearance settingsimport_svg_logo - Import SVG file as PCB silkscreen polygonsplace_component - Place single component with footprintmove_component - Reposition existing componentrotate_component - Rotate component by angledelete_component - Remove component from boardedit_component - Modify component propertiesfind_component - Search by reference or valueget_component_properties - Query component detailsadd_component_annotation - Add annotation/commentgroup_components - Group multiple componentsreplace_component - Replace with different footprintget_component_pads - Get all pad informationget_component_list - List all placed componentsget_pad_position - Get precise pad positionplace_component_array - Create component grids/patternsalign_components - Align multiple componentsduplicate_component - Copy existing componentadd_net - Create electrical netroute_trace - Route copper traces between XY pointsroute_pad_to_pad - Route between pads with auto-via insertionadd_via - Place vias for layer transitionsdelete_trace - Remove traces (by UUID, position, or net)query_traces - Query/filter tracesget_nets_list - List all nets with statisticsmodify_trace - Change trace width, layer, or netcreate_netclass - Define net class with rulesadd_copper_pour - Create copper zones/poursroute_differential_pair - Route differential signalsrefill_zones - Refill all copper zonescopy_routing_pattern - Replicate routing between component groupsComplete schematic workflow with dynamic symbol loading (~10,000 symbols) and intelligent wiring.
Component Operations:
add_schematic_component - Place symbols from any KiCad librarydelete_schematic_component - Remove componentedit_schematic_component - Edit footprint, value, reference, label positions, and arbitrary custom properties (MPN, Manufacturer, DigiKey_PN, LCSC, Voltage, Tolerance, Dielectric, …) in one batched callset_schematic_component_property - Add or update a single custom property (BOM/sourcing field) on a componentremove_schematic_component_property - Delete a single custom property from a componentget_schematic_component - Inspect every field on a component (built-in + custom) including label positionslist_schematic_components - List all componentsmove_schematic_component - Reposition componentrotate_schematic_component - Rotate componentannotate_schematic - Auto-assign reference designatorsWiring and Connections:
add_wire - Create wire between pointsdelete_schematic_wire - Remove wire segmentadd_schematic_connection - Auto-connect pins with routingadd_schematic_net_label - Add net labels (VCC, GND, signals)delete_schematic_net_label - Remove net labelconnect_to_net - Connect pin to named netconnect_passthrough - Wire all matching pins between connectors (FFC/ribbon)get_schematic_pin_locations - Get pin locations for componentAnalysis and Export:
get_net_connections - Trace net connectivitylist_schematic_nets / list_schematic_wires / list_schematic_labelscreate_schematic - Create new schematic fileget_schematic_view - Rasterized schematic previewexport_schematic_svg / export_schematic_pdfrun_erc - Electrical rule checkgenerate_netlist - Generate netlist from schematicsync_schematic_to_board - Import nets/pads to PCB (F8 equivalent)See Schematic Tools Reference for details and examples.
set_design_rules / get_design_rules - Configure and inspect rulesrun_drc - Execute design rule checkget_drc_violations - Get violation list by severityadd_net_class / assign_net_to_class - Net class managementset_layer_constraints / check_clearance - Layer and clearance rulesexport_gerber - Gerber fabrication filesexport_pdf / export_svg - Documentation and vector graphicsexport_3d - 3D models (STEP, STL, VRML, OBJ)export_bom - Bill of materials (CSV, XML, HTML, JSON)export_netlist - Netlist (KiCad, Spice, Cadstar, OrcadPCB2)export_position_file - Component positions for pick and placeexport_vrml - VRML 3D modellist_libraries / list_symbol_libraries - Browse available librariessearch_footprints / search_symbols - Search across all librarieslist_library_footprints / list_library_symbols - Browse specific libraryget_footprint_info / get_symbol_info - Detailed informationCreate custom components when existing libraries do not have what you need.
create_footprint / create_symbol - Build from scratch with pads/pinsedit_footprint_pad - Modify pad propertiesregister_footprint_library / register_symbol_library - Register in lib-tablelist_footprint_libraries / list_symbols_in_library - Browse custom librariesdelete_symbol - Remove symbol from librarySee Footprint and Symbol Creator Guide for details.
enrich_datasheets - Auto-populate datasheet URLs using LCSC part numbersget_datasheet_url - Get LCSC datasheet URL for a componentdownload_jlcpcb_database - Download 2.5M+ parts catalog (one-time setup)search_jlcpcb_parts - Search with parametric filtersget_jlcpcb_part - Detailed part info with pricingget_jlcpcb_database_stats - Database statisticssuggest_jlcpcb_alternatives - Find cheaper or in-stock alternativesautoroute - Run Freerouting autorouter (DSN export, route, SES import)export_dsn / import_ses - Manual Specctra DSN/SES workflowcheck_freerouting - Verify Java and Freerouting availabilitySee Freerouting Guide for setup and usage.
check_kicad_ui - Check if KiCAD is runninglaunch_kicad_ui - Launch KiCAD applicationKiCAD 9.0 or higher
python3 -c "import pcbnew; print(pcbnew.GetBuildVersion())"
Node.js 18 or Higher
node --version and npm --versionPython 3.9 or Higher
MCP Client Choose one:
# Install KiCAD 9.0 or higher
sudo add-apt-repository --yes ppa:kicad/kicad-9.0-releases
sudo apt-get update
sudo apt-get install -y kicad kicad-libraries
# Install Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Clone and build
git clone https://github.com/mixelpixx/KiCAD-MCP-Server.git
cd KiCAD-MCP-Server
npm install
pip3 install -r requirements.txt
npm run build
# Verify
python3 -c "import pcbnew; print(pcbnew.GetBuildVersion())"
Automated Setup (Recommended):
git clone https://github.com/mixelpixx/KiCAD-MCP-Server.git
cd KiCAD-MCP-Server
.\setup-windows.ps1
The script will:
C:\Program Files\KiCad and per-user installs under
%LOCALAPPDATA%\Programs\KiCadManual Setup: See Windows Installation Guide for detailed instructions.
Important: On macOS, use KiCAD's bundled Python to ensure proper access to the pcbnew module.
# Install KiCAD 9.0 from kicad.org/download/macos
# Install Node.js
brew install node@20
# Clone repository
git clone https://github.com/mixelpixx/KiCAD-MCP-Server.git
cd KiCAD-MCP-Server
# Create virtual environment using KiCAD's bundled Python
/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 -m venv venv --system-site-packages
# Activate virtual environment
source venv/bin/activate
# Install dependencies
npm install
pip install -r requirements.txt
npm run build
Note: The --system-site-packages flag is required to access KiCAD's pcbnew module from the virtual environment.
To simplify configuration with Claude Desktop, this repository provides a macOS setup script:
./setup-macos.sh
In case of error zsh: permission denied: ./setup-macos.sh you can either:
chmod +x setup-macos.sh.bash setup-macos.sh so no chmod change needed.This script does not replace the manual setup above — it assumes dependencies are already installed and the project is built. Instead, it automates:
pcbnew)PYTHONPATH./setup-macos.sh --verify
./setup-macos.sh --dry-run
./setup-macos.sh --apply
After applying, restart Claude Desktop.
None. The script works out-of-the-box using sensible defaults.
--name NAMESpecify the MCP server name in Claude Desktop.
Default:
kicad
Example:
./setup-macos.sh --apply --name kicad-dev
Use this when:
--claude-config PATHSpecify a custom Claude Desktop configuration file.
Default:
~/Library/Application Support/Claude/claude_desktop_config.json
Example:
./setup-macos.sh --dry-run --claude-config ~/tmp/claude_config.json
Use this when:
--yesSkip confirmation prompt when applying changes.
Example:
./setup-macos.sh --apply --yes
kicad or your custom name)Test with prompt in Claude Desktop:
Use the kicad MCP server to run check_kicad_ui.
mcpServers section and leaves all other configuration untouchedEdit configuration file:
~/.config/Claude/claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonConfiguration:
{
"mcpServers": {
"kicad": {
"command": "node",
"args": ["/path/to/KiCAD-MCP-Server/dist/index.js"],
"env": {
"PYTHONPATH": "/path/to/kicad/python",
"LOG_LEVEL": "info"
}
}
}
}
Platform-specific PYTHONPATH:
/usr/lib/kicad/lib/python3/dist-packagesC:\Program Files\KiCad\10.0\lib\python3\dist-packages or
%LOCALAPPDATA%\Programs\KiCad\10.0\lib\python3\dist-packages/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packagesThe server automatically detects Python on Linux in this priority order:
venv/bin/python or .venv/bin/python (highest priority)/usr/lib/kicad/bin/python3, /usr/local/lib/kicad/bin/python3, /opt/kicad/bin/python3which python3 to absolute path (e.g., /usr/bin/python3)/usr/bin/python3, /bin/python3For most standard Linux installations (Ubuntu, Debian, Fedora, Arch), no KICAD_PYTHON configuration is needed - the server will automatically find your Python installation.
Troubleshooting:
If you see "Python executable not found: python3", you can manually specify the Python path:
{
"mcpServers": {
"kicad": {
"command": "node",
"args": ["/path/to/KiCAD-MCP-Server/dist/index.js"],
"env": {
"KICAD_PYTHON": "/usr/bin/python3",
"PYTHONPATH": "/usr/lib/kicad/lib/python3/dist-packages"
}
}
}
}
To find your Python path:
which python3 # Example output: /usr/bin/python3
python3 -c "import pcbnew; print(pcbnew.GetBuildVersion())" # Verify pcbnew access
Copy the template to your workspace:
cp config/vscode-mcp.example.json .vscode/mcp.json
VS Code will auto-detect .vscode/mcp.json and register the server. The template uses ${workspaceFolder} so no path editing is needed.
Note:
.vscode/mcp.jsonis listed in.gitignore— your local configuration won't be committed.
Edit: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Use the same configuration format as Claude Desktop above.
Claude Code automatically detects MCP servers in the current directory. No additional configuration needed.
OpenCode uses a different MCP configuration schema than Claude Desktop. Use
setup-windows-opencode.ps1 to verify the local setup and write the correct
OpenCode mcp entry.
OpenCode project configuration is written to opencode.json in the target
project root. The script keeps the KiCAD MCP server repository separate from the
target project:
McpServerPath is this repository, where dist/index.js is builtProjectPath is the project that should receive opencode.jsonWhen this is useful:
pcbnew), Node.js, and dist/index.js
before changing OpenCode configurationThe setup script supports three KiCAD backend preferences via -Backend:
auto - try IPC first and fall back to SWIG if IPC is unavailable (default)ipc - require KiCAD IPC for real-time UI synchronizationswig - use the file-based pcbnew backendExamples:
.\setup-windows-opencode.ps1 -Apply -Scope project -Backend auto
.\setup-windows-opencode.ps1 -Apply -Scope project -Backend ipc
.\setup-windows-opencode.ps1 -Apply -Scope project -Backend swig
For -Backend ipc, KiCAD must be running with the IPC API server enabled.
Use this first when diagnosing installation or path problems. It detects KiCAD,
tests pcbnew, checks Node.js, and verifies the built MCP entrypoint.
.\setup-windows-opencode.ps1 -Verify -SkipInstall -SkipBuild
Use dry run mode when you want to inspect the exact JSON before writing it.
.\setup-windows-opencode.ps1 -DryRun -SkipInstall -SkipBuild
Example generated OpenCode shape:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kicad": {
"type": "local",
"command": ["node", "C:\\path\\to\\KiCAD-MCP-Server\\dist\\index.js"],
"environment": {
"NODE_ENV": "production",
"LOG_LEVEL": "info",
"KICAD_AUTO_LAUNCH": "false",
"KICAD_MCP_DEV": "0",
"KICAD_BACKEND": "auto",
"PYTHONPATH": "C:\\Program Files\\KiCad\\10.0\\bin\\Lib\\site-packages"
},
"enabled": true,
"timeout": 30000
}
}
}
A copyable template is also provided at config/opencode.json. Replace the
placeholder paths before using it directly.
Use this when you only want KiCAD MCP enabled for one project. The script writes
opencode.json in the target project root and backs up an existing file before
changing it.
.\setup-windows-opencode.ps1 -Apply -Scope project
By default, ProjectPath is the current working directory.
To configure another project, pass -ProjectPath:
.\setup-windows-opencode.ps1 -Apply -Scope project -ProjectPath "C:\path\to\your-project"
If the setup script is not located in the KiCAD MCP Server repository, pass
-McpServerPath so the generated config points to the correct dist/index.js:
.\setup-windows-opencode.ps1 `
-Apply `
-Scope project `
-ProjectPath "C:\path\to\your-project" `
-McpServerPath "C:\path\to\KiCAD-MCP-Server"
Use this when you want the KiCAD MCP server available from any OpenCode
workspace. The script writes %USERPROFILE%\.config\opencode\opencode.json.
.\setup-windows-opencode.ps1 -Apply -Scope global
Use this when testing multiple forks or keeping separate development and stable KiCAD MCP entries.
.\setup-windows-opencode.ps1 -Apply -Scope project -Name kicad-dev
Use this when KiCAD is installed outside the standard Windows locations.
.\setup-windows-opencode.ps1 -Apply -Scope project -KiCadRoot "D:\Apps\KiCad\10.0"
Use these flags when dependencies are already installed or the project is already built.
.\setup-windows-opencode.ps1 -Apply -Scope project -SkipInstall -SkipBuild
opencode.json.kicad MCP server and run check_kicad_ui.To disable the server without removing the full configuration, set the entry to
enabled: false and restart OpenCode.
{
"mcp": {
"kicad": {
"enabled": false
}
}
}
If OpenCode is running, the MCP server process is managed by OpenCode and normally stops when OpenCode exits.
The JLCPCB integration provides two modes that can be used independently or together:
Mode 1: JLCSearch Public API (Recommended - No Setup Required)
The easiest way to access JLCPCB's parts catalog:
To download the database:
Ask Claude: "Download the JLCPCB parts database"
This creates a local SQLite database at data/jlcpcb_parts.db (3-5 GB for full 2.5M+ part catalog).
Mode 2: Local Symbol Libraries (No Setup Required)
Install JLCPCB libraries via KiCAD's Plugin and Content Manager:
JLCPCB-KiCAD-Library or EDA_MCPsearch_symbols to find components with pre-configured footprints and LCSC IDsMode 3: Official JLCPCB API (Advanced - Requires Enterprise Account)
For users with JLCPCB enterprise accounts and order history:
Get API Credentials
appKey and appSecretConfigure Environment Variables
Add to your shell profile (~/.bashrc, ~/.zshrc, or ~/.profile):
export JLCPCB_API_KEY="your_app_key_here"
export JLCPCB_API_SECRET="your_app_secret_here"
Or create a .env file in the project root:
JLCPCB_API_KEY=your_app_key_here
JLCPCB_API_SECRET=your_app_secret_here
See JLCPCB Usage Guide for detailed documentation.
Create a new KiCAD project named 'LEDBoard' in my Documents folder.
Set the board size to 50mm x 50mm and add a rectangular outline.
Place a mounting hole at each corner, 3mm from the edges, with 3mm diameter.
Add text 'LED Controller v1.0' on the front silkscreen at position x=25mm, y=45mm.
Place an LED at x=10mm, y=10mm using footprint LED_SMD:LED_0805_2012Metric.
Create a grid of 4 resistors (R1-R4) starting at x=20mm, y=20mm with 5mm spacing.
Align all resistors horizontally and distribute them evenly.
Create a net named 'LED1' and route a 0.3mm trace from R1 pad 2 to LED1 anode.
Add a copper pour for GND on the bottom layer covering the entire board.
Create a differential pair for USB_P and USB_N with 0.2mm width and 0.15mm gap.
Automatically route all unconnected nets using the Freerouting autorouter.
Setup (one-time):
# 1. Download the Freerouting JAR
mkdir -p ~/.kicad-mcp
curl -L -o ~/.kicad-mcp/freerouting.jar \
https://github.com/freerouting/freerouting/releases/download/v2.0.1/freerouting-2.0.1-executable.jar
# 2. Runtime — pick ONE:
# Option A: Docker (recommended, no Java install needed)
docker pull eclipse-temurin:21-jre
# Option B: Install Java 21+ locally
# (Ubuntu/Debian) sudo apt install openjdk-21-jre
The autorouter auto-detects which runtime is available (Java 21+ direct, or Docker/Podman fallback).
Check if Freerouting is ready on my system.
Autoroute the current board using Freerouting with a 5-minute timeout.
Step-by-step workflow:
1. Open the project at ~/Projects/LEDBoard/LEDBoard.kicad_pcb
2. Check Freerouting dependencies are installed
3. Run autoroute with max 10 passes
4. Run DRC to verify the autorouted result
5. Export Gerbers to the fabrication folder
Manual DSN/SES workflow (for advanced users or external autorouters):
Export the board to Specctra DSN format.
# ... run Freerouting GUI or another autorouter externally ...
Import the routed SES file from ~/Projects/LEDBoard/LEDBoard.ses
Set design rules with 0.15mm clearance and 0.2mm minimum track width.
Run a design rule check and show me any violations.
Export Gerber files to the 'fabrication' folder.
Resources provide read-only access to project state:
Show me the current component list.
What are the current design rules?
Display the board preview.
List all electrical nets.
Finding Components with Local Libraries:
Search for ESP32 modules in JLCPCB libraries.
Find a 10k resistor in 0603 package from installed libraries.
Show me details for LCSC part C2934196.
Optimizing Costs with JLCPCB API:
Search for 10k ohm resistors in 0603 package, only Basic parts.
Find the cheapest capacitor 10uF 25V in 0805 package with good stock.
Show me pricing and stock for JLCPCB part C25804.
Suggest cheaper alternatives to C25804.
Complete Design Workflow:
I'm designing a board with an ESP32 and need to select components for JLCPCB assembly.
Search JLCPCB for ESP32-C3 modules.
Find Basic parts for: 10k resistor 0603, 100nF capacitor 0603, LED 0805.
For each component, show me the cheapest option with good stock availability.
Place these components on my board using the suggested footprints.
Database Management:
Download the JLCPCB parts database (first time setup).
Show me JLCPCB database statistics.
How many Basic parts are available?
src/)src/tools/registry.ts - Tool categorization and lookupsrc/tools/router.ts - Discovery and execution toolspython/)base.py - Abstract base classes for backendsipc_backend.py - KiCAD 9.0 IPC API backend (real-time UI sync)swig_backend.py - pcbnew SWIG API backend (file-based operations)factory.py - Backend auto-detection and instantiationproject.py - Project operationsboard.py - Board manipulationcomponent.py - Component placementrouting.py - Trace routing and netsdesign_rules.py - DRC operationsexport.py - File generationschematic.py - Schematic designlibrary.py - Footprint librarieslibrary_symbol.py - Symbol library search (local JLCPCB libraries)jlcpcb.py - JLCPCB API clientjlcpcb_parts.py - JLCPCB parts database manager# Install dependencies
npm install
pip3 install -r requirements.txt
# Build TypeScript
npm run build
# Watch mode for development
npm run dev
# TypeScript tests
npm run test:ts
# Python tests
npm run test:py
# All tests with coverage
npm run test:coverage
# Lint TypeScript and Python
npm run lint
# Format code
npm run format
Symptoms: MCP server doesn't show up in Claude Desktop or Cline
Solutions:
ls dist/index.jsSymptoms: ModuleNotFoundError: No module named 'pcbnew'
Solutions:
python3 -c "import pcbnew"Symptoms: Tools fail with unclear errors
Solutions:
~/.kicad-mcp/logs/kicad_interface.logSymptoms: Server fails to start on Windows
Solutions:
.\setup-windows.ps1C:\\Program Files\\KiCad\\10.0~/.kicad-mcp/logs/kicad_interface.logpython3 -c "import pcbnew; print(pcbnew.GetBuildVersion())")node --version)Current Version: 2.2.3
See STATUS_SUMMARY.md for the complete status matrix and CHANGELOG.md for detailed release notes.
Working Features (122 tools):
IPC Backend (Experimental):
Developer Mode:
Set KICAD_MCP_DEV=1 to capture MCP session logs for debugging. See CHANGELOG v2.2.3 for details.
Logging (~/.kicad-mcp/logs/):
Logs default to INFO and the file is size-capped so it can't grow without bound. Tune via the MCP server's environment:
| Variable | Default | Purpose |
|---|---|---|
LOG_LEVEL / KICAD_MCP_LOG_LEVEL | info | Log verbosity (error/warn/info/debug, or off). KICAD_MCP_LOG_LEVEL wins. |
KICAD_MCP_LOG_MAX_BYTES | 10485760 (10 MB) | Max size per log file before it rotates; 0 disables rotation. |
KICAD_MCP_LOG_BACKUP_COUNT | 3 | Number of rotated backups to keep. |
KICAD_MCP_DEBUG_SKIP | unset | Set to 1 to re-enable the verbose kicad-skip parser DEBUG logs (muted by default). |
See ROADMAP.md for planned features.
We are actively developing new features. Your feedback directly shapes development priorities.
Share your ideas:
Contributions are welcome! Please follow these guidelines:
See CONTRIBUTING.md for detailed guidelines.
This project is licensed under the MIT License. See LICENSE for details.
If you use this project in your research or publication, please cite:
@software{kicad_mcp_server,
title = {KiCAD MCP Server: AI-Assisted PCB Design},
author = {mixelpixx},
year = {2025},
url = {https://github.com/mixelpixx/KiCAD-MCP-Server},
version = {2.2.3}
}
miapre/html-to-figma-design-system
ie3jp/illustrator-mcp-server
coding-solo/godot-mcp
ivanmurzak/unity-mcp
yctimlin/mcp_excalidraw
figma/mcp-server-guide