pcb-mcp
Integrates with KiCad to read and modify PCB designs via KiCad's IPC API, providing tools for board state queries, footprint placement, track and via creation, DRC, and manufacturing file export.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pcb-mcp place a capacitor at (50, 30) on the top layer"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pcb-mcp
An MCP server that lets an AI assistant read and modify KiCAD PCB designs through KiCAD's IPC API.
Status
Pre-alpha. There is no working code yet. This is actively being built as a personal learning project and is not usable today. It is not installable.
Related MCP server: KiCad MCP Server
What it will do
The server exposes a small set of tools (20 or fewer) so an AI assistant can pick the right one reliably:
Query board state (layers, nets, footprints, tracks, zones)
Place and move footprints
Create tracks and vias
Run Design Rule Check (DRC)
Export manufacturing files (Gerbers, drill files, BOM)
Design decisions
Choice | Reason |
Python 3.11+ | Matches KiCAD plugin ecosystem, broad library support |
Official | Canonical implementation, stable as of 2026-07-28 |
| MIT-licensed, actively maintained, replaces deprecated SWIG |
KiCAD 10.0.x target | Current stable (10.0.5). IPC API first shipped in KiCAD 9 but matured in 10 |
PCB editor scope only | The IPC API has no schematic access today |
MIT license (out-of-process client) | No GPL entanglement because the server communicates over IPC, not linked to KiCAD |
Requirements
KiCAD 10.0.x installed and running with a board open. The IPC API needs a live GUI instance (headless mode is expected in KiCAD 11).
KiCAD API enabled in Preferences → API settings.
Python 3.11+
Only one IPC client can attach to a KiCAD instance at a time.
Development
This project follows a branch-and-pull-request workflow. The main branch is protected, and every change lands through a PR.
Detailed planning and research documents are kept locally and are not published in this repo. The README is the single source of project context for external readers.
License
MIT. See LICENSE.
Available Tools
14 toolscreate_trackADestructive
Creates a copper track (trace) on the board along a path of 2 or more points. The track is assigned to a specific net and placed on a specific copper layer. Points define the track path in millimeters; each consecutive pair of points becomes a straight track segment. The net must already exist on the board. This creates one undo step: Ctrl+Z reverts all segments created in this call. Use dry_run=true to preview the track geometry without creating it. WARNING: This modifies the board. Creating tracks on a nonexistent net will cause DRC violations.
Inputs: layer (required), net_name (required), width_mm (required), points_mm (required), +1 more. Returns: result
create_viaADestructive
Places a via (vertical connection between copper layers) at the specified position. The via is assigned to a net and connects the front and back copper layers. If diameter and drill size are not specified, board design rule defaults are used. This creates one undo step: Ctrl+Z removes the via. Use dry_run=true to preview the via placement without creating it. WARNING: This modifies the board. Place vias only where connectivity is needed.
Inputs: x_mm (required), y_mm (required), net_name (required), dry_run, +2 more. Returns: result
edit_footprintADestructive
Edits a footprint's properties: set a field value, change layer (flip the component to the other side), or lock/unlock it against accidental moves. Actions: 'set_field' sets a named field (requires field_name and field_value). 'set_layer' flips the component to the specified layer (requires layer). 'lock' prevents accidental moves in the GUI. 'unlock' allows moves again. This creates one undo step: Ctrl+Z reverts the edit. Use dry_run=true to preview the change without applying it. WARNING: set_layer flips the component, which may affect routing.
Inputs: action (required), reference (required), layer, dry_run, +2 more. Returns: result
get_board_infoARead-only
Returns high-level information about the currently open PCB board in KiCAD. Use this tool to get an overview of what board is loaded, including the filename, board dimensions in millimeters, copper layer count, and the number of footprints (components), tracks, vias, zones, and nets. This is typically the first tool to call when starting work on a board. Requires KiCAD to be running with a board open in the PCB editor.
Inputs: no named parameters. Returns: result
get_board_statsARead-only
Returns aggregate statistics about the PCB board: dimensions in millimeters, total routed track length in millimeters, via count, zone count, and the number of unrouted (unconnected) nets. Use this for a quick summary of the board's routing completeness. A board with zero unrouted nets is fully routed. Compare total track length across design iterations to track routing progress.
Inputs: no named parameters. Returns: result
get_design_rulesARead-only
Returns the board's design rules derived from the Default netclass: minimum clearance, minimum track width, minimum via drill diameter, and via pad diameter, all in millimeters. These constraints define the manufacturing limits for the PCB. On KiCAD 10.x, design rules are extracted from the project's Default netclass settings. Values shown as 'not configured' use KiCAD's internal defaults. Use this before creating tracks or vias to know valid minimum dimensions.
Inputs: no named parameters. Returns: result
get_footprintARead-only
Returns detailed information about a single footprint (component) by its reference designator. Includes position, rotation, layer, bounding box, custom fields (like Value and Footprint library name), and a full list of pads with their net names, positions in millimeters, and pad types (SMD, through-hole, NPTH, edge-connector). Use this when you need to understand a specific component's connectivity or physical dimensions. If the reference does not exist on the board, the error response lists all available reference designators you can use instead.
Inputs: reference (required). Returns: result
get_net_connectionsARead-only
Returns all footprint pads connected to a given net, showing which components are electrically linked through that net. For each connection, shows the footprint reference designator, pad number, and pad position in millimeters. This is useful for understanding the schematic connectivity as realized on the PCB, or for tracing signal paths between components. Results are capped at 50 entries for large nets like GND; a truncation note is appended if more exist. If the net name does not exist, the error response lists available nets.
Inputs: net_name (required). Returns: result
list_footprintsARead-only
Lists all footprints (components) on the PCB board with their positions, rotation angles, layers, and pad counts. Positions are in millimeters relative to the board origin. Y increases toward the bottom of the board (KiCAD convention). Optionally filter by layer name to see only components on a specific side. Valid layer values: F.Cu, B.Cu, In1.Cu, In2.Cu, F.SilkS, B.SilkS, Edge.Cuts. Use the returned reference designators (like U1, R1, C1) in follow-up tool calls that require a component reference.
Inputs: filter_layer. Returns: result
list_netsARead-only
Lists all electrical nets on the PCB board with the number of pads and track segments connected to each net. Nets represent electrical connections between component pads. Power nets like GND and VCC typically have high pad counts. Signal nets connect specific pins between a smaller number of components. Use the returned net names in follow-up calls to get_net_connections or list_tracks to explore specific connectivity.
Inputs: no named parameters. Returns: result
list_tracksARead-only
Lists all track segments (copper traces) on the PCB board. Each track shows start and end positions in millimeters, width in millimeters, the copper layer it is on, and the net it belongs to. Optionally filter by net name to see only traces carrying a specific signal, or by layer to see traces on a specific copper layer. Both filters can be combined. Results are capped at 50 entries for boards with many traces. Valid layer values: F.Cu, B.Cu, In1.Cu through In30.Cu.
Inputs: layer, net_name. Returns: result
list_zonesARead-only
Lists all copper zones on the PCB board with their net assignment, layer, bounding box in millimeters, and current fill status. Copper zones are typically used for ground planes or power distribution. A zone's net determines which pads it connects to when filled. The fill status indicates whether the zone has been computed (filled) or is still an outline only (unfilled). Unfilled zones do not actually connect to anything until a zone refill is run.
Inputs: no named parameters. Returns: result
manage_zoneADestructive
Creates, refills, or deletes a copper zone on the board. Actions: 'create' defines a new zone with a polygon outline on a net and layer. 'refill' recomputes fill for all zones (can be slow on complex boards). 'delete' removes a zone by its identifier from list_zones output. Zone creation requires at least 3 outline points forming a closed polygon. This creates one undo step per action: Ctrl+Z reverts it. Use dry_run=true to preview the action without applying it. WARNING: This modifies the board. Deleting a zone removes its copper fill.
Inputs: action (required), layer, dry_run, zone_id, +2 more. Returns: result
move_footprintADestructive
Moves a footprint (component) to a new position on the board and optionally changes its rotation angle. The footprint is identified by its reference designator (e.g. U1, R1, C1). Positions are in millimeters relative to the board origin. Y increases toward the bottom of the board (KiCAD convention). This creates one undo step: the user can press Ctrl+Z in KiCAD to revert the move. Use dry_run=true to preview the intended position change without actually moving the component. The preview shows current position, target position, and delta. WARNING: This modifies the board. Child pads follow the footprint automatically.
Inputs: x_mm (required), y_mm (required), reference (required), dry_run, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action: board info, footprints (list/get/move/edit), nets (list/get connections), tracks (list/create), zones (list/manage), vias (create), stats, and design rules. There is no overlap or ambiguity between tool purposes.
All tools follow a consistent verb_noun pattern in snake_case: list_zones, get_board_info, list_footprints, get_footprint, list_nets, get_net_connections, list_tracks, get_board_stats, get_design_rules, move_footprint, create_track, create_via, manage_zone, edit_footprint. The get_ vs list_ distinction is systematic.
14 tools is well within the ideal range for a PCB design server. Each tool serves a clear purpose without redundancy, covering board-level information, component/nets/tracks/zones/vias operations, and design rule queries. The count feels appropriately scoped for the domain.
The tool surface covers reading board data and performing basic edits (move/edit footprint, create track/via, manage zones), but lacks deletion for tracks and vias, and there is no tool to list or query individual vias. This leaves notable gaps for a full PCB editing workflow, though core inspection and simple modifications are supported.
Related MCP Connectors
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude to interact with KiCAD for PCB design automation, providing comprehensive tool schemas and real-time project state access.63 npm2MIT
- AlicenseCqualityDmaintenanceEnables LLMs to inspect, edit, analyze, and render PCB layouts in real-time using the KiCad IPC API, providing tools for board configuration, footprints, tracks, zones, nets, text, shapes, dimensions, exports, screenshots, and CLI automation.1001MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with KiCAD for PCB design automation. Users can design PCBs using natural language, including component placement, routing, checks, and export.63 npmMIT
- AlicenseBqualityCmaintenanceEnables AI assistants to interact with KiCAD for PCB design automation, including schematic editing, component placement, routing, DRC/ERC, and export.10027 npm2MIT