kicad-mcp
This server provides an MCP interface to KiCad 10 on Windows, giving an LLM live and file-based access to PCB and schematic data, symbol libraries, design rule checking, and scripted control.
Status & environment: Check KiCad installation, versions, IPC connection, and available capabilities (
kicad_status).Live PCB (requires KiCad running with PCB editor open):
Summarize the board: name, layer count, item counts, title block, origin (
get_board_summary).List and get detailed footprint info (positions in mm, pads, nets) with glob filtering by reference/value (
list_footprints,get_footprint).List nets with optional glob filtering (
list_nets).Access enabled/visible layers and physical stackup (order, materials, thicknesses) (
get_layers,get_stackup).Read the current user selection in the KiCad GUI (
get_selection).List tracks/vias, optionally filtered by net name (
list_tracks_vias).List copper zones with nets and layers (
list_zones).
Schematic file operations (file‑based; works without KiCad open):
Open a
.kicad_schfile and get a summary (title block, item counts, child sheets) (open_schematic).List placed symbols with reference, value, library ID, position, footprint; supports glob filtering (
list_schematic_symbols).Export and parse the full netlist via
kicad-cli(schematic_netlist).Run Electrical Rules Check (ERC) and return violations (
run_erc).Run Design Rule Check (DRC) on a
.kicad_pcbfile and return report (run_drc).Export a Bill of Materials to CSV (
export_bom).Plot (export) a schematic to PDF, SVG, DXF, PS, or HPGL (
export_schematic).Discover KiCad project files (schematics, boards, .pro) in a directory (
find_project_files).
Symbol library access:
List available global and project-specific libraries (
list_symbol_libraries).Search libraries by name substring (
search_symbols).Get every pin of a symbol: number, name, electrical type, position (
get_symbol_pins).
Schematic generation and editing:
Create a new
.kicad_schfrom a firmware pinout: imports an MCU symbol, wires assigned pins to net labels, automatically adds power symbols andPWR_FLAG(create_pinout_schematic).Add symbols, mark pins as unused/no-connect, rewire power symbols, and add decoupling capacitors to existing schematics (tools
add_symbol_to_schematic,mark_pins_unused,rewire_power_symbol,add_decoupling_capacitors).
Escape hatch: Execute arbitrary Python with
kicad,board,kipy,pcbnew, andsexprpre-imported, enabling full API access beyond the curated tools (run_kicad_script).
Provides live access to PCB designs in KiCad, file-based schematic manipulation, symbol library search, and schematic generation from pinouts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kicad-mcpList the footprints on the current PCB in KiCad."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kicad-mcp
An MCP server for KiCad 10 on Windows. Gives an LLM live access to the board open in KiCad, file-based access to schematics, symbol library search, schematic generation from a firmware pinout, and a scripting escape hatch for everything else.
Verified against KiCad 10.0.5, API 10.0.1, kicad-python 0.7.1,
mcp 2.0.0.
Why a venv built from KiCad's own Python
pcbnew is a C extension compiled against CPython 3.11's ABI and KiCad's
native libraries, so it only loads in KiCad's bundled interpreter. A venv
created from that interpreter reuses the same binary, so it can import
pcbnew, while pip adds kipy and the MCP SDK. One process, all three APIs,
no cross-interpreter bridge.
Related MCP server: KiCad MCP Server
Install
"C:/Program Files/KiCad/10.0/bin/python.exe" -m venv --system-site-packages .venv.venv/Scripts/python.exe -m pip install -e .Then check the environment:
.venv/Scripts/python.exe -m kicad_mcp doctordoctor reports every dependency, whether the IPC server is enabled, whether
KiCad is running, and a remedy for anything that fails.
MCP client configuration
{
"mcpServers": {
"kicad": {
"command": "C:\\Workspace\\mcp_kicad\\.venv\\Scripts\\python.exe",
"args": ["-m", "kicad_mcp"]
}
}
}Tools
Environment — kicad_status
Live PCB (needs KiCad running with the PCB editor open) — get_board_summary,
list_footprints, get_footprint, list_nets, get_layers, get_stackup,
get_selection, list_tracks_vias, list_zones
Schematic (files; works with KiCad closed) — open_schematic,
list_schematic_symbols, find_project_files, schematic_netlist, run_erc,
export_bom, export_schematic, run_drc
Symbol libraries — list_symbol_libraries, search_symbols, get_symbol_pins
Generation — create_pinout_schematic
Editing existing schematics — add_symbol_to_schematic, mark_pins_unused,
rewire_power_symbol, add_decoupling_capacitors
Escape hatch — run_kicad_script
Generating a schematic from a pinout
{
"output": "C:/proj/esp32.kicad_sch",
"mcu_lib_id": "RF_Module:ESP32-S3-MINI-1",
"assignments": {"IO4": "LED_STATUS", "GPIO_8": "SPI_MOSI", "io9": "SPI_MISO"}
}Pin matching ignores case, underscores and hyphens, so IO4, GPIO_4 and io4
all resolve to the same pin. Assigned pins get a wire and a net label; power pins
get power symbols plus PWR_FLAG so ERC does not report undriven rails.
Unmatched assignments are reported back rather than silently dropped.
The output is a normal .kicad_sch you can open and keep editing. It is written
directly, so KiCad does not need to be running.
Two things to know about KiCad 10
The API only serves editors that are open. KiCad registers API handlers per
editor window. If only the project manager is running, live PCB calls fail with
"no handler available". The server translates that into a message telling you
to open the PCB editor. Open it from the KiCad project manager, not as a
standalone pcbnew.exe — the API socket is owned by one process, and a
standalone editor is a different one.
There is no schematic IPC API in KiCad 10. This is not a binding bug. The
10.0 branch of schematic_commands.proto defines zero commands, and the full
schematic type model exists only on master (KiCad 11 development).
kipy 0.7.1 ships master-era Python wrappers against 10.0-era generated
protobuf, which is why import kipy.schematic raises ImportError. Regenerating
the protos would clear the import and still return "no handler available" on
every call.
So schematic support here is file-based: kicad-cli plus direct .kicad_sch
parsing. That has an upside — it works with KiCad closed, which is what makes
schematic generation possible at all.
Seeing schematic changes if the file is already open
Because there's no live schematic API, a change any tool here makes to a
.kicad_sch never reaches KiCad's in-memory copy on its own — KiCad only reads
the file from disk when told to. If you have the schematic open while a tool
edits it:
Use File → Revert, not just switching windows or waiting. Revert is what makes KiCad re-read the file and show the change.
Don't hit Save first. Saving from the GUI writes KiCad's in-memory state back over the file, discarding whatever the tool just wrote — the one order that loses work.
If Revert isn't available or doesn't pick it up, close the schematic tab and reopen it from the project manager; that always re-reads from disk.
This applies in both directions: if you're editing by hand in KiCad, save from KiCad before asking for another file-based change, or the tool will act on a stale copy and your hand edits will be the ones lost.
The escape hatch
run_kicad_script executes Python with kicad, board, kipy, pcbnew, and
sexpr pre-bound. It exists so the server covers the whole API surface without
hundreds of thin tool wrappers, which measurably degrade tool selection.
This is arbitrary local code execution with your privileges. That is the deliberate trade for full API access. Run this server only against KiCad instances and files you trust.
Tests
.venv/Scripts/python.exe -m pytest -qTests marked requires_kicad need an installation for its symbol libraries.
Live-IPC behaviour is verified manually — it needs a GUI session with a board
open, which is not worth automating on Windows.
Scope
Windows only, by choice. discovery.InstallResolver is the single
platform-aware seam, so adding macOS or Linux later means adding a resolver
rather than threading sys.platform checks through the package.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceMCP server for creating, modifying, and analyzing KiCAD schematic files using natural language.20MIT
- Flicense-qualityDmaintenanceA Model Context Protocol (MCP) server that exposes KiCad PCB design automation tools to AI assistants and other MCP clients.
- Alicense-qualityBmaintenanceAn MCP server providing full control over KiCad 10, enabling PCB editing, schematic editing, design data, and production output via natural language.MIT
- AlicenseBqualityBmaintenanceMCP server that analyzes, reviews, and exports KiCad 9 designs, with live board editing via IPC and a built-in design-review engine.47MIT
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
MCP server for Klever blockchain smart contract development.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lucatib/kicad-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server