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 |
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 |
|---|---|
| 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
- 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/brovk2008/Kicad-MCP-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server