KiCad MCP Server (IPC API)
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KICAD_API_TOKEN | No | Auth token from KiCad when launched as plugin | |
| KICAD_API_SOCKET | No | Path to KiCad IPC socket (auto-detected if unset) | |
| KICAD_IPC_TIMEOUT_MS | No | Request timeout in ms (default: 5000) |
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 |
|---|---|
| ping_kicadA | Check connectivity to the running KiCad IPC server. |
| get_kicad_statusA | Get KiCad connection status and version information. |
| list_open_documentsA | List documents currently open in KiCad. |
| get_kicad_versionA | Get KiCad and API version details. |
| run_kicad_actionC | Run a KiCad editor action by name (unstable API). |
| get_board_infoA | Get summary information about the open PCB. |
| get_board_sizeA | Get bounding box size of the board outline in mm. |
| get_board_as_stringA | Get the board file contents as a KiCad S-expression string. |
| get_selection_as_stringA | Get current selection as KiCad S-expression string. |
| list_componentsC | List all footprint instances on the board. |
| get_componentA | Get a component by reference designator. |
| list_tracksA | List all tracks and arc tracks. |
| list_viasC | List all vias. |
| list_padsA | List all pads on the board. |
| list_netsA | List all nets, optionally filtered by net class. |
| list_zonesA | List all copper and rule zones. |
| list_groupsB | List all item groups on the board. |
| list_dimensionsB | List all dimension objects. |
| list_board_textA | List all board text and text boxes. |
| list_board_shapesB | List graphic shapes (segments, arcs, rects, etc.). |
| list_barcodesB | List barcode objects on the board. |
| get_items_by_idB | Retrieve board items by their KiCad UUID. |
| get_items_by_netC | Retrieve items belonging to a net. |
| get_connected_itemsB | Get all copper-connected items from a starting item. |
| get_stackupA | Get the board layer stackup. |
| get_title_blockA | Get board title block fields. |
| save_boardA | Save the current board, optionally to a new path. |
| revert_boardA | Revert board to last saved state. |
| place_componentC | Place a footprint on the board. |
| move_componentC | Move a component to a new position. |
| rotate_componentC | Rotate a component by a relative angle. |
| delete_componentB | Delete a component by reference. |
| route_traceC | Add a copper trace between two points. |
| add_viaC | Add a through-hole via. |
| add_copper_pourC | Add a copper pour zone from polygon points. |
| refill_zonesC | Refill all copper zones. |
| add_board_textC | Add silkscreen or copper text. |
| add_board_outlineC | Add board outline segments on Edge.Cuts. |
| add_mounting_holeC | Add circular mounting hole on Edge.Cuts. |
| set_board_sizeC | Create rectangular board outline. |
| delete_items_by_idC | Delete board items by UUID. |
| set_title_blockC | Update board title block fields. |
| get_layer_listA | List all enabled board layers. |
| get_visible_layersA | List layers visible in the editor. |
| get_active_layerA | Get the active drawing layer. |
| set_active_layerC | Set the active drawing layer. |
| set_visible_layersC | Set which layers are visible in the editor. |
| get_copper_layer_countA | Get number of copper layers. |
| set_enabled_layersB | Set copper layer count and enabled non-copper layers (destructive). |
| get_layer_nameB | Get display name for a layer. |
| get_selectionA | Get currently selected board items. |
| add_to_selectionC | Add items to selection by UUID. |
| remove_from_selectionB | Remove items from selection. |
| clear_selectionA | Clear the editor selection. |
| get_item_bounding_boxC | Get bounding box for a board item. |
| hit_testC | Test if a point hits a board item. |
| get_board_originB | Get grid or drill origin. |
| set_board_originC | Set grid or drill origin. |
| get_editor_appearanceB | Get PCB editor appearance settings. |
| get_net_classesA | Get project net classes. |
| get_text_variablesB | Get project text variables. |
| set_text_variablesC | Set project text variables. |
| expand_text_variablesB | Expand ${VAR} placeholders in text strings. |
| export_gerbersC | Export Gerber manufacturing files. |
| export_drillC | Export Excellon drill files. |
| export_pdfC | Export board as PDF. |
| export_svgC | Export board as SVG. |
| export_dxfC | Export board as DXF. |
| export_3dC | Export 3D model (STEP, GLB, STL, etc.). |
| export_positionC | Export pick-and-place position files. |
| export_ipc2581C | Export IPC-2581 package. |
| export_odbC | Export ODB++ package. |
| export_statsC | Export board statistics report. |
| list_tool_categoriesB | Browse all KiCad IPC tool categories and their tools. |
| search_toolsB | Search KiCad IPC tools by name, description, or category. |
| get_tool_schemaB | Get the parameter schema for a KiCad IPC tool. |
| execute_kicad_toolC | Execute any KiCad IPC tool by name with a JSON arguments object. |
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 77 tools
Most tools target distinct objects or actions, but there is potential confusion between 'execute_kicad_tool' and 'run_kicad_action', as well as among the many getter/list tools like 'get_board_info' vs 'get_board_size'. Overall, the descriptions clarify differences, keeping ambiguity low.
The naming follows a consistent verb_noun pattern (e.g., add_board_outline, export_gerbers, list_nets). Minor exceptions like 'ping_kicad' and 'hit_test' are still intuitive and do not break the overall pattern.
With 77 tools, this is a very large set for a single server. While the comprehensive PCB design domain justifies many operations, the count feels heavy and could overwhelm agents. Some tools are highly specific (e.g., refill_zones, set_board_origin), making the set borderline appropriate.
The tool set covers the full PCB design lifecycle: adding elements, editing, querying, exporting, and project management. It includes both high-level operations and detailed settings, leaving no obvious dead ends for common PCB editing tasks.