AI-assisted PCB design with KiCAD via Model Context Protocol
Server has 17 tools with schemas and descriptions present, but quality is inconsistent. Naming follows verb_noun convention (create_project, get_board_info, etc.), which is good. However, descriptions vary widely in quality, some are detailed (snapshot_project: 280+ chars), others are generic (get_layer_list: 67 chars). Parameter descriptions are present but often lack constraints (e.g., 'width' and 'height' in add_board_outline lack units clarity in schema, only in description). Output schemas are not documented, tools return unspecified structures. Error handling is absent from all tool definitions. Tools 14-17 (list_tool_categories, get_category_tools, execute_tool, search_tools) appear to be meta-tools for routing other tools, which is unusual and suggests incomplete abstraction. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Overall, definitions are functional but lack production-grade polish.
Adds a board outline shape (rectangle, rounded_rectangle, circle, or polygon) on the Edge.Cuts layer. By default the board top-left corner is placed at (0, 0) so all coordinates are positive. Use x/y to set a different top-left corner position.
Adds a new custom layer to the board stack (e.g., User.1, User.Comments).
Creates a new KiCAD project with PCB board file and optional project configuration. Automatically creates project directory and initializes board with default settings.
Executes a routed tool by name with the provided parameters.
Generates a 2D visual representation of the current board state as a PNG image.
Returns the bounding box extents of the PCB board.
No output schemas documented for any tool. LLMs cannot predict return structure, forcing them to guess at field names and types for downstream tool calls. This breaks tool chaining and increases hallucination risk.
No error handling guidance in any tool definition. Tools do not specify what errors are retryable, what user input is needed, or what the LLM should do on failure. Agents will be stuck on errors.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2025-06-18+ | v2 |
Retrieves comprehensive board information including dimensions, layer count, component count, and design rules.
Returns the list of tools available in a specific category.
Returns a list of all layers in the board with their properties.
Retrieves metadata and properties of the currently open project including name, paths, and board status.
Lists all available tool categories and provides statistics on routed and direct tools.
Opens an existing KiCAD project file (.kicad_pro or .kicad_pcb) and loads the board into memory for manipulation.
Saves the current board to disk. Can optionally save to a new location.
Searches for tools matching a query term across all categories.
Sets the currently active layer for drawing operations.
Sets the PCB board dimensions. The board outline must be added separately using add_board_outline.
Copies the entire project folder to a new timestamped snapshot directory so you can resume from this checkpoint later without redoing earlier steps. Call this after every successfully completed design step (e.g. after Step 1 schematic, after Step 2 PCB layout) before asking for user confirmation to proceed.
Tools 14-17 (list_tool_categories, get_category_tools, execute_tool, search_tools) are meta-routing tools that expose internal tool discovery and execution. This is unusual and suggests the actual KiCAD tools are hidden behind a routing layer. If these are the only way to invoke KiCAD operations, the abstraction is leaky and forces agents to discover tools at runtime rather than having them pre-registered.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. LLMs cannot distinguish safe read operations from destructive writes without explicit hints. This increases risk of unintended side effects.
Parameter descriptions lack constraint details. E.g., 'width' and 'height' in add_board_outline are documented as 'Width in mm' and 'Height in mm' in description, but the schema only shows minimum:1 with no maximum. Numeric parameters need explicit bounds (e.g., 'width in mm, 1 - 500').