mcp-kicad
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| connect_kicadA | Connect to a running KiCad instance via the IPC API. This must be called before any other operations. Ensure KiCad is running with the API server enabled in Preferences > Plugins. |
| check_connectionA | Check if currently connected to KiCad. Returns connection status, KiCad version, and whether versions match. Returns: Dictionary with connection status and version info. Example: >>> check_connection() {"connected": True, "version": "9.0.1", "version_match": True} |
| get_board_infoB | Get board metadata (title, date, company, revision, comments). Returns: Dictionary with board metadata fields. Example: >>> get_board_info() {"title": "My PCB", "date": "2025-01-01", "company": "", "revision": "1.0"} |
| get_layersA | List all PCB layers with their properties. Returns: List of layer objects with id, name, type, visible, enabled. Example: >>> get_layers() [{"id": 0, "name": "Copper", "type": "signal", "visible": True, "enabled": True}] |
| get_board_design_settingsA | Get board design rules and constraints. Returns: Dictionary with design settings (track widths, clearances, via specs). Example: >>> get_board_design_settings() {"track_width": 0.2, "via_diameter": 0.6, "via_drill": 0.3} |
| list_footprintsA | List all footprints on the board. Returns: List of footprint objects with reference, value, footprint type, position. Example: >>> list_footprints() [{"reference": "U1", "value": "ATmega328P", "footprint": "Package:DIP-8", ...}] |
| get_footprintA | Get detailed properties of a specific footprint by reference designator. |
| search_footprintsB | Search footprints by reference designator, value, or footprint name. |
| list_netsA | List all nets on the board. Returns: List of net objects with name, code, and netclass. Example: >>> list_nets() [{"name": "GND", "code": 0, "netclass": "Default"}, {"name": "VCC", ...}] |
| get_netA | Get detailed information about a specific net by name. |
| list_netclassesA | List all netclasses on the board. Returns: List of netclass objects with name and properties. Example: >>> list_netclasses() [{"name": "Default", "clearance": 0.2, "track_width": 0.25, ...}] |
| list_zonesA | List all zones (copper areas) on the board. Returns: List of zone objects with name, net, layer, fill mode, priority. Example: >>> list_zones() [{"name": "GND", "net": "GND", "layer": "Copper", "priority": 0}] |
| list_tracksA | List all tracks on the board. Returns: List of track objects with start/end positions, layer, net, width. Example: >>> list_tracks() [{"start": {"x": 0, "y": 0}, "end": {"x": 100, "y": 0}, "net": "VCC", ...}] |
| list_viasA | List all vias on the board. Returns: List of via objects with position, diameter, drill, net, layers. Example: >>> list_vias() [{"position": {"x": 100, "y": 50}, "diameter": 0.6, "drill": 0.3, "net": "GND"}] |
| list_padsA | List all pads across all footprints. Returns: List of pad objects with footprint reference, number, net, position, size. Example: >>> list_pads() [{"footprint": "U1", "number": "1", "net": "VCC", "position": {"x": 0, "y": 0}, ...}] |
| list_textsA | List all text elements on the board. Returns: List of text objects with content, type, layer, position, size. Example: >>> list_texts() [{"text": "PCB Title", "type": "PCB_TEXT", "layer": "Silkscreen", ...}] |
| get_text_extentsA | Calculate the bounding box of a text string. |
| get_versionA | Get KiCad version and API version information. Returns: Dictionary with version strings and version match status. Example: >>> get_version() {"version": "9.0.1", "api_version": "9.0", "version_match": True} |
| get_projectA | Get current project information. Returns: Dictionary with project name and path. Example: >>> get_project() {"name": "my_design", "path": "/path/to/my_design.pro"} |
| create_netC | Create a new net on the board. |
| create_trackC | Create a track segment on the board. |
| create_viaC | Create a via on the board. |
| create_textC | Create a text element on the board. |
| create_circleC | Create a circle on the board. |
| create_rectangleC | Create a rectangle on the board. |
| create_arcC | Create an arc on the board. |
| create_lineC | Create a line segment on the board. |
| move_itemC | Move an item to a new position. |
| rotate_itemC | Rotate an item. |
| delete_itemC | Delete an item from the board. |
| create_zoneC | Create a copper zone on the board. |
| save_boardC | Save the board to a file. |
| move_footprintC | Move a footprint to a new position by reference. |
| rotate_footprintC | Rotate a footprint by reference. |
| create_footprintD | Place a footprint on the board. |
| add_to_selectionC | Add an item to the selection. |
| clear_selectionA | Clear the current selection. |
| get_selectionA | Get the current selection. |
| set_active_layerC | Set the active layer. |
| refill_zonesB | Refill all zones on the board. |
| get_item_by_idC | Get item details by ID. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| board_resource | Get current board state as a resource. |
| layers_resource | Get board layers as a resource. |
| nets_resource | Get board nets as a resource. |
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/daedalus/mcp-kicad'
If you have feedback or need assistance with the MCP directory API, please join our Discord server