AI-powered PCB and schematic design with KiCad. Works with Claude, Cursor, VS Code, Claude Code, and any MCP-compatible client.
Primary CI/CD and release automation runs in Azure DevOps. GitHub Actions in this repository are manual fallback workflows only.
kicad_set_project(), recent project discovery, and safe path handling.project_set_design_intent() and project_get_design_intent() for connector, decoupling, power-tree, analog/digital partitioning, sensor clustering, RF, and fab assumptions.export_manufacturing_package().full, minimal, schematic_only, pcb_only, manufacturing, high_speed, power, simulation, analysis) to reduce tool surface for clients. Legacy pcb and schematic aliases remain available.Option 1: uvx (recommended)
uvx kicad-mcp-pro
Option 2: pip
pip install kicad-mcp-pro
kicad-mcp-pro
Option 3: uv
uv tool install kicad-mcp-pro
Add this to .vscode/mcp.json:
{
"servers": {
"kicad": {
"type": "stdio",
"command": "uvx",
"args": ["kicad-mcp-pro"],
"env": {
"KICAD_MCP_PROJECT_DIR": "/absolute/path/to/your/kicad-project",
"KICAD_MCP_PROFILE": "pcb_only"
}
}
}
}
Note: ${workspaceFolder} may not be expanded in some VS Code MCP setups. Use an
absolute path for KICAD_MCP_PROJECT_DIR to avoid startup errors.
Add this to ~/.codex/config.toml (or project-scoped .codex/config.toml):
[mcp_servers.kicad]
command = "uvx"
args = ["kicad-mcp-pro"]
startup_timeout_sec = 20
tool_timeout_sec = 120
[mcp_servers.kicad.env]
KICAD_MCP_PROJECT_DIR = "/absolute/path/to/your/kicad-project"
KICAD_MCP_PROFILE = "pcb_only"
Add this to your Claude Desktop config:
{
"mcpServers": {
"kicad": {
"command": "uvx",
"args": ["kicad-mcp-pro"],
"env": {
"KICAD_MCP_PROJECT_DIR": "/path/to/your/project"
}
}
}
}
Use .vscode/mcp.json with the same server shape shown above, and keep
KICAD_MCP_PROJECT_DIR as an absolute path.
Add a custom MCP server using uvx as the command and kicad-mcp-pro as the only argument. For remote-style usage, run kicad-mcp-pro --transport http and connect to http://127.0.0.1:3334/mcp.
Launch the server with uvx kicad-mcp-pro, then attach it from your MCP config. The minimal profile is a good default when you mainly want read/export workflows, while pcb_only and analysis are good focused options for board-heavy sessions.
Copy-ready configuration examples for VS Code, GitHub Copilot in VS Code, Codex, Claude Desktop, Claude Code, Cursor, Gemini CLI, Antigravity-compatible clients, and HTTP transports are available in Client Configuration.
http extra: pip install "kicad-mcp-pro[http]".freerouting extra:
pip install "kicad-mcp-pro[freerouting]".simulation extra:
pip install "kicad-mcp-pro[simulation]".vcs extra:
pip install "kicad-mcp-pro[vcs]".kicad-cli-backed export and validation tools require a KiCad installation inside the
container, typically mounted at /usr/bin/kicad-cli, or KICAD_MCP_KICAD_CLI pointed to a
valid binary./tmp/kicad-mcp-output. For edit/write workflows, change the project volume to rw
intentionally and keep remote HTTP deployments behind trusted authentication and origin checks.| Variable | Description | Default |
|---|---|---|
KICAD_MCP_KICAD_CLI |
Path to kicad-cli |
Auto-detected |
KICAD_MCP_NGSPICE_CLI |
Path to ngspice |
Auto-detected |
KICAD_MCP_KICAD_SOCKET_PATH |
Optional KiCad IPC socket path | Unset |
KICAD_MCP_KICAD_TOKEN |
Optional KiCad IPC token | Unset |
KICAD_MCP_PROJECT_DIR |
Active project directory | Unset |
KICAD_MCP_PROJECT_FILE |
Explicit .kicad_pro file |
Auto-detected |
KICAD_MCP_PCB_FILE |
Explicit .kicad_pcb file |
Auto-detected |
KICAD_MCP_SCH_FILE |
Explicit .kicad_sch file |
Auto-detected |
KICAD_MCP_OUTPUT_DIR |
Export output directory | <project>/output |
KICAD_MCP_SYMBOL_LIBRARY_DIR |
KiCad symbol library root | Auto-detected |
KICAD_MCP_FOOTPRINT_LIBRARY_DIR |
KiCad footprint library root | Auto-detected |
KICAD_MCP_TRANSPORT |
stdio, http, sse, or streamable-http |
stdio |
KICAD_MCP_HOST |
HTTP bind host | 127.0.0.1 |
KICAD_MCP_PORT |
HTTP bind port | 3334 |
KICAD_MCP_MOUNT_PATH |
MCP HTTP mount path | /mcp |
KICAD_MCP_PROFILE |
Tool profile | full |
KICAD_MCP_LOG_LEVEL |
Log level | INFO |
KICAD_MCP_LOG_FORMAT |
console or json |
console |
KICAD_MCP_ENABLE_EXPERIMENTAL_TOOLS |
Enable unstable helpers | false |
KICAD_MCP_IPC_CONNECTION_TIMEOUT |
KiCad IPC timeout in seconds | 10.0 |
KICAD_MCP_CLI_TIMEOUT |
kicad-cli timeout in seconds |
120.0 |
KICAD_MCP_MAX_ITEMS_PER_RESPONSE |
Max list items returned | 200 |
KICAD_MCP_MAX_TEXT_RESPONSE_CHARS |
Max text payload length | 50000 |
Preferred profile names are full, minimal, schematic_only, pcb_only,
manufacturing, high_speed, power, simulation, and analysis. Legacy
aliases pcb and schematic still work for older clients.
kicad_set_projectkicad_get_project_infokicad_list_recent_projectskicad_scan_directorykicad_create_new_projectkicad_get_versionkicad_list_tool_categorieskicad_get_tools_in_categorykicad_helpproject_set_design_intentproject_get_design_intentpcb_get_board_summarypcb_get_tracks (page, page_size, filter_layer, filter_net)pcb_get_viaspcb_get_footprints (page, page_size, filter_layer)pcb_get_netspcb_get_zonespcb_get_shapespcb_get_padspcb_get_layerspcb_get_stackuppcb_get_selectionpcb_get_board_as_stringpcb_get_ratsnestpcb_get_design_rulespcb_get_impedance_for_tracepcb_check_creepage_clearancepcb_add_trackpcb_add_tracks_bulkpcb_add_viapcb_add_segmentpcb_add_circlepcb_add_rectanglepcb_add_textpcb_set_board_outlinepcb_set_stackuppcb_add_blind_viapcb_add_microviapcb_auto_place_by_schematicpcb_place_decoupling_capspcb_group_by_functionpcb_align_footprintspcb_set_keepout_zonepcb_add_mounting_holespcb_add_fiducial_markspcb_add_teardropspcb_delete_itemspcb_savepcb_refill_zonespcb_highlight_netpcb_set_net_classpcb_move_footprintpcb_set_footprint_layerpcb_sync_from_schematicsch_get_symbolssch_get_wiressch_get_labelssch_get_net_namessch_create_sheetsch_list_sheetssch_get_sheet_infosch_add_symbolsch_add_wiresch_add_labelsch_add_global_labelsch_add_hierarchical_labelsch_add_power_symbolsch_add_bussch_add_bus_wire_entrysch_add_no_connectsch_update_propertiessch_build_circuitsch_get_pin_positionssch_route_wire_between_pinssch_get_connectivity_graphsch_trace_netsch_auto_place_symbolssch_check_power_flagssch_annotatesch_reloadsch_build_circuit can accept auto_layout=true for a readable grid placement. When a
nets list is also provided, it performs a lightweight connection-aware layout, creates
missing power symbols or labels for named nets, and generates Manhattan wire segments
from symbol pins. This is a deterministic helper, not a full KiCad-quality autorouter.
Multi-unit symbols such as dual op-amps can be placed and inspected with unit=<n>.
The MCP now validates requested units against the KiCad library and reports available
units instead of silently falling back to unit 1.
pcb_sync_from_schematic closes the first-board gap by reading schematic footprint
assignments and writing missing footprint instances into the .kicad_pcb file. It is
intended for initial board bring-up and footprint sync, not for full autorouting.
It preserves existing footprints by default, can replace wrong footprint names in place
with replace_mismatched=true, and performs a lightweight overlap-avoidance pass for
newly added footprints.
v2 also adds board bring-up helpers on top of that sync path. pcb_auto_place_by_schematic
can lay out the first board in cluster, linear, or star mode, while
pcb_group_by_function, pcb_align_footprints, and pcb_place_decoupling_caps
help refine the initial placement without opening the PCB editor. pcb_add_mounting_holes
and pcb_add_fiducial_marks append simple manufacturing footprints, pcb_set_keepout_zone
creates a real rule-area keepout on the active board, and pcb_add_teardrops adds
small copper helper zones at basic pad-to-track junctions when the board is open over IPC.
For multilayer bring-up, pcb_set_stackup stores a file-backed stackup profile and updates
the board setup block so later tools can reuse the same dielectric assumptions.
pcb_get_impedance_for_trace reads that active stackup and estimates impedance for a given
trace width on a selected copper layer, while pcb_check_creepage_clearance performs a
heuristic pad-to-pad creepage review against voltage, pollution degree, and material group.
pcb_add_blind_via and pcb_add_microvia use KiCad IPC to create layer-pair vias with
explicit start and end copper layers.
lib_list_librarieslib_search_symbolslib_get_symbol_infolib_search_footprintslib_list_footprintslib_rebuild_indexlib_get_footprint_infolib_get_footprint_3d_modellib_assign_footprintlib_create_custom_symbollib_search_componentslib_get_component_detailslib_assign_lcsc_to_symbollib_get_bom_with_pricinglib_check_stock_availabilitylib_find_alternative_partslib_get_datasheet_urlLive component search now defaults to the zero-auth jlcsearch source. nexar
and digikey remain available as authenticated source options for deployments
that provide the required credentials.
run_drcrun_ercschematic_quality_gateschematic_connectivity_gatevalidate_designpcb_quality_gatepcb_placement_quality_gatepcb_score_placementmanufacturing_quality_gateproject_quality_gatecheck_design_for_manufactureget_unconnected_netsget_courtyard_violationsget_silk_to_pad_violationsvalidate_footprints_vs_schematicexport_gerberexport_drillexport_bomexport_netlistexport_spice_netlistexport_pcb_pdfexport_sch_pdfexport_3d_stepexport_stepexport_3d_renderexport_pick_and_placeexport_ipc2581export_svgexport_dxfget_board_statsexport_manufacturing_packageexport_manufacturing_package is now a release-only helper. It first runs the full
project_quality_gate() and hard-blocks the package when the design is still FAIL
or BLOCKED. pcb_transfer_quality_gate() is part of that release contract, so
schematic pad nets must transfer cleanly onto PCB pads before the gated release
handoff is allowed. Use the low-level export tools for debugging or interchange
artifacts while iterating; they do not enforce project_quality_gate(). The
manufacturing profile keeps its export surface narrow around get_board_stats() and
export_manufacturing_package(), while broader profiles such as full and minimal
continue to expose the direct export_*() tools.
pcb_placement_quality_gate() is the blocking geometry/context gate. pcb_score_placement()
adds softer density and spread heuristics so an agent can improve layout quality before a
hard failure happens. Placement scoring is now intent-aware for connector edge usage,
decoupling proximity, RF keepouts, power-tree locality, analog/digital separation, and
sensor clustering.
dfm_load_manufacturer_profiledfm_run_manufacturer_checkdfm_calculate_manufacturing_costDFM profiles are now bundled with the server for quick fabrication review. The
first v2 profile set includes JLCPCB (standard, advanced), PCBWay
(standard), and OSH Park (2layer). dfm_load_manufacturer_profile
stores the active selection in the project output directory so later DFM checks
can reuse the same fabricator assumptions.
route_single_trackroute_from_pad_to_padroute_export_dsnroute_import_sesroute_autoroute_freeroutingroute_set_net_class_rulesroute_differential_pairroute_tune_lengthtune_track_length (deprecated alias)tune_diff_pair_lengthRouting helpers now cover three layers:
.dsn / .ses filesImportant limitation: KiCad 10 still does not expose a stable headless Specctra
export/import flow through kicad-cli on all installations. route_export_dsn
and route_import_ses therefore support staging existing .dsn / .ses files
and explain the remaining manual KiCad PCB Editor step when needed.
sim_run_operating_pointsim_run_ac_analysissim_run_transientsim_run_dc_sweepsim_check_stabilitysim_add_spice_directiveSimulation tools prefer InSpice when the simulation extra is installed and
fall back to direct ngspice CLI execution when needed. sim_add_spice_directive
stores a project-local sidecar file used by future MCP simulation runs, which is
useful for reusable .param, .include, or .options lines.
si_calculate_trace_impedancesi_calculate_trace_width_for_impedancesi_check_differential_pair_skewsi_validate_length_matchingsi_generate_stackupsi_check_via_stubsi_calculate_decoupling_placementThese helpers provide fast board-level estimates for routing and review. They are intended for engineering triage and pre-layout guidance, then should be verified against your fabricator stackup and final KiCad rule setup before tape-out.
pdn_calculate_voltage_droppdn_recommend_decoupling_capspdn_check_copper_weightpdn_generate_power_planethermal_calculate_via_countthermal_check_copper_pourThese tools focus on quick PDN sanity checks: whether a rail looks too resistive, whether routed copper is undersized, whether a local plane exists, and how much thermal stitching is likely needed around hotter regions.
emc_check_ground_plane_voidsemc_check_return_path_continuityemc_check_split_plane_crossingemc_check_decoupling_placementemc_check_via_stitchingemc_check_differential_pair_symmetryemc_check_high_speed_routing_rulesemc_run_full_complianceThese EMC helpers use board-state heuristics so an agent can quickly flag likely return-path, stitching, plane, and decoupling problems before a manual SI/EMI review.
vcs_init_gitvcs_commit_checkpointvcs_list_checkpointsvcs_restore_checkpointvcs_diff_with_checkpointThese tools scope Git actions to the active KiCad project directory, add local identity defaults when needed, and protect restores by stashing dirty project state before rolling files back to a checkpoint commit.
The built-in MCP prompt set now also includes:
design_review_loopfix_blocking_issuesmanufacturing_release_checklistThe resource surface now exposes:
kicad://project/quality_gatekicad://project/fix_queuekicad://schematic/connectivitykicad://board/placement_qualityFor regression coverage, the repository also ships a benchmark and failure corpus under
tests/fixtures/benchmark_projects/. These fixtures are used to prove that clean projects
can reach release export while known-bad projects stay hard-blocked. The corpus includes
label-only schematic failures, overlap/DFM failures, bad decoupling placement, wide sensor
clusters, dirty PCB transfer cases, and SismoSmart-style hierarchy/connectivity regressions.
See CONTRIBUTING.md and the development docs in docs/development.
Released under the MIT License.