MCP server exposing KiCad PCB Editor functionality via IPC API
mcp-kicad has 26 well-named tools with consistent verb_noun patterns (connect_, check_, get_, list_, search_, create_). All tools have descriptions (avg ~120 chars, within baseline 34-392). Input schemas are present with type definitions for all parameters. However, output schemas are NOT documented, tool descriptions state what is returned (e.g., 'List of footprint objects') but the actual JSON structure is not formally specified. Parameter descriptions are adequate but lack constraints (enums, ranges, formats). Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear read/write distinction. Missing pagination support on list tools (list_footprints, list_nets, list_tracks, list_vias, list_pads, list_texts), no limit/offset/cursor parameters or total_count in responses.
Check if currently connected to KiCad. Returns connection status, KiCad version, and whether versions match.
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.
Create an arc on the board.
Create a circle on the board.
Create a new net on the board.
Create a rectangle on the board.
Create a text element on the board.
Output schemas not documented. Tool descriptions mention return types (e.g., 'List of footprint objects') but formal JSON Schema for responses is absent. LLMs cannot plan downstream tool calls or extract specific fields without knowing the response structure.
No pagination support on list tools. list_footprints, list_nets, list_tracks, list_vias, list_pads, list_texts lack limit/offset/cursor parameters and do not return total_count. Large boards could return thousands of items, exhausting context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Create a track segment on the board.
Create a via on the board.
Get board design rules and constraints.
Get board metadata (title, date, company, revision, comments).
Get detailed properties of a specific footprint by reference designator.
List all PCB layers with their properties.
Get detailed information about a specific net by name.
Get current project information.
Calculate the bounding box of a text string.
Get KiCad version and API version information.
List all footprints on the board.
List all netclasses on the board.
List all nets on the board.
List all pads across all footprints.
List all text elements on the board.
List all tracks on the board.
List all vias on the board.
List all zones (copper areas) on the board.
Search footprints by reference designator, value, or footprint name.
No tool annotations. All 26 tools lack readOnlyHint, destructiveHint, or idempotentHint. The server explicitly marks 18 tools as READ_ONLY and 8 as WRITE, but this metadata is not exposed in the MCP tool definitions, preventing clients from enforcing safety policies.
Parameter constraints missing. Numeric parameters (size, width, diameter, drill, rotation, line_width) lack min/max bounds. Layer and net parameters accept free-form strings with no enum constraints. LLMs may pass invalid values (negative widths, non-existent layers).
No error recovery guidance. Tools have no documented error cases, retryability, or recovery steps. If connect_kicad fails (socket not found, timeout), the LLM has no guidance on what to do next.