kicad-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KICAD_APP | No | Path to the macOS KiCad .app bundle | |
| KICAD_CLI | No | Path to the kicad-cli executable | |
| KICAD_PYTHON | No | Path to the Python interpreter that can import pcbnew | |
| KICAD_MCP_CACHE | No | Directory to use for caching | ~/.cache/kicad-mcp |
| KICAD_MCP_DEBUG | No | Set to 1 to print worker tracebacks to stderr | |
| KICAD_API_SOCKET | No | Path to the KiCad IPC API socket |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| project_infoA | Overview of a KiCad project folder: files, board size and counts, schematic sheets. Start here. |
| board_summaryB | Board overview: outline, layers, footprint/net/track/via counts, zones, design rules and netclasses. |
| list_componentsA | List footprints on the board with position (mm), rotation, side. Filters are case-insensitive substrings, or globs if they contain * ? [ (e.g. ref="C*", value="10k", footprint="0402", side="F"). |
| get_componentA | Full detail for one footprint by reference: position, bbox, courtyard, fields, 3D model, every pad with net. |
| measureA | Distance between two items. Each of a/b is a footprint ref ("U7"), a pad ("U7.3" or "J1:A6"), or a point in mm ("120.5,44"). Returns dx/dy, centre distance, compass direction, and edge-to-edge gap (courtyard-to-courtyard for footprints, copper-to-copper for pads). |
| neighborsB | Footprints within |
| net_infoA | Everything on one net: pads (with pin names), track length per layer, widths, vias, zones, netclass rules. Net name may be exact, case-insensitive, or a unique substring. |
| list_netsB | Nets on the board with pad count, routed length and via count. sort = pads | length | name. |
| items_in_regionA | What lies inside a rectangle (mm corners): footprints, tracks per net/layer, vias, zones, text. Optional layer name (e.g. "F.Cu", "B.Silkscreen") restricts the answer. |
| searchC | Find where a string occurs on the board: references, values, footprint names, fields, net names, silkscreen text. |
| drcA | Run DRC (cached until the board changes). Without |
| render_3dA | Render the board to a PNG (raytraced-lite) and return its path so you can view it. side = top | bottom | left | right | front | back. zoom > 1 magnifies the centre. |
| render_layersA | 2D plot of chosen layers (comma-separated, e.g. "F.Cu,F.Silkscreen,Edge.Cuts") fitted to the board. Returns the SVG path and, on macOS, a PNG path you can view. mirror=true for looking at the bottom. |
| schematic_summaryA | Schematic overview from the exported netlist: sheets, symbol counts by prefix, nets, power nets, DNP parts. |
| sch_componentsB | List schematic symbols with value, footprint, sheet and DNP flag. Filters are substrings or globs. |
| sch_componentB | One schematic symbol: fields, library part, sheet, and every pin with the net it is on (blank = unconnected). |
| sch_netB | All pins on a schematic net (exact, case-insensitive, or unique-substring name). |
| sch_netsB | Schematic nets with pin counts, largest first. filter is a case-insensitive substring. |
| bomC | Bill of materials grouped by value (and footprint): quantity, references, and part-number fields. |
| ercA | Run ERC on the schematic (cached until it changes). Without |
| kicad_statusA | Is KiCad running with its API enabled, and which boards/schematics are open? Call before any editing tool. Editing tools work on the board open in the KiCad PCB editor. |
| move_componentA | Move/rotate/flip one footprint in the open board (one undo step). x/y set an absolute position in mm; dx/dy nudge relative to it; rotation sets degrees, rotate_by adds; flip moves it to the other side. |
| move_componentsA | Move several footprints as one undo step. |
| set_component_attributesB | Set DNP / exclude-from-BOM / exclude-from-position-files / locked flags on a footprint. |
| set_component_fieldB | Set the value, datasheet or description text of a footprint on the board (not the schematic). |
| add_trackA | Draw track segments through |
| add_viaA | Place a through via at (x, y) mm on |
| ripup_netA | Delete all tracks (and vias unless vias=false) of a net, optionally only on one layer. Undoable in the editor. |
| get_selectionA | What the user currently has selected in the PCB editor (footprints, tracks, vias...). Useful when they say "this part" or "these tracks". |
| select_componentsA | Select footprints in the PCB editor so the user can see which ones you mean. |
| refill_zonesA | Refill all copper zones in the open board (needed after moving parts or routing near zones). |
| save_boardA | Save the open board to disk so file-based tools (measure, drc, render...) see the edits. |
| live_componentA | Current position/rotation/side of a footprint as shown in the editor (including unsaved edits). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 33 tools
Most tools map cleanly to a distinct resource and action, with clear board-vs-schematic prefixes (list_components vs sch_components, net_info vs sch_net). A few overlaps exist—project_info/board_summary both report board counts, and live_component/get_component both describe a footprint—but the descriptions resolve the boundaries.
The set uses consistent snake_case and useful prefixes: list_/get_ for reads, sch_ for schematic tools, and move_/set_/add_/ripup_ for edits. It deviates with bare acronyms and noun-only names like erc, drc, bom, board_summary, and kicad_status, but the overall pattern remains predictable.
33 tools exceeds the 25+ threshold and makes agent tool selection noticeably harder. The breadth reflects KiCad's complexity, but several summary/query tools could be consolidated without losing capability.
The toolset thoroughly covers board/schematic inspection, selection, rendering, ERC/DRC, BOM, and common layout edits. Gaps remain: there is no component creation/deletion, no schematic editing, and track editing is limited to adding segments or ripping up whole nets rather than editing existing tracks.