KiCad MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KICAD_API_SOCKET | No | Path to the KiCad IPC API socket. On Windows defaults to ipc://%TEMP%\kicad\api.sock | ipc:///tmp/kicad/api.sock |
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 |
|---|---|
| kicad_pingA | Check connection to KiCad and return version info. |
| kicad_check_versionA | Check if the connected KiCad version matches the kipy library version. |
| get_board_infoA | Get high-level information about the currently open board. |
| get_title_blockB | Get the board title block info. |
| set_title_blockA | Update title block information for the board. All parameters are optional. Values not specified will remain unchanged. |
| get_stackupA | Get stackup layers, thickness, material, and electrical properties. |
| get_design_rulesA | Get raw design rules (KiCad 11+). |
| get_custom_design_rulesA | Get custom design rules text and any parsing errors (KiCad 11+). |
| set_custom_design_rulesC | Set custom design rules text (KiCad 11+). |
| get_enabled_layersB | Get list of currently enabled board layers. |
| get_visible_layersB | Get list of visible board layers. |
| set_visible_layersC | Set the list of visible board layers. |
| get_active_layerA | Get current active board layer name. |
| set_active_layerC | Set the active board layer. |
| get_board_originC | Get board origin coordinates (grid or drill). |
| set_board_originC | Set board origin coordinates (grid or drill). |
| get_board_as_stringA | Retrieve the entire board (.kicad_pcb) content as text. |
| save_boardC | Save the board changes to file. |
| save_board_asC | Save the board as a new file. |
| revert_boardA | Revert board to the last saved state on disk. |
| begin_commitA | Begin an edit transaction for batching multiple operations into a single Undo step. |
| push_commitC | Push/apply the active transaction and close the commit. |
| drop_commitB | Drop/cancel the active transaction and discard changes. |
| list_footprintsA | List footprints on the board, optionally filtered by reference designator substring. |
| get_footprintB | Retrieve detailed information about a specific footprint by its reference designator. |
| get_footprint_bounding_boxC | Get the bounding box of a footprint (in millimeters). |
| move_footprintB | Move a footprint to absolute coordinates (in millimeters). |
| rotate_footprintC | Rotate a footprint to a specific absolute angle (in degrees). |
| move_and_rotate_footprintC | Move and rotate a footprint in one operation. |
| flip_footprintB | Flip a footprint to the opposite side of the board (F.Cu <=> B.Cu). |
| lock_footprintC | Lock or unlock a footprint to prevent accidental movement. |
| set_footprint_dnpC | Set the Do Not Populate (DNP) flag on a footprint. |
| set_footprint_bom_excludedC | Set whether a footprint is excluded from the Bill of Materials (BOM). |
| set_footprint_fieldB | Update or add a field on a footprint (e.g. Reference, Value, custom fields). |
| remove_footprintC | Remove a footprint from the board. |
| list_padsC | List all pads of a footprint. |
| get_padB | Get detailed information for a single pad of a footprint. |
| get_connected_itemsC | Retrieve items connected to a specific pad. |
| interactive_move_footprintA | Initiates an interactive move in the GUI. Returns immediately but blocks further API calls until complete. |
| list_tracksC | List tracks on the board, optionally filtered by net name and/or layer name. |
| get_trackC | Get details of a specific track by its ID. |
| add_trackC | Add a straight track segment to the board. |
| add_arc_trackC | Add an arc track segment to the board. |
| update_track_widthC | Update the width of a track segment. |
| update_track_netC | Update the net assigned to a track. |
| move_trackB | Move a track by a relative delta (in millimeters). |
| lock_trackC | Lock or unlock a track segment. |
| remove_trackB | Remove a track segment from the board. |
| remove_tracks_in_rectA | Remove all tracks within a bounding box, optionally filtered by layer name. |
| get_tracks_by_netC | List tracks belonging to a specific net. |
| get_tracks_by_netclassA | List tracks belonging to all nets in a net class. |
| list_viasA | List vias on the board, optionally filtered by net name. |
| get_viaC | Get details of a specific via by its ID. |
| add_viaC | Add a via to the board. |
| update_via_sizeB | Update the diameter and/or drill size of a via. |
| update_via_netC | Update the net assigned to a via. |
| lock_viaC | Lock or unlock a via. |
| remove_viaC | Remove a via from the board. |
| list_zonesA | List zones on the board, optionally filtered by net and/or layer. |
| get_zoneC | Get details of a specific zone by its ID. |
| add_rect_copper_zoneC | Add a rectangular copper pour zone to the board. |
| add_polygon_copper_zoneC | Add a polygonal copper pour zone to the board. points_mm should be a list of dicts like [{"x_mm": 0, "y_mm": 0}, ...] |
| add_rect_rule_areaB | Add a keep-out / rule area zone (non-copper) to the board. |
| update_zone_netB | Change the net assigned to a copper zone. |
| update_zone_priorityC | Change the priority level of a zone. |
| update_zone_clearanceC | Update the clearance setting of a copper zone. |
| move_zoneB | Shift a zone by a relative delta (in millimeters). |
| lock_zoneC | Lock or unlock a zone. |
| remove_zoneC | Remove a zone from the board. |
| refill_zonesC | Trigger refilling of all zones on the board. |
| list_netsB | List nets on the board, optionally filtered by netclass name. |
| get_net_itemsC | Retrieve all board items associated with a specific net. |
| get_items_by_netclassC | Retrieve all board items associated with nets in a specific netclass. |
| get_netclass_for_netC | Retrieve netclass settings for a given net. |
| import_netlistC | Import a netlist file into the board. (Requires newer KiCad/kipy API). |
| list_textA | List free text and text box items on the board, optionally filtered by layer name. |
| get_text_itemA | Get details of a specific text or text box item by its ID. |
| add_textC | Add a free text object to the board. |
| add_text_boxC | Add a text box to the board. |
| update_text_valueC | Update the text value of a text or text box item. |
| update_text_positionB | Update the position of a text item (top-left for text boxes). |
| update_text_layerB | Update the layer of a text or text box item. |
| update_text_attributesB | Update text formatting attributes. |
| lock_textC | Lock or unlock a text or text box item. |
| remove_textC | Remove a text or text box item from the board. |
| expand_text_variablesB | Expand text variables in the given string based on board/project settings. |
| list_shapesA | List graphic shapes on the board, optionally filtered by layer name. |
| get_shapeB | Get details of a specific graphic shape by its ID. |
| add_segmentC | Add a straight graphic segment (line) to the board. |
| add_rectangleC | Add a graphic rectangle to the board. |
| add_circleB | Add a graphic circle to the board. |
| add_arcC | Add a graphic arc to the board. |
| add_polygonC | Add a graphic polygon to the board. points_mm should be a list like [{"x_mm": 0, "y_mm": 0}, ...] |
| move_shapeC | Move a shape by a relative offset (in millimeters). |
| rotate_shapeB | Rotate a shape by an angle around a center point (in degrees). |
| update_shape_layerC | Change the layer of a shape. |
| update_shape_widthC | Update the stroke line width of a shape. |
| lock_shapeC | Lock or unlock a shape. |
| remove_shapeB | Remove a shape from the board. |
| list_dimensionsA | List dimension annotations on the board, optionally filtered by layer name. |
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
- 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/brovk2008/Kicad-MCP-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server