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) |
Capabilities
Features and capabilities supported by this server
| 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 | |
Latest Blog Posts
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/lmaag182/kicad_mcp_server_ipc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server