AI-assisted PCB design with KiCAD via Model Context Protocol
KiCAD MCP has 14 tools with complete JSON schemas and descriptions, but significant quality gaps limit production readiness. Naming is verb-forward (create_, open_, close_, save_) and mostly clear, but several tools have overlapping responsibilities (open_project vs open_board; save_project vs save_board vs save_as; close_project vs discard_or_reload). Descriptions average ~120 chars and explain WHAT but lack WHEN/WHY context for LLM selection. Parameter descriptions are present but sparse (avg 40 chars). Critical gaps: no output schemas documented, no error recovery guidance, no pagination for list operations, and destructive operations (close_project, discard_or_reload) lack confirmation patterns. Tool composition is poor, 7 of 14 tools manipulate board state with overlapping semantics, forcing LLMs to reason about subtle differences (force vs forceExternalChanges vs overwrite flags). Security: no secrets in params (good), but no permission gates or audit trail hints.
Closes the currently loaded project: optionally saves the board, then drops the in-memory board (SWIG and IPC) and clears all session state. Symmetric counterpart to open_project/create_project. Use this to release the project so the user or agent can edit project files directly without a later MCP save clobbering those changes.
Creates a new KiCAD project with PCB board file and optional project configuration. Automatically creates project directory and initializes board with default settings.
Discards the in-memory board and reloads it from disk.
Retrieves metadata and properties of the currently open project including name, paths, and board status.
Reports whether MCP knows the loaded board has unsaved memory changes or external disk changes.
Opens a specific .kicad_pcb file and refreshes MCP's in-memory board state.
set_board_origin has no visible input schema and minimal description ('Set Board Aux/Grid Origin'). Cannot determine parameter names, types, or constraints. Violates pattern:tool-description and pattern:constrained-input.
Seven tools (open_project, open_board, close_project, save_project, save_board, save_as, discard_or_reload) manipulate board/project state with overlapping semantics. LLMs cannot reliably distinguish when to use open_project vs open_board, or save_project vs save_board vs save_as. Violates pattern:tool (one responsibility per tool) and pattern:tool-chain (clear composition).
Destructive operations (close_project with save=false, discard_or_reload) lack confirmation or dry-run patterns. No guidance for LLM recovery if unsaved changes are lost. Violates pattern:confirmation-request and pattern:recovery-guide.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Opens an existing KiCAD project file (.kicad_pro or .kicad_pcb) and loads the board into memory for manipulation.
Reloads the current or specified .kicad_pcb from disk, discarding stale in-memory state.
Saves the loaded board to a new .kicad_pcb path.
Saves the loaded board with the external disk-change guard.
Saves the current board to disk. Can optionally save to a new location. If the board file's contents changed on disk since it was loaded (an external edit), the save is refused to avoid clobbering those changes unless force=true is passed.
Set Board Aux/Grid Origin
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.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., project_id, board_path). Violates pattern:tool (output schema required).
Parameter descriptions are sparse and lack actionable constraints. E.g., 'force' and 'forceExternalChanges' are both boolean flags with similar names but unclear semantics. No enum constraints, format specs, or range limits. Violates pattern:constrained-input and pattern:tool-description.