create_projectLABSCO SUMMARY
Tool discovery is what makes a surface this large usable at all.
A board-design server has to expose hundreds of operations, and a model handed all of them at once picks badly and burns context doing it. search_tools and get_category_tools let it look up the right call by keyword instead. The schematic-hygiene tools deserve their own mention: floating labels, orphaned wires and wires crossing symbols are exactly the mistakes a generated schematic makes and a human review misses.
What it is
A bridge between an assistant and a local KiCAD installation, covering the whole board lifecycle — project, schematic, placement, routing, checks and manufacturing output — with tool discovery so the model can find the right call rather than carrying every schema.
What you get
- Projects created, opened, saved and checkpointed with a named snapshot that renders a PDF — create_project, open_project, save_project, snapshot_project
- Board setup: dimensions, outline shapes, layers, zones, mounting holes, text and an SVG logo imported onto silkscreen — set_board_size, add_board_outline, add_layer, add_zone, add_mounting_hole, import_svg_logo
- Components placed, moved, rotated, duplicated, aligned, arrayed, annotated and grouped, with pads and properties readable — place_component, move_component, rotate_component, align_components, place_component_array, get_component_pads, get_component_properties
- Routing: nets and traces, vias, copper pours, differential pairs, pad-to-pad routes, net classes and a pattern copied from one place to another — add_net, route_trace, add_via, add_copper_pour, route_differential_pair, route_pad_to_pad, create_netclass, copy_routing_pattern
- Design rules set and read, DRC run, clearances checked and violations listed — set_design_rules, run_drc, check_clearance, get_drc_violations
- A full schematic workflow: components, wires, net labels, no-connects, hierarchical labels and sheet pins, plus ERC, netlist generation and syncing the schematic to the board — add_schematic_component, add_schematic_wire, add_schematic_net_label, add_sheet_pin, run_erc, generate_netlist, sync_schematic_to_board
- Schematic sanity checks that catch what a human misses: overlapping elements, wires crossing symbols, floating labels and orphaned wires — find_overlapping_elements, find_wires_crossing_symbols, list_floating_labels, find_orphaned_wires
- Libraries searched and inspected, and new footprints and symbols created and registered — search_footprints, search_symbols, create_footprint, create_symbol, register_footprint_library, register_symbol_library
- Parts sourcing against the JLCPCB catalogue, with alternatives suggested and datasheets enriched via LCSC — search_jlcpcb_parts, get_jlcpcb_part, suggest_jlcpcb_alternatives, enrich_datasheets, get_datasheet_url
- Freerouting autorouting through Java, Docker or Podman, with DSN export and SES import — autoroute, export_dsn, import_ses, check_freerouting
- Manufacturing output: Gerbers, PDF, SVG, 3D, VRML, BOM, netlist and pick-and-place positions — export_gerber, export_pdf, export_3d, export_bom, export_position_file
- Keyword tool discovery so the model finds the right tool instead of holding every schema at once — search_tools, get_category_tools, list_tool_categories
Requirements
KiCAD 9.0 or newer installed locally with its libraries, Node.js 18 or newer, and Python — the repository is cloned and built rather than installed from a registry. It reaches KiCAD through the pcbnew Python module, so the server has to find KiCAD's own Python: on most Linux installations that resolves automatically, and KICAD_PYTHON overrides it elsewhere. Windows has a setup script that detects installs and generates the configuration. Autorouting additionally needs Java, Docker or Podman for Freerouting. Note before you commit to it: the author has rebuilt this project as Konnect, a native KiCAD 10 plugin in Rust, where new development now happens — this server stays open and maintained but is no longer where the work goes.
Setup effort
Follow the published steps — git clone https://github.com/mixelpixx/KiCAD-MCP-Server.git
USE CASES
Getting a new board started without clicking through setup
Create the project, set the board size, and lay down the outline before any parts exist.
Capturing a circuit as a schematic
Place the components, wire them, label the nets, then annotate and run ERC before it reaches the board.
Getting from schematic to a routed board
Sync the schematic across, place the parts, then route — by hand or through the autorouter.
Finding out whether the layout is manufacturable
Set the design rules, run DRC, and read the violations rather than eyeballing clearances.
Choosing a part you can actually buy
Search the JLCPCB catalogue, check the specific part, and ask for alternatives when stock is the problem.
Handing the design to a fab
Export the Gerbers, the BOM and the pick-and-place file from the same session that produced the board.
123 tools
Listed in project docs. Your client may show a different list.
open_projectsave_projectget_project_infosnapshot_projectset_board_sizeadd_board_outlineadd_layerset_active_layerget_layer_listget_board_infoget_board_2d_viewget_board_extentsadd_mounting_holeadd_board_textadd_zoneimport_svg_logoplace_componentmove_componentrotate_componentdelete_componentedit_componentfind_componentget_component_propertiesadd_component_annotationgroup_componentsreplace_componentget_component_padsget_component_listget_pad_positionplace_component_arrayalign_componentsduplicate_componentadd_netroute_traceroute_pad_to_padadd_viadelete_tracequery_tracesget_nets_listmodify_tracecreate_netclassadd_copper_pourroute_differential_pairrefill_zonescopy_routing_patternadd_schematic_componentdelete_schematic_componentedit_schematic_componentset_schematic_component_propertyremove_schematic_component_propertyget_schematic_componentlist_schematic_componentsmove_schematic_componentrotate_schematic_componentannotate_schematicadd_wiredelete_schematic_wireadd_schematic_connectionadd_schematic_net_labeldelete_schematic_net_labelconnect_to_netconnect_passthroughget_schematic_pin_locationsget_net_connectionslist_schematic_netslist_schematic_wireslist_schematic_labelscreate_schematicget_schematic_viewexport_schematic_svgexport_schematic_pdfrun_ercgenerate_netlistsync_schematic_to_boardset_design_rulesget_design_rulesrun_drcget_drc_violationsassign_net_to_classset_layer_constraintscheck_clearanceexport_gerberexport_pdfexport_svgexport_3dexport_bomexport_netlistexport_position_fileexport_vrmllist_librarieslist_symbol_librariessearch_footprintssearch_symbolslist_library_footprintslist_library_symbolsget_footprint_infoget_symbol_infocreate_footprintcreate_symboledit_footprint_padregister_footprint_libraryregister_symbol_librarylist_footprint_librarieslist_symbols_in_librarydelete_symbolenrich_datasheetsget_datasheet_urldownload_jlcpcb_databasesearch_jlcpcb_partsget_jlcpcb_partget_jlcpcb_database_statssuggest_jlcpcb_alternativesautorouteexport_dsnimport_sescheck_freeroutingcheck_kicad_uilaunch_kicad_uilist_tool_categoriesget_category_toolssearch_toolsexecute_toolBEFORE YOU INSTALL
What to know first
Tools you get
123 tools named in the project's documentation. The project's own totals conflict (169, 148, 137); the newest, 169, is from v2.7.0. The categorized list omits tools added since v2.3.0, such as validate_schematic, import_pcb and open_board.
Requires
- KiCAD 9.0 or newer, including its pcbnew Python module
- Node.js 18 or newer
- Python 3.9 or newer — the one bundled with KiCAD
INSTALLATION
Connect your client
Server setup
Install KiCAD 9.0 or higher (must include the Python module pcbnew)
Install Node.js
git clone https://github.com/mixelpixx/KiCAD-MCP-Server.git
cd KiCAD-MCP-Server
npm install
pip3 install -r requirements.txt
npm run buildVerify: python3 -c "import pcbnew; print(pcbnew.GetBuildVersion())"
Add the mcpServers block to your client config (or run .\setup-windows.ps1 / ./setup-macos.sh --apply which generates and merges it for you)
MCP Clients
Claude Desktop
Edit ~/.config/Claude/claude_desktop_config.json (Linux), ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"kicad": {
"command": "node",
"args": [
"<YOUR_PATH_TO_KI_CAD_MCP_SERVER>/dist/index.js"
],
"env": {
"PYTHONPATH": "<YOUR_PATH_TO_KICAD>/python",
"LOG_LEVEL": "info"
}
}
}
}<YOUR_PATH_TO_KI_CAD_MCP_SERVER> is the full path of your clone, and <YOUR_PATH_TO_KICAD>/python is KiCad's Python packages folder. PYTHONPATH by platform (the project's table): Linux /usr/lib/kicad/lib/python3/dist-packages; Windows C:\Program Files\KiCad\10.0\lib\python3\dist-packages (or %LOCALAPPDATA%\Programs\KiCad\10.0\lib\python3\dist-packages); macOS /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages.
VS Code
cp config/vscode-mcp.example.json .vscode/mcp.jsonCline
Edit ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json:
{
"mcpServers": {
"kicad": {
"command": "node",
"args": [
"<YOUR_PATH_TO_KI_CAD_MCP_SERVER>/dist/index.js"
],
"env": {
"PYTHONPATH": "<YOUR_PATH_TO_KICAD>/python",
"LOG_LEVEL": "info"
}
}
}
}<YOUR_PATH_TO_KI_CAD_MCP_SERVER> is the full path of your clone, and <YOUR_PATH_TO_KICAD>/python is KiCad's Python packages folder. PYTHONPATH by platform (the project's table): Linux /usr/lib/kicad/lib/python3/dist-packages; Windows C:\Program Files\KiCad\10.0\lib\python3\dist-packages (or %LOCALAPPDATA%\Programs\KiCad\10.0\lib\python3\dist-packages); macOS /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages.
Claude Code
This is the project's macOS example. On Linux or Windows, change the two paths as described under the block.
claude mcp add --scope user kicad --env KICAD_PYTHON=/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 --env PYTHONPATH=/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages --env LOG_LEVEL=info -- node <YOUR_PATH_TO_KI_CAD_MCP_SERVER>/dist/index.js<YOUR_PATH_TO_KI_CAD_MCP_SERVER> is the full path of your clone. PYTHONPATH by platform (the project's table): Linux /usr/lib/kicad/lib/python3/dist-packages; Windows C:\Program Files\KiCad\10.0\lib\python3\dist-packages (or %LOCALAPPDATA%\Programs\KiCad\10.0\lib\python3\dist-packages); macOS /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages. On standard Linux installs (Ubuntu, Debian, Fedora, Arch) the server finds KiCad's Python by itself, so leave out the --env KICAD_PYTHON=… flag; elsewhere point it at the Python that can import pcbnew. On macOS, ./setup-macos.sh prints this command with the detected paths filled in.
OpenCode — Windows
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kicad": {
"type": "local",
"command": [
"node",
"<YOUR_PATH_TO_KI_CAD_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
}
}
}