mcp-kicad
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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": 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
- 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/daedalus/mcp-kicad'
If you have feedback or need assistance with the MCP directory API, please join our Discord server