Skip to main content
Glama

KiCad MCP Pro Server

PyPI License: MIT Smithery Python 3.12+ KiCad 10 KiCad Studio Downloads MCP 1.6+

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.

Features

  • Project-first workflow with kicad_set_project(), recent project discovery, and safe path handling.

  • Project intent helpers with project_set_design_intent() and project_get_design_intent() for connector, decoupling, power-tree, analog/digital partitioning, sensor clustering, RF, and fab assumptions.

  • KiCad 10.x-first runtime with best-effort 9.x support and cross-platform CLI/library discovery.

  • PCB tools for board inspection, tracks, vias, footprints, text, shapes, outline editing, and zone refill.

  • Schematic tools for symbols, wires, labels, buses, no-connect markers, property updates, annotation, netlist-aware auto-layout, and IPC reload.

  • Library tools for symbol search, footprint search, datasheet lookup, footprint assignment, and custom symbol generation.

  • Validation tools for DRC, ERC, DFM, courtyard issues, silk overlaps, and schematic-versus-PCB footprint checks.

  • Project quality gates for schematic, schematic connectivity, PCB, placement, PCB transfer, manufacturing, and gated manufacturing handoff via export_manufacturing_package().

  • Export tools for Gerber, drill, BOM, PDF, netlist, STEP, render, pick-and-place, IPC-2581, SVG, and DXF.

  • Signal integrity tools for impedance synthesis, differential skew checks, stackup planning, via-stub review, and decoupling heuristics.

  • Power integrity tools for voltage-drop estimation, copper current checks, plane generation, and thermal via guidance.

  • EMC tools for plane coverage, return-path review, via stitching, diff-pair symmetry, and bundled compliance sweeps.

  • Simulation tools for SPICE operating-point, AC, transient, DC sweep, and loop-stability checks.

  • MCP resources for live board/project state, quality gates, fix queues, connectivity, and placement review.

  • Prompt workflows for first-board, schematic-to-PCB, manufacturing release, design review loops, and critic/fixer iterations.

  • Server profiles (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.

Related MCP server: KiCAD MCP Server

KiCad 10 Feature Matrix

Feature area

KiCad 9.x

KiCad 10.x

Core PCB + schematic inspection

Yes

Yes

Manufacturing exports

Yes

Yes

Variant sidecar tools (variant_*)

Best effort

Yes

Graphical DRC rule editing (drc_rule_*)

Best effort

Yes

Time-domain routing helpers (route_tune_time_domain)

Fallback-to-length

Yes

3D PDF export (pcb_export_3d_pdf)

No

Yes

Inner-layer footprint graphics

Limited

Yes

Design blocks + barcode helpers

Sidecar/file-based

Yes

Demo

Comparison

Capability

kicad-mcp-pro

Generic KiCad scripts

Raw kicad-cli

MCP tools/resources/prompts

Yes

No

No

Project quality gates

Yes

Rare

No

KiCad Studio local bridge

Yes

No

No

Variant-aware workflows

Yes

Rare

No

Streamable HTTP transport

Yes

Rare

No

DRC/DFM/manufacturing bundle

Yes

Partial

Partial

KiCad Studio Integration

kicad-mcp-pro can run as a local HTTP bridge for the TypeScript-based kicad-studio extension. The bridge now supports:

  • studio_push_context() for active file, DRC errors, selected net/reference, and cursor state.

  • kicad://studio/context as a resource that agents can read directly.

  • KICAD_MCP_STUDIO_WATCH_DIR for auto-project detection when .kicad_pro files change.

  • /.well-known/mcp-server discovery plus bearer-token auth and CORS configuration for local-only deployments.

For Studio deployments, 27185 is a good dedicated local bridge port by convention. The server default remains 3334, so either set KICAD_MCP_PORT=27185 explicitly or keep the default and point the Studio client at that port.

CI/CD

Azure DevOps is the canonical CI/CD system for this repository. The pipeline definition lives in azure-pipelines.yml and covers linting, mypy, pytest, coverage, package builds, and optional manual publishing to TestPyPI or PyPI from Azure-managed secrets.

GitHub Actions stays in the repository only as a manual fallback surface:

  • .github/workflows/ci.yml

  • .github/workflows/security.yml

  • .github/workflows/publish.yml

None of those workflows are intended to be the primary automated path. If GitHub-hosted automation is unavailable, queue the Azure pipeline instead and keep GitHub releases/workflows manual.

Quick Start

Installation

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

VS Code Configuration

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.

Codex Configuration

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"

Claude Desktop Configuration

Add this to your Claude Desktop config:

{
  "mcpServers": {
    "kicad": {
      "command": "uvx",
      "args": ["kicad-mcp-pro"],
      "env": {
        "KICAD_MCP_PROJECT_DIR": "/path/to/your/project"
      }
    }
  }
}

VS Code / Cline

Use .vscode/mcp.json with the same server shape shown above, and keep KICAD_MCP_PROJECT_DIR as an absolute path.

Cursor

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. If you want Cursor and KiCad Studio to share the same local bridge convention, set KICAD_MCP_PORT=27185 and connect to http://127.0.0.1:27185/mcp instead.

Claude Code

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.

More Clients

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.

Prerequisites

  • KiCad 9.0 or 10.0+ installed.

  • Python 3.12+.

  • For live IPC tools, KiCad must be running with the IPC API available.

  • For HTTP transport, install the http extra: pip install "kicad-mcp-pro[http]".

  • For FreeRouting orchestration helpers, install the freerouting extra: pip install "kicad-mcp-pro[freerouting]".

  • For SPICE simulation tools, install the simulation extra: pip install "kicad-mcp-pro[simulation]".

  • For Git checkpoint tools, install the vcs extra: pip install "kicad-mcp-pro[vcs]".

Docker Limitations

  • The published container image does not bundle a KiCad installation.

  • 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.

  • The default Compose setup mounts the project read-only and writes exports to /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.

  • Live IPC tools still require a reachable KiCad session with the IPC API enabled.

Configuration

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.

Tool Reference

Project Management

  • kicad_set_project

  • kicad_get_project_info

  • kicad_list_recent_projects

  • kicad_scan_directory

  • kicad_create_new_project

  • kicad_get_version

  • kicad_list_tool_categories

  • kicad_get_tools_in_category

  • kicad_help

  • project_set_design_intent

  • project_get_design_intent

PCB

  • pcb_get_board_summary

  • pcb_get_tracks (page, page_size, filter_layer, filter_net)

  • pcb_get_vias

  • pcb_get_footprints (page, page_size, filter_layer)

  • pcb_get_nets

  • pcb_get_zones

  • pcb_get_shapes

  • pcb_get_pads

  • pcb_get_layers

  • pcb_get_stackup

  • pcb_get_selection

  • pcb_get_board_as_string

  • pcb_get_ratsnest

  • pcb_get_design_rules

  • pcb_get_impedance_for_trace

  • pcb_check_creepage_clearance

  • pcb_add_track

  • pcb_add_tracks_bulk

  • pcb_add_via

  • pcb_add_segment

  • pcb_add_circle

  • pcb_add_rectangle

  • pcb_add_text

  • pcb_set_board_outline

  • pcb_set_stackup

  • pcb_add_blind_via

  • pcb_add_microvia

  • pcb_auto_place_by_schematic

  • pcb_place_decoupling_caps

  • pcb_group_by_function

  • pcb_align_footprints

  • pcb_set_keepout_zone

  • pcb_add_mounting_holes

  • pcb_add_fiducial_marks

  • pcb_add_teardrops

  • pcb_delete_items

  • pcb_save

  • pcb_refill_zones

  • pcb_highlight_net

  • pcb_set_net_class

  • pcb_move_footprint

  • pcb_set_footprint_layer

  • pcb_sync_from_schematic

Schematic

  • sch_get_symbols

  • sch_get_wires

  • sch_get_labels

  • sch_get_net_names

  • sch_create_sheet

  • sch_list_sheets

  • sch_get_sheet_info

  • sch_add_symbol

  • sch_add_wire

  • sch_add_label

  • sch_add_global_label

  • sch_add_hierarchical_label

  • sch_add_power_symbol

  • sch_add_bus

  • sch_add_bus_wire_entry

  • sch_add_no_connect

  • sch_update_properties

  • sch_build_circuit

  • sch_get_pin_positions

  • sch_route_wire_between_pins

  • sch_get_connectivity_graph

  • sch_trace_net

  • sch_auto_place_symbols

  • sch_check_power_flags

  • sch_annotate

  • sch_reload

sch_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.

Library

  • lib_list_libraries

  • lib_search_symbols

  • lib_get_symbol_info

  • lib_search_footprints

  • lib_list_footprints

  • lib_rebuild_index

  • lib_get_footprint_info

  • lib_get_footprint_3d_model

  • lib_assign_footprint

  • lib_create_custom_symbol

  • lib_search_components

  • lib_get_component_details

  • lib_assign_lcsc_to_symbol

  • lib_get_bom_with_pricing

  • lib_check_stock_availability

  • lib_find_alternative_parts

  • lib_get_datasheet_url

Live 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.

Export And Validation

  • run_drc

  • run_erc

  • schematic_quality_gate

  • schematic_connectivity_gate

  • validate_design

  • pcb_quality_gate

  • pcb_placement_quality_gate

  • pcb_score_placement

  • manufacturing_quality_gate

  • project_quality_gate

  • check_design_for_manufacture

  • get_unconnected_nets

  • get_courtyard_violations

  • get_silk_to_pad_violations

  • validate_footprints_vs_schematic

  • export_gerber

  • export_drill

  • export_bom

  • export_netlist

  • export_spice_netlist

  • export_pcb_pdf

  • export_sch_pdf

  • export_3d_step

  • export_step

  • export_3d_render

  • export_pick_and_place

  • export_ipc2581

  • export_svg

  • export_dxf

  • get_board_stats

  • export_manufacturing_package

export_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

  • dfm_load_manufacturer_profile

  • dfm_run_manufacturer_check

  • dfm_calculate_manufacturing_cost

DFM 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.

Routing

  • route_single_track

  • route_from_pad_to_pad

  • route_export_dsn

  • route_import_ses

  • route_autoroute_freerouting

  • route_set_net_class_rules

  • route_differential_pair

  • route_tune_length

  • tune_track_length (deprecated alias)

  • tune_diff_pair_length

Routing helpers now cover three layers:

  • direct IPC routing for simple single-track and pad-to-pad paths

  • rule-file authoring for net class, differential pair, and length-tuning constraints

  • FreeRouting orchestration around Specctra .dsn / .ses files

Important 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.

Simulation

  • sim_run_operating_point

  • sim_run_ac_analysis

  • sim_run_transient

  • sim_run_dc_sweep

  • sim_check_stability

  • sim_add_spice_directive

Simulation tools use direct ngspice CLI execution by default and can still use InSpice when it is installed manually in the runtime environment. The sim_add_spice_directive tool stores a project-local sidecar file used by future MCP simulation runs, which is useful for reusable .param, .include, or .options lines.

Signal Integrity

  • si_calculate_trace_impedance

  • si_calculate_trace_width_for_impedance

  • si_check_differential_pair_skew

  • si_validate_length_matching

  • si_generate_stackup

  • si_check_via_stub

  • si_calculate_decoupling_placement

These 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.

Power Integrity

  • pdn_calculate_voltage_drop

  • pdn_recommend_decoupling_caps

  • pdn_check_copper_weight

  • pdn_generate_power_plane

  • thermal_calculate_via_count

  • thermal_check_copper_pour

These 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

  • emc_check_ground_plane_voids

  • emc_check_return_path_continuity

  • emc_check_split_plane_crossing

  • emc_check_decoupling_placement

  • emc_check_via_stitching

  • emc_check_differential_pair_symmetry

  • emc_check_high_speed_routing_rules

  • emc_run_full_compliance

These 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.

Version Control

  • vcs_init_git

  • vcs_commit_checkpoint

  • vcs_list_checkpoints

  • vcs_restore_checkpoint

  • vcs_diff_with_checkpoint

These 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.

Workflows

The built-in MCP prompt set now also includes:

  • design_review_loop

  • fix_blocking_issues

  • manufacturing_release_checklist

The resource surface now exposes:

  • kicad://project/quality_gate

  • kicad://project/fix_queue

  • kicad://schematic/connectivity

  • kicad://board/placement_quality

For 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.

Contributing

See CONTRIBUTING.md and the development docs in docs/development.

License

Released under the MIT License.

Available Tools

241 tools
add_footprint_inner_layer_graphicC
Destructive

Inject an inner-layer graphic primitive into a footprint block.

Inputs: layer (required), reference (required), shape_type (required), text, +5 more. Returns: result

check_design_for_manufactureA
Read-onlyIdempotent

Run a lightweight DFM check using available DRC data.

Inputs: jlcpcb. Returns: result

dfm_calculate_manufacturing_costC

Estimate fabrication cost from board area, layers, and via count.

Inputs: tier, quantity, manufacturer. Returns: result

dfm_load_manufacturer_profileB

Load a bundled manufacturer DFM profile for subsequent checks.

Inputs: tier, manufacturer. Returns: result

dfm_run_manufacturer_checkB

Run a manufacturer-aware DFM review using the active bundled profile.

Inputs: no named parameters. Returns: result

drc_export_rulesA

Export the active custom DRC rules file for sharing or CI.

Inputs: output_path. Returns: result

drc_list_rulesB

List known DRC rules from the active .kicad_dru file.

Inputs: include_custom. Returns: result

drc_rule_createB

Create or update a custom DRC rule in the active .kicad_dru file.

Inputs: name (required), constraint_type (required), severity, condition, +2 more. Returns: result

drc_rule_deleteB

Delete a custom DRC rule from the active rules file.

Inputs: rule_name (required). Returns: result

drc_rule_enableB

Enable or disable a custom DRC rule.

Inputs: rule_name (required), enabled. Returns: result

emc_check_decoupling_placementB

Review whether ICs have nearby decoupling capacitors.

Inputs: max_distance_mm. Returns: result

emc_check_differential_pair_symmetryC

Review diff-pair skew and width symmetry.

Inputs: net_n (required), net_p (required), max_skew_ps. Returns: result

emc_check_ground_plane_voidsC

Review GND plane presence and a simple void-risk proxy.

Inputs: max_void_area_mm2. Returns: result

emc_check_high_speed_routing_rulesD

Review a high-speed net class for a short-stub proxy.

Inputs: net_class (required), max_stub_length_mm. Returns: result

emc_check_return_path_continuityC

Check whether a signal has an obvious nearby GND return plane.

Inputs: signal_net (required), reference_plane_layer (required). Returns: result

emc_check_split_plane_crossingA

Warn when routed signals share layers with split non-ground planes.

Inputs: signal_nets (required). Returns: result

emc_check_via_stitchingC

Estimate via-stitching density from existing ground vias.

Inputs: ground_net, max_gap_mm. Returns: result

emc_run_full_complianceB

Run a lightweight EMC sweep with at least ten heuristic checks.

Inputs: standard. Returns: result

export_3d_renderC
Destructive

Render the board to a PNG image.

Inputs: side, zoom, output_file. Returns: result

export_3d_stepB
Destructive

Export a STEP model for the active board.

Inputs: no named parameters. Returns: result

export_bomC
Destructive

Export a bill of materials.

Inputs: format. Returns: result

export_drillC
Destructive

Export drill files.

Inputs: output_subdir. Returns: result

export_dxfB
Destructive

Export a board layer to DXF when supported.

Inputs: layer. Returns: result

export_gerberC
Destructive

Export Gerber manufacturing files.

Inputs: layers, output_subdir. Returns: result

export_ipc2581A
Destructive

Export IPC-2581 manufacturing data.

Inputs: no named parameters. Returns: result

export_manufacturing_packageB
Destructive

Generate the standard set of manufacturing exports.

Inputs: no named parameters. Returns: result

export_netlistC
Destructive

Export a KiCad schematic netlist.

Inputs: format. Returns: result

export_pcb_pdfC
Destructive

Export the PCB to PDF.

Inputs: layers. Returns: result

export_pick_and_placeC
Destructive

Export assembly position data.

Inputs: format. Returns: result

export_sch_pdfA
Destructive

Export the schematic to PDF.

Inputs: no named parameters. Returns: result

export_spice_netlistC
Destructive

Export a SPICE netlist.

Inputs: no named parameters. Returns: result

export_stepB
Destructive

Alias for STEP export with an optional explicit output path.

Inputs: output_path. Returns: result

export_svgB
Destructive

Export a board layer to SVG when supported.

Inputs: layer. Returns: result

get_board_statsB
Read-onlyIdempotent

Export board statistics and return a readable preview.

Inputs: no named parameters. Returns: result

get_courtyard_violationsA
Read-onlyIdempotent

Return only courtyard issues from DRC.

Inputs: no named parameters. Returns: result

get_silk_to_pad_violationsA
Read-onlyIdempotent

Return silkscreen overlap issues from DRC.

Inputs: no named parameters. Returns: result

get_unconnected_netsA
Read-onlyIdempotent

Return only unconnected net issues from DRC.

Inputs: no named parameters. Returns: result

kicad_create_new_projectC

Create a new minimal KiCad project structure and activate it.

Inputs: name (required), path (required). Returns: result

kicad_get_project_infoA
Read-onlyIdempotent

Show the currently configured KiCad project paths.

Inputs: no named parameters. Returns: result

kicad_get_tools_in_categoryC
Read-onlyIdempotent

Get the tool names available in a specific category.

Inputs: category (required). Returns: result

kicad_get_versionA
Read-onlyIdempotent

Get KiCad version information and current connection status.

Inputs: no named parameters. Returns: result

kicad_helpA

Show a concise startup guide and all tool categories.

Inputs: no named parameters. Returns: result

kicad_list_recent_projectsA

List recently opened KiCad projects from KiCad's config files.

Inputs: no named parameters. Returns: result

kicad_list_tool_categoriesA

List all available tool categories and capabilities.

Inputs: no named parameters. Returns: result

kicad_scan_directoryA

Scan a directory and report any KiCad project files it contains.

Inputs: path (required). Returns: result

kicad_set_projectC
Destructive

Set the active KiCad project directory and file paths.

Inputs: project_dir (required), pcb_file, sch_file, output_dir. Returns: result

lib_assign_footprintC

Assign a footprint property to a schematic symbol.

Inputs: library (required), footprint (required), reference (required). Returns: result

lib_assign_lcsc_to_symbolB

Assign an LCSC part code to a schematic symbol property.

Inputs: lcsc_code (required), reference (required). Returns: result

lib_bind_part_to_symbolA

Assign a live part (LCSC/MPN) to a schematic symbol and optionally its footprint.

This is the recommended tool for closing the part-selection loop after lib_recommend_part() or lib_search_components() returns a suitable part.

Args: sym_ref: Schematic reference designator (e.g. "U1", "C4"). lcsc_code_or_mpn: LCSC part code or manufacturer part number. auto_assign_footprint: If True, attempts to assign the footprint from the live part data to the symbol. Requires the schematic backend. source: Parts source for detail lookup.

Returns: Confirmation of LCSC/MPN assignment and footprint status.

Inputs: sym_ref (required), lcsc_code_or_mpn (required), source, auto_assign_footprint. Returns: result

lib_check_stock_availabilityB

Check live stock availability for the requested schematic references.

Inputs: refs (required), source. Returns: result

lib_create_custom_symbolC

Create a simple custom symbol in the active project directory.

Inputs: name (required), pins (required). Returns: result

lib_find_alternative_partsB

Find nearby alternative parts for the supplied LCSC code.

Inputs: lcsc_code (required), source, tolerance_percent. Returns: result

lib_generate_footprint_ipc7351A

Generate an IPC-7351B compliant KiCad footprint (.kicad_mod) and save it.

Supported packages: 0201, 0402, 0603, 0805, 1206, 1210, 2512 (chip passives), SOT-23, SOIC, SOP, SSOP, TSSOP (dual SMD), QFP, LQFP, TQFP (quad flat), QFN, DFN (no-lead), BGA (ball grid array), PinHeader (through-hole).

Args: package: Package family name (case-insensitive). density: IPC-7351B density level: A (generous), B (nominal), C (compact). pin_count: Number of leads / balls (required for multi-lead packages). pitch_mm: Lead pitch in mm. body_l_mm: Body length in mm. body_w_mm: Body width in mm (QFP only; defaults to body_l_mm). rows: BGA rows or PinHeader row count (1 or 2). exposed_pad_mm: Exposed pad size for QFN in mm. ball_diameter_mm: BGA ball diameter in mm. output_path: Optional relative path inside output_dir. Defaults to footprints/<package>.kicad_mod.

Returns: Confirmation with the saved file path, or an error message.

Inputs: package (required), rows, density, pitch_mm, +6 more. Returns: result

lib_generate_symbol_from_pintableA

Generate a KiCad symbol (.kicad_sym) from a pin table and save it.

Each pin dict must contain: number (str | int), name (str). Optional per-pin keys: pin_type (input/output/bidirectional/passive/power_in/power_out/…), side (left/right/top/bottom), unit (int ≥ 1).

Args: name: Symbol name, used as both the library entry and the default value. pins: List of pin specification dicts. reference_prefix: Ref-des prefix (U, J, Q, R, …). description: Short human description. datasheet: Datasheet URL or path. footprint_hint: Default footprint (e.g. "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm"). output_path: Optional relative path inside output_dir. Defaults to symbols/<name>.kicad_sym.

Returns: Confirmation with the saved file path, or an error message.

Inputs: name (required), pins (required), datasheet, description, +3 more. Returns: result

lib_get_bom_with_pricingC

Generate a live BOM summary with unit and extended pricing.

Inputs: source, quantity. Returns: result

lib_get_component_detailsB

Return live component detail for a specific LCSC code or MPN.

Inputs: lcsc_code_or_mpn (required), source. Returns: result

lib_get_datasheet_urlC

Return a datasheet URL from the symbol library when available.

Inputs: library (required), symbol_name (required). Returns: result

lib_get_footprint_3d_modelB

Return the configured 3D model path for a footprint.

Inputs: library (required), footprint (required). Returns: result

lib_get_footprint_infoB

Return details for a single footprint.

Inputs: library (required), footprint (required). Returns: result

lib_get_symbol_infoC

Return details for a single symbol.

Inputs: library (required), symbol_name (required). Returns: result

lib_list_footprintsA

List footprints in a specific library.

Inputs: library (required). Returns: result

lib_list_librariesA

List configured symbol and footprint libraries.

Inputs: no named parameters. Returns: result

lib_rebuild_indexB

Rebuild the in-memory symbol search index.

Inputs: no named parameters. Returns: result

lib_recommend_partA

Recommend a purchasable part given electrical requirements.

Args: category: Component category keyword to search (e.g. "LDO regulator", "N-channel MOSFET", "ferrite bead", "ESD protection"). requirements: Dict of electrical parameter hints used for post-search filtering. Common keys: voltage_v, current_a, vgs_v, rds_on_mohm, psrr_db, capacitance_uf, resistance_ohm. Values can be numbers (min) or {"min": x, "max": y} dicts. package: Optional SMD package filter (e.g. "SOT-23", "SOIC-8"). only_basic: Prefer JLCPCB basic parts (lower assembly cost). source: Parts source: "jlcsearch", "nexar", or "digikey". max_results: Maximum number of recommendations to return.

Returns: Ranked list of part recommendations with LCSC code, MPN, package, price.

Inputs: category (required), requirements (required), source, package, +2 more. Returns: result

lib_search_componentsB
Read-onlyIdempotent

Search live component sources for purchasable parts.

Inputs: keyword (required), source, package, sort_by, +2 more. Returns: result

lib_search_footprintsB
Read-onlyIdempotent

Search footprint libraries by footprint name.

Inputs: query (required), library_filter. Returns: result

lib_search_symbolsB
Read-onlyIdempotent

Search symbol libraries by name, description, or keywords.

Inputs: query (required), library_filter. Returns: result

manufacturing_quality_gateB
Read-onlyIdempotent

Evaluate manufacturing readiness against the active or requested DFM profile.

Inputs: tier, manufacturer. Returns: result

mfg_check_import_supportA

Report whether the detected KiCad CLI advertises a given board-import format.

Inputs: format (required). Returns: result

mfg_correct_cpl_rotationsA

Apply JLCPCB CPL rotation corrections to a KiCad-exported pick-and-place CSV.

KiCad exports component orientations relative to its own coordinate system, which differs from what JLCPCB's SMT assembly service expects. This tool reads a CPL CSV (produced by export_pos), applies per-footprint rotation offsets from the bundled jlcpcb_rotations.json table, and writes a corrected CSV ready for direct upload to JLCPCB.

Columns expected (KiCad default CPL export): Ref, Val, Package, PosX, PosY, Rot, Side

Args: cpl_csv_path: Path to the CPL CSV file (relative to project dir). output_path: Output path for the corrected CSV. Defaults to <stem>_jlcpcb_corrected.csv next to the input file. dry_run: If True, return a preview table without writing the file.

Returns: Summary of corrections applied, or a preview table for dry_run.

Inputs: cpl_csv_path (required), dry_run, output_path. Returns: result

mfg_generate_release_manifestA

Generate a SHA256-signed release manifest for the manufacturing package.

Collects all files in the output directory, computes SHA256 hashes, and records tool versions, intent hash, and gate status into a manifest.json and MANIFEST.txt.

Args: output_path: Subdirectory inside the project (defaults to output/).

Returns: Confirmation with manifest path and file count.

Inputs: output_path. Returns: result

mfg_generate_test_planA

Generate a bring-up test plan from the project design intent.

Produces a structured markdown checklist covering:

  • Power-on sequence and current limit checks for each power rail.

  • Protocol loopback / link-up checks for each interface.

  • Critical-net continuity probes.

  • Visual inspection items.

Args: output_path: Optional relative path for saving the plan (e.g. "test_plan.md"). If omitted, returns the plan as text only.

Returns: Bring-up test plan in markdown format.

Inputs: output_path. Returns: result

mfg_import_allegroB

Import an Allegro board into a KiCad project directory.

Inputs: allegro_brd_path (required), output_dir. Returns: result

mfg_import_gedaC

Import a gEDA PCB into a KiCad project directory.

Inputs: geda_pcb_path (required), output_dir. Returns: result

mfg_import_padsB

Import a PADS PCB into a KiCad project directory.

Inputs: pads_pcb_path (required), output_dir. Returns: result

mfg_panelizeA
Destructive

Panelize the active PCB using KiKit.

Creates a panel of multiple boards for efficient PCB fabrication. Requires kikit to be installed (pip install kikit).

Args: layout: Panel layout type: "grid" (rectangular array), "mousebites" (tab+mousebite breakaway), or "vcut" (V-cut scoring). rows: Number of board rows in the panel. cols: Number of board columns in the panel. spacing_mm: Gap between boards in mm. frame_width_mm: Panel frame/rail width in mm. output_path: Optional output file path (relative to output_dir). Defaults to panel/<boardname>_panel_<rows>x<cols>.kicad_pcb.

Returns: Confirmation with the panel file path, or an error message.

Inputs: cols, rows, layout, spacing_mm, +2 more. Returns: result

pcb_add_barcodeC
Destructive

Add a production barcode marker to the board file.

Inputs: x_mm (required), y_mm (required), content (required), layer, +2 more. Returns: result

pcb_add_blind_viaC
Destructive

Add a blind or buried via between the requested copper layers.

Inputs: x_mm (required), y_mm (required), to_layer (required), from_layer (required), +3 more. Returns: result

pcb_add_circleC
Destructive

Add a board graphic circle.

Inputs: cx_mm (required), cy_mm (required), radius_mm (required), layer, +1 more. Returns: result

pcb_add_copper_zoneD
Destructive

Backward-compatible alias for pcb_add_zone().

Inputs: layer (required), corners (required), net_name (required), name, +6 more. Returns: result

pcb_add_fiducial_marksB
Destructive

Append simple fiducial footprints near the board corners.

Inputs: count, margin_mm, diameter_mm, allow_open_board. Returns: result

pcb_add_microviaA
Destructive

Add a microvia between adjacent copper layers.

Inputs: x_mm (required), y_mm (required), to_layer (required), from_layer (required), +3 more. Returns: result

pcb_add_mounting_holesA
Destructive

Append standard mounting-hole footprints around the current board frame.

Inputs: pattern, margin_mm, diameter_mm, clearance_mm, +1 more. Returns: result

pcb_add_rectangleC
Destructive

Add a board graphic rectangle.

Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +2 more. Returns: result

pcb_add_segmentC
Destructive

Add a board graphic segment.

Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +2 more. Returns: result

pcb_add_teardropsB
Destructive

Create small copper helper zones at simple pad-to-track junctions.

Inputs: max_count, net_classes, width_ratio, length_ratio. Returns: result

pcb_add_textC
Destructive

Add board text.

Inputs: text (required), x_mm (required), y_mm (required), bold, +4 more. Returns: result

pcb_add_trackC
Destructive

Add a single track segment.

Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +3 more. Returns: result

pcb_add_tracks_bulkA
Destructive

Add multiple tracks in a single operation.

Inputs: tracks (required). Returns: result

pcb_add_viaC
Destructive

Add a via.

Inputs: x_mm (required), y_mm (required), drill_mm, net_name, +2 more. Returns: result

pcb_add_zoneC
Destructive

Add a copper zone with an arbitrary polygon outline on one copper layer.

Inputs: layer (required), corners (required), net_name (required), name, +6 more. Returns: result

pcb_align_footprintsC

Arrange selected footprints into a straight row or column.

Inputs: refs (required), axis, spacing_mm, allow_open_board. Returns: result

pcb_auto_place_by_schematicB

Place PCB footprints from the current schematic using deterministic heuristics.

Inputs: grid_mm, scale_x, scale_y, strategy, +4 more. Returns: result

pcb_auto_place_force_directedA

Run a force-directed spring-embedder placement algorithm on a set of components.

This tool computes optimised X/Y positions for components based on their net connectivity without requiring KiCad to be open. Use it to get a placement suggestion, then apply the result with pcb_move_footprint for each component.

Args: component_positions: List of component dicts with keys: ref (str), x (float, mm), y (float, mm), w (float, mm, optional default 2), h (float, mm, optional default 2), fixed (bool, optional default false). nets: List of net dicts with keys: name (str), refs (list[str]), weight (float, optional default 1.0). board_width_mm: Soft boundary width in mm (default 100). board_height_mm: Soft boundary height in mm (default 80). iterations: Number of spring-embedder iterations (default 300). k_spring: Spring attraction coefficient (default 0.4). k_repel: Coulomb repulsion coefficient (default 80.0).

Returns: JSON string with optimised positions for each component.

Inputs: nets (required), component_positions (required), k_repel, k_spring, +3 more. Returns: result

pcb_bga_fanoutA

Generate a BGA fanout via-placement plan (dog-ear or inline strategy).

Returns per-ball via coordinates and suggested track widths so the agent can call pcb_add_via and pcb_add_track to physically fanout the BGA. Actual pad coordinates must come from the board footprint (use pcb_get_pads).

Args: balls: List of ball dicts with keys: row (str, e.g. "A"), col (int, 1-based), net (str), x_mm (float, ball centre X), y_mm (float, ball centre Y). pitch_mm: Ball pitch in mm (e.g. 0.5, 0.65, 0.8, 1.0). via_drill_mm: Via drill diameter in mm (default 0.2). via_annular_mm: Via annular ring width in mm (default 0.1). escape_layer: Inner copper layer to fan out to (default "In1.Cu"). strategy: "dog_ear" (diagonal escape, most common) or "inline" (horizontal escape, for large pitch).

Returns: JSON string with via placement plan for each ball.

Inputs: balls (required), pitch_mm (required), strategy, escape_layer, +2 more. Returns: result

pcb_block_create_from_selectionB

Capture a reusable PCB design block from selected footprint references.

Inputs: name (required), references (required). Returns: result

pcb_block_listB

List stored PCB design blocks created from selected footprints.

Inputs: no named parameters. Returns: result

pcb_block_placeA

Place a stored PCB design block by cloning its saved footprint blocks.

Inputs: x_mm (required), y_mm (required), block_name (required), rotation_deg. Returns: result

pcb_check_creepage_clearanceC

Run a heuristic creepage clearance review against pad spacing.

Inputs: voltage_v (required), material_group, pollution_degree. Returns: result

pcb_delete_itemsB
Destructive

Delete items by UUID.

Inputs: item_ids (required). Returns: result

pcb_export_3d_pdfC

Export the active PCB as a KiCad 10 3D PDF.

Inputs: board_only, output_path. Returns: result

pcb_get_board_as_stringA
Read-onlyIdempotent

Return the current board as a bounded S-expression string.

Inputs: no named parameters. Returns: result

pcb_get_board_summaryA
Read-onlyIdempotent

Summarize the current board.

Inputs: no named parameters. Returns: result

pcb_get_design_rulesA
Read-onlyIdempotent

Read the active board design rules file when available.

Inputs: no named parameters. Returns: result

pcb_get_footprint_layersB
Read-onlyIdempotent

List every layer referenced by a footprint block, including inner layers.

Inputs: reference (required). Returns: result

pcb_get_footprintsC
Read-onlyIdempotent

List board footprints.

Inputs: page, page_size, filter_layer. Returns: result

pcb_get_impedance_for_traceB
Read-onlyIdempotent

Estimate trace impedance for the supplied width on the named stackup layer.

Inputs: width_mm (required), layer_name (required). Returns: result

pcb_get_layersA
Read-onlyIdempotent

List enabled board layers.

Inputs: no named parameters. Returns: result

pcb_get_netsA
Read-onlyIdempotent

List all board nets.

Inputs: no named parameters. Returns: result

pcb_get_padsA
Read-onlyIdempotent

List board pads.

Inputs: no named parameters. Returns: result

pcb_get_ratsnestA
Read-onlyIdempotent

Report currently unconnected board items using the latest DRC view.

Inputs: no named parameters. Returns: result

pcb_get_selectionA
Read-onlyIdempotent

List currently selected items in the PCB editor.

Inputs: no named parameters. Returns: result

pcb_get_shapesB
Read-onlyIdempotent

List graphical board shapes.

Inputs: no named parameters. Returns: result

pcb_get_stackupA
Read-onlyIdempotent

Show the current stackup.

Inputs: no named parameters. Returns: result

pcb_get_tracksC
Read-onlyIdempotent

List board tracks.

Inputs: page, page_size, filter_net, filter_layer. Returns: result

pcb_get_viasA
Read-onlyIdempotent

List board vias.

Inputs: no named parameters. Returns: result

pcb_get_zonesA
Read-onlyIdempotent

List all board copper zones.

Inputs: no named parameters. Returns: result

pcb_group_by_functionC

Cluster existing footprints into named functional groups.

Inputs: groups (required), grid_mm, origin_x_mm, origin_y_mm, +3 more. Returns: result

pcb_highlight_netC

Attempt to highlight a net in the GUI when supported.

Inputs: net_name (required). Returns: result

pcb_move_footprintC

Move a footprint to an absolute location.

Inputs: x_mm (required), y_mm (required), reference (required), rotation_deg. Returns: result

pcb_place_decoupling_capsC

Move capacitor footprints into a tight row near a target IC footprint.

Inputs: ic_ref (required), cap_refs (required), side, grid_mm, +2 more. Returns: result

pcb_placement_quality_gateA
Read-onlyIdempotent

Evaluate whether footprint placement is overlap-free and inside the board frame.

Inputs: no named parameters. Returns: result

pcb_placement_quality_reportB

Return a structured placement-quality report for capable MCP clients.

Inputs: no named parameters. Returns: Structured placement analysis payload.

pcb_quality_gateB
Read-onlyIdempotent

Evaluate whether the PCB is physically clean enough to proceed.

Inputs: no named parameters. Returns: result

pcb_refill_zonesB

Refill all copper zones.

Inputs: no named parameters. Returns: result

pcb_saveA

Save the active board.

Inputs: no named parameters. Returns: result

pcb_score_placementA

Score PCB placement quality and explain both hard failures and softer warnings.

Inputs: no named parameters. Returns: result

pcb_set_board_outlineC
Destructive

Draw a rectangular board outline on Edge.Cuts.

Inputs: width_mm (required), height_mm (required), origin_x_mm, origin_y_mm. Returns: result

pcb_set_design_rulesC
Destructive

Write board-level manufacturing constraints into the active .kicad_dru file.

Inputs: min_clearance_mm, min_via_drill_mm, min_trace_width_mm, min_annular_ring_mm, +2 more. Returns: result

pcb_set_footprint_layerC
Destructive

Set the footprint copper side.

Inputs: layer (required), reference (required). Returns: result

pcb_set_keepout_zoneA
Destructive

Add a rectangular PCB keepout / rule area to the active board.

Inputs: h_mm (required), w_mm (required), x_mm (required), y_mm (required), +2 more. Returns: result

pcb_set_net_classC
Destructive

Assign a net class when the runtime supports it.

Inputs: net_name (required), class_name (required). Returns: result

pcb_set_stackupB
Destructive

Set the active board stackup using a file-backed profile.

Inputs: layers (required). Returns: result

pcb_sync_from_schematicA

Sync missing PCB footprints from schematic footprint assignments.

This is a file-based operation intended for initial board bring-up. It adds missing footprint instances to the .kicad_pcb file using schematic references, values, rotations, and assigned Library:Footprint names. When replace_mismatched=True, existing footprints with the same reference but the wrong footprint name are replaced in place.

Inputs: grid_mm, scale_x, scale_y, origin_x_mm, +4 more. Returns: result

pcb_transfer_quality_gateA
Read-onlyIdempotent

Evaluate whether named schematic pad nets transferred cleanly onto PCB pads.

Inputs: no named parameters. Returns: result

pdn_calculate_voltage_dropC

Estimate DC voltage drop and trace resistance.

Inputs: current_a (required), trace_width_mm (required), trace_length_mm (required), copper_oz. Returns: result

pdn_check_copper_weightA

Check whether the routed copper for a net looks sufficient for the load current.

Inputs: net_name (required), expected_current_a (required), ambient_temp_c, max_temp_rise_c. Returns: result

pdn_generate_power_planeC

Generate a rectangular copper plane on the requested copper layer.

Inputs: layer (required), net_name (required), clearance_mm. Returns: result

pdn_recommend_decoupling_capsC

Recommend local and bulk decoupling from a simple PDN heuristic.

Inputs: ic_refs (required), vcc_net (required), supply_voltage_v (required), target_ripple_mv. Returns: result

project_auto_fix_loopA
Destructive

Run the project quality gate and automatically apply server-side fixes.

Each iteration:

  1. Evaluates all project quality gates.

  2. For auto-applicable gates (annotation, zone refill) — calls the underlying fix implementation directly on the server, then re-evaluates.

  3. For gates requiring agent action — returns the tool name and description so the agent can call it, then the agent must call this tool again to continue.

The loop runs up to max_iterations times applying auto-fixes. It stops early when all gates pass or when no further auto-fix is possible without agent involvement.

Args: max_iterations: Maximum number of auto-fix + re-evaluate cycles to attempt before returning control to the agent (1–20).

Inputs: max_iterations. Returns: Structured result returned by project_auto_fix_loop.

project_design_reportA

Generate a comprehensive design-status report.

Combines intent summary, v2 spec richness, project gate evaluation, and a prioritised list of next steps into a single structured report. This is the recommended first call after opening a project to understand its current state.

Inputs: no named parameters. Returns: Comprehensive design-status report combining intent, gates, and recommended act…

project_get_design_intentA
Read-onlyIdempotent

Show the persisted project design intent used by placement and release gates.

Inputs: no named parameters. Returns: result

project_get_design_specA
Read-onlyIdempotent

Return the resolved project design spec with explicit and inferred fields.

Inputs: no named parameters. Returns: Structured design-spec payload returned to capable MCP clients.

project_get_next_actionB
Read-onlyIdempotent

Return the next high-priority action derived from the current project gate.

Inputs: no named parameters. Returns: Structured next-action recommendation derived from the project gate.

project_infer_design_specA

Infer a design spec from the active PCB without writing it to disk.

Inputs: no named parameters. Returns: Structured design-spec payload returned to capable MCP clients.

project_quality_gateA
Read-onlyIdempotent

Run the full project quality gate across schematic, PCB, DFM, and parity checks.

Inputs: tier, manufacturer. Returns: result

project_quality_gate_reportC

Return the full project gate in structured form for capable MCP clients.

Inputs: tier, manufacturer. Returns: Structured project-quality-gate report.

project_set_design_intentC
Destructive

Store high-level design intent used by placement, routing, and release-quality gates.

v1 parameters (all boards): connector_refs, decoupling_pairs, critical_nets, power_tree_refs, analog_refs, digital_refs, sensor_cluster_refs, rf_keepout_regions, manufacturer, manufacturer_tier.

v2 parameters (professional projects): power_rails (list of PowerRailSpec dicts), interfaces (list of InterfaceSpec dicts), mechanical (MechanicalConstraint dict), compliance (list of ComplianceTarget dicts), cost (CostTarget dict), thermal (ThermalEnvelope dict).

Inputs: cost, thermal, compliance, interfaces, +12 more. Returns: result

project_validate_design_specB

Validate the resolved design spec against the active project PCB.

Inputs: no named parameters. Returns: Structured project-spec validation payload.

route_apply_tuning_profileA

Assign a named tuning profile to a net or wildcard net group.

Inputs: net_pattern (required), profile_name (required). Returns: result

route_autoroute_freeroutingB
Destructive

Run FreeRouting on a Specctra DSN file and stage the resulting SES session.

Inputs: dsn_path, ses_path, max_passes, use_docker, +3 more. Returns: result

route_create_tuning_profileC

Create or update a KiCad 10-style time-domain tuning profile.

Inputs: name (required), layer (required), trace_impedance_ohm (required), propagation_speed_factor (required). Returns: result

route_differential_pairB

Write differential-pair routing constraints for a pair of nets.

Inputs: net_n (required), net_p (required), layer, gap_mm, +2 more. Returns: result

route_export_dsnC

Stage a Specctra DSN file for FreeRouting.

Inputs: output_path. Returns: result

route_from_pad_to_padC

Create a simple orthogonal route between two pads.

Inputs: pad1 (required), pad2 (required), ref1 (required), ref2 (required), +2 more. Returns: result

route_import_sesA

Stage a Specctra SES file and explain the KiCad import step.

Inputs: ses_path. Returns: result

route_list_tuning_profilesA

List configured time-domain tuning profiles.

Inputs: no named parameters. Returns: result

route_set_net_class_rulesC
Destructive

Write net-class routing constraints into the active .kicad_dru file.

Inputs: width_mm (required), net_class (required), clearance_mm (required), via_drill_mm (required), +1 more. Returns: result

route_single_trackC

Route a single straight track segment.

Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +3 more. Returns: result

route_tune_lengthC

Write a length-tuning rule and report the current delta for a net.

Inputs: net_name (required), target_mm (required), tolerance_mm, meander_amplitude_mm. Returns: result

route_tune_time_domainC

Create a KiCad 10-inspired time-domain tuning rule with a length fallback.

Inputs: net_or_group (required), target_delay_ps (required), layer, tolerance_ps. Returns: result

run_drcB
Read-onlyIdempotent

Run PCB design rule checks.

Inputs: save_report. Returns: result

run_ercB
Read-onlyIdempotent

Run schematic electrical rule checks.

Inputs: save_report. Returns: result

sch_add_busB
Destructive

Add a schematic bus, snapping endpoints to the 2.54 mm grid by default.

Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +1 more. Returns: result

sch_add_bus_wire_entryA
Destructive

Add a bus wire entry marker, snapping its anchor to the 2.54 mm grid by default.

Inputs: x_mm (required), y_mm (required), direction, snap_to_grid. Returns: result

sch_add_global_labelC
Destructive

Add a global label, preserving the requested shape and rotation.

Inputs: text (required), x_mm (required), y_mm (required), shape, +2 more. Returns: result

sch_add_hierarchical_labelB
Destructive

Add a hierarchical label, preserving the requested shape and rotation.

Inputs: text (required), x_mm (required), y_mm (required), shape, +2 more. Returns: result

sch_add_jumperC
Destructive

Add a jumper symbol to the schematic.

Inputs: x_mm (required), y_mm (required), pins, snap_to_grid, +1 more. Returns: result

sch_add_labelC
Destructive

Add a schematic label, snapping its anchor to the 2.54 mm grid by default.

Inputs: name (required), x_mm (required), y_mm (required), rotation, +1 more. Returns: result

sch_add_no_connectA
Destructive

Add a no-connect marker, snapping it to the 2.54 mm grid by default.

Inputs: x_mm (required), y_mm (required), snap_to_grid. Returns: result

sch_add_power_symbolB
Destructive

Add a power symbol, snapping its anchor to the 2.54 mm grid by default.

Inputs: name (required), x_mm (required), y_mm (required), rotation, +1 more. Returns: result

sch_add_symbolA
Destructive

Add a schematic symbol at an absolute coordinate.

Coordinates snap to the 2.54 mm schematic grid by default; set snap_to_grid=False only when an exact off-grid coordinate is intentional.

Inputs: x_mm (required), y_mm (required), value (required), library (required), +6 more. Returns: result

sch_add_wireB
Destructive

Add a schematic wire, snapping endpoints to the 2.54 mm grid by default.

Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +1 more. Returns: result

sch_analyze_net_compilationC

Preview how netlist-aware schematic compilation will resolve endpoints and wires.

Inputs: nets, wires, labels, symbols, +3 more. Returns: result

sch_annotateB
Destructive

Renumber schematic references sequentially.

Inputs: order, start_number. Returns: result

sch_auto_place_functionalA

Place schematic symbols into semantically meaningful zones on the sheet.

Unlike the basic sch_auto_place_symbols which uses a plain grid, this tool categorises each symbol by its function (MCU, connector, power IC, sensor, passive, protection …) and places it in the corresponding region of the schematic sheet. The result is a readable, professionally structured schematic with logical signal flow (connectors on the left, processing in the centre, power/decoupling at the bottom).

Zone layout (column × row, each cell = 25.4 × 17.78 mm)::

Col →    0-2          3-5          6-8
Row 0:   connectors   MCU          UI/LED/SW
Row 3:   power IC     sensors/IC   protection
Row 5:   power_pass   passives     transistors/filter
Row 7:   test points  ---          misc

The actual sheet size is read from the schematic file. If the symbol count would overflow the current sheet, a warning is appended recommending sch_auto_resize_sheet to switch to a larger format (A3, A2, …) before re-running this tool.

Symbols already placed (not in symbol_list) are treated as fixed obstacles and will not be overwritten. Within each zone, symbols are arranged in a compact row-major sub-grid.

Args: symbol_list: Optional list of reference designators to place. If omitted, all symbols in the schematic are placed.

Returns: A summary showing how many symbols were placed per functional zone, plus an overflow warning if the sheet is too small.

Inputs: symbol_list. Returns: result

sch_auto_place_symbolsA

Auto-place selected references using deterministic cluster, linear, or star layouts.

Unlike the legacy behaviour, this version reads all already-placed symbols first and avoids placing new symbols on top of them. Fixed/already-placed symbols that are not in symbol_list are treated as immovable obstacles.

Inputs: strategy, symbol_list. Returns: result

sch_auto_resize_sheetA

Automatically grow the sheet to fit all currently placed symbols.

Reads the bounding box of all placed symbols and selects the smallest standard paper size (A4 → A3 → A2 → A1) that contains them with the configured margin. If the current sheet already fits, reports that no change is needed.

Returns: The chosen paper size and new dimensions, or a message if the current size is already sufficient.

Inputs: no named parameters. Returns: result

sch_build_circuitA

Build (overwrite) the active schematic from structured symbol, wire, and label inputs.

IMPORTANT: This tool replaces the entire schematic content. Any symbols already placed in the schematic will be lost. To add symbols to an existing schematic without erasing it use sch_add_symbol / sch_add_wire / sch_add_label instead.

Coordinates are snapped to the 2.54 mm grid by default. When no coordinates are provided for a symbol, set auto_layout=True so the placement engine assigns non-overlapping positions automatically. If nets are also provided the layout is connection-aware and generates Manhattan wire segments from symbol pins. Nets that cannot resolve to at least two routable endpoints raise a clear error instead of silently producing a disconnected schematic.

Recommended workflow:

  1. Call sch_find_free_placement(count=N) to obtain safe coordinates.

  2. Pass those coordinates in the symbols list.

  3. OR set auto_layout=True and omit coordinates entirely.

Inputs: nets, wires, labels, symbols, +3 more. Returns: result

sch_check_power_flagsB

Check whether common power nets appear to be flagged.

Inputs: no named parameters. Returns: result

sch_create_sheetB

Create a child schematic sheet and add it to the active top-level schematic.

Inputs: name (required), x_mm (required), y_mm (required), filename (required), +1 more. Returns: result

sch_delete_symbolA
Destructive

Remove a placed symbol and any directly attached wire segments.

Inputs: reference (required). Returns: result

sch_delete_wireA
Destructive

Remove a specific wire segment using its UUID or unique UUID prefix.

Inputs: wire_id (required). Returns: result

schematic_connectivity_gateB

Evaluate whether schematic structure and hierarchy look electrically meaningful.

Inputs: no named parameters. Returns: result

schematic_quality_gateB
Read-onlyIdempotent

Evaluate whether the schematic is clean enough to proceed.

Inputs: no named parameters. Returns: result

sch_find_free_placementA

Find N collision-free placement coordinates for new symbols.

Reads the current schematic, builds an occupancy grid from all existing symbols, and returns count coordinate pairs that do not overlap with any placed symbol. Call this before sch_add_symbol to get safe (x, y) values.

Args: count: Number of free coordinate slots to return (default 1, max 64). cell_width_mm: Grid cell width in mm (default 25.4 — one 10-mil grid unit). cell_height_mm: Grid cell height in mm (default 17.78).

Returns: A list of (x_mm, y_mm) coordinate pairs, one per requested slot.

Inputs: count, cell_width_mm, cell_height_mm. Returns: result

sch_get_bounding_boxesA
Read-onlyIdempotent

Return the estimated bounding box of every symbol in the active schematic.

Use this before calling sch_add_symbol or sch_build_circuit to understand which areas of the schematic sheet are already occupied. The bounding boxes are heuristic estimates (KiCad does not expose exact extents via the file API) but are conservative enough to avoid overlap in practice.

Returns: A table of all symbols with their centre position and estimated bounding-box corners (x_min, y_min, x_max, y_max) in mm, plus an occupied-area summary.

Inputs: no named parameters. Returns: result

sch_get_connectivity_graphA
Read-onlyIdempotent

Summarize the active schematic as a textual net connectivity graph.

Inputs: no named parameters. Returns: result

sch_get_labelsA
Read-onlyIdempotent

List all labels in the schematic.

Inputs: no named parameters. Returns: result

sch_get_net_namesA
Read-onlyIdempotent

List unique net names derived from labels.

Inputs: no named parameters. Returns: result

sch_get_pin_positionsA
Read-onlyIdempotent

Calculate absolute pin positions for a given symbol placement.

Inputs: x_mm (required), y_mm (required), library (required), symbol_name (required), +2 more. Returns: result

sch_get_sheet_infoB
Read-onlyIdempotent

Return metadata for a specific child sheet.

Inputs: sheet_name (required). Returns: result

sch_get_symbolsA
Read-onlyIdempotent

List all schematic symbols.

Inputs: no named parameters. Returns: result

sch_get_template_infoA
Read-onlyIdempotent

Return full details for a subcircuit template.

Args: template_name: Template name as returned by sch_list_templates() (e.g. "buck_converter_generic").

Returns: Structured template description including parameters, symbols, nets, and placement hints.

Inputs: template_name (required). Returns: result

sch_get_wiresA
Read-onlyIdempotent

List all wires in the schematic.

Inputs: no named parameters. Returns: result

sch_instantiate_templateA

Instantiate a subcircuit template — returns a structured action plan.

This tool returns a structured plan describing the symbols, connections, and part-search steps needed to add the subcircuit to the schematic. It does NOT directly edit the schematic (use the plan as a guide for calling sch_add_symbol, sch_add_wire, lib_recommend_part, etc.).

Args: template_name: Template name (from sch_list_templates()). prefix: Reference prefix applied to all template refs (e.g. "PWR_" produces PWR_U1, PWR_L1, etc.). params: Dict of parameter overrides (e.g. {"vout_v": 5.0}).

Returns: Step-by-step instantiation plan in markdown format.

Inputs: template_name (required), params, prefix. Returns: result

sch_list_sheetsA

List child sheets from the active top-level schematic.

Inputs: no named parameters. Returns: result

sch_list_swappable_pinsA

List candidate pins and units that can participate in a swap workflow.

Inputs: component_ref (required). Returns: result

sch_list_templatesA

List all available reference subcircuit templates.

Templates are pre-wired subcircuit blueprints for common building blocks (buck converter, LDO, USB Type-C, MCU decoupling, Ethernet with magnetics).

Call sch_get_template_info() for full parameter and placement details, then sch_instantiate_template() to add the subcircuit to the schematic.

Inputs: no named parameters. Returns: result

sch_move_symbolA

Move an existing symbol instance to a new absolute coordinate.

Inputs: x_mm (required), y_mm (required), reference (required), snap_to_grid. Returns: result

sch_reloadA

Ask KiCad to reload the active schematic.

Inputs: no named parameters. Returns: result

sch_route_wire_between_pinsA

Route deterministic Manhattan wire segments between two placed symbol pins.

Inputs: pin1 (required), pin2 (required), ref1 (required), ref2 (required), +1 more. Returns: result

sch_set_sheet_sizeA
Destructive

Change the schematic sheet (paper) size.

Use this when the current sheet is too small to fit all symbols — for example after sch_auto_place_functional warns that symbols were placed outside the sheet boundary, or when you receive a screenshot showing components outside the red sheet border.

Supported sizes (landscape): A4, A3, A2, A1, A0, A (letter), B, C, D, E, USLetter, USLegal.

After resizing you should call sch_auto_place_functional again so that symbols are re-distributed across the larger sheet.

Args: paper: Target paper size keyword (default "A3").

Returns: Confirmation with old and new dimensions.

Inputs: paper. Returns: result

sch_swap_gatesC

Record a gate-swap back-annotation intent for a multi-unit component.

Inputs: gate_a (required), gate_b (required), component_ref (required). Returns: result

sch_swap_pinsC

Record a pin-swap back-annotation intent for a component.

Inputs: pin_a (required), pin_b (required), component_ref (required). Returns: result

sch_trace_netB

Trace a named net through the active schematic and matching child sheets.

Inputs: net_name (required). Returns: result

sch_update_propertiesC
Destructive

Update a property on a placed symbol.

Inputs: field (required), value (required), reference (required). Returns: result

si_bind_interfaces_to_net_classesA

Map interface specs from the project design intent to KiCad net classes.

For each interface with an impedance target, this tool generates the pcb_set_net_class() calls needed to enforce clearance and diff-pair rules. When dry_run=True (default), only returns the plan without executing it.

Args: interfaces: List of InterfaceSpec dicts from project_get_design_spec(). dry_run: If True, return the mapping plan without modifying the project. Set to False to have the tool call pcb_set_net_class() for each class.

Returns: Net class plan or confirmation of changes applied.

Inputs: interfaces (required), dry_run. Returns: result

si_calculate_decoupling_placementC

Estimate decoupling placement quality around an IC power pin.

Inputs: ic_ref (required), power_pin (required), target_freq_mhz (required). Returns: result

si_calculate_trace_impedanceC

Estimate PCB trace impedance using quasi-static interconnect formulas.

Inputs: width_mm (required), height_mm (required), er, copper_oz, +2 more. Returns: result

si_calculate_trace_width_for_impedanceC

Solve for a trace width that meets the requested impedance target.

Inputs: height_mm (required), target_ohm (required), er, copper_oz, +2 more. Returns: result

si_check_differential_pair_skewB

Estimate differential-pair length skew and delay mismatch from board tracks.

Inputs: net_n (required), net_p (required), er, trace_type. Returns: result

si_check_via_stubB

Estimate via-stub resonance and risk for selected vias on the active board.

Inputs: frequency_ghz (required), er, via_positions. Returns: result

si_generate_stackupC

Generate a practical board stackup recommendation and target trace geometry.

Inputs: er, copper_oz, layer_count, manufacturer, +1 more. Returns: result

si_list_dielectric_materialsA

List all built-in dielectric materials with Er, loss tangent, and frequency range.

Use the returned material keys with si_synthesize_stackup_for_interfaces() to select the appropriate laminate for your design.

Inputs: no named parameters. Returns: result

sim_add_spice_directiveA
Destructive

Persist a SPICE directive used by future MCP simulation runs.

Inputs: directive (required). Returns: result

sim_check_stabilityB

Estimate loop crossover and phase margin from an AC sweep.

Inputs: output_net (required), feedback_net (required), netlist_path, stop_freq_hz, +2 more. Returns: result

sim_run_ac_analysisB

Run a small-signal AC sweep.

Inputs: stop_freq_hz (required), start_freq_hz (required), probe_nets, netlist_path, +1 more. Returns: result

sim_run_dc_sweepC

Run a DC sweep for an independent source.

Inputs: step_v (required), stop_v (required), start_v (required), source_ref (required), +2 more. Returns: result

sim_run_operating_pointC

Run a DC operating-point analysis.

Inputs: probe_nets, netlist_path. Returns: result

sim_run_transientC

Run a transient time-domain simulation.

Inputs: step_time_s (required), stop_time_s (required), probe_nets, netlist_path. Returns: result

si_synthesize_stackup_for_interfacesA

Synthesise a PCB stackup that meets the impedance requirements of the given interfaces.

Analyses each InterfaceSpec dict and recommends:

  • Layer count

  • Dielectric material

  • Copper weight per layer

  • Outer dielectric thickness for target impedance

  • Net class settings (impedance, clearance, diff-pair gap)

Args: interfaces: List of InterfaceSpec dicts (matching project_set_design_intent interface format). Each must have at least kind and optionally impedance_target_ohm, differential, diff_skew_max_ps. cost_tier: "standard" (FR4), "midloss" (FR4 mid/low-loss), "highspeed" (Rogers/Megtron). Overrides material selection. board_thickness_mm: Target board thickness in mm (1.0, 1.6, 2.0, 3.2).

Returns: Recommended stackup specification and net class table in human-readable markdown, ready to pass to pcb_set_stackup() and pcb_set_net_class().

Inputs: interfaces (required), cost_tier, board_thickness_mm. Returns: result

si_validate_length_matchingC

Validate that each net group is matched within the supplied tolerance.

Inputs: net_groups (required), tolerance_mm. Returns: result

studio_push_contextC

Update the active IDE context pushed by KiCad Studio.

Inputs: file_type (required), drc_errors (required), active_file (required), selected_net, +2 more. Returns: result

thermal_calculate_via_countC

Estimate how many stitched thermal vias are needed for the target resistance.

Inputs: power_w (required), via_diameter_mm, thermal_resistance_target. Returns: result

thermal_check_copper_pourC

Check whether the board already has copper pour support for the net.

Inputs: net_name (required), expected_power_w (required), preferred_layer. Returns: result

tune_diff_pair_lengthA

Write matched-length rules for both nets in a differential pair.

Inputs: net_name_n (required), net_name_p (required), target_length_mm (required). Returns: result

tune_track_lengthD

Backward-compatible alias for route_tune_length().

Inputs: net_name (required), target_length_mm (required). Returns: result

validate_designA
Read-onlyIdempotent

Run DRC and ERC and summarize readiness.

Inputs: no named parameters. Returns: result

validate_footprints_vs_schematicA
Read-onlyIdempotent

Compare PCB footprint references against the schematic symbol references.

Inputs: no named parameters. Returns: result

variant_createA

Create a new design variant, optionally cloning an existing variant.

Inputs: name (required), base_variant. Returns: result

variant_diff_bomB

Diff the effective BOM between two design variants.

Inputs: variant_a (required), variant_b (required). Returns: result

variant_export_bomB

Export a variant-specific BOM into the project output directory.

Inputs: variant (required), format. Returns: result

variant_listA

List available design variants and basic component counts.

Inputs: no named parameters. Returns: result

variant_set_activeC
Destructive

Set the active design variant for the current project.

Inputs: name (required). Returns: result

variant_set_component_overrideA
Destructive

Override component population, value, or footprint in a variant.

Inputs: enabled (required), variant (required), reference (required), value, +1 more. Returns: result

vcs_commit_checkpointA
Destructive

Commit the current project state as a named checkpoint.

Inputs: message (required), auto_drc. Returns: result

vcs_diff_with_checkpointA

Show the current project diff versus a checkpoint commit.

Inputs: commit_hash (required). Returns: result

vcs_init_gitA

Initialize a Git repository for the KiCad project directory.

Inputs: project_dir (required). Returns: result

vcs_list_checkpointsA

List checkpoint commits created by the MCP tool.

Inputs: no named parameters. Returns: result

vcs_restore_checkpointB
Destructive

Restore project files from a previous checkpoint commit.

Inputs: commit_hash (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 241 tools

    Disambiguation3/5

    Most tools have clear category prefixes and distinct purposes, but there are deliberate aliases (pcb_add_zone/pcb_add_copper_zone, export_3d_step/export_step, route_tune_length/tune_track_length) and overlapping clusters around routing, auto-placement, part search, and quality gates. Descriptions help, but at 241 tools misselection becomes likely.

    Naming Consistency4/5

    Tool names generally follow a predictable category_verb_noun snake_case pattern, such as pcb_get_*, sch_add_*, export_*, and vcs_*. Minor deviations like run_drc, get_board_stats, and a few backward-compatible aliases prevent a perfect score, but the overall style is consistent.

    Tool Count1/5

    241 tools is an extreme count for a single MCP server, even for a broad EDA workflow. It creates a heavy selection burden on agents and should likely be split into category-focused servers.

    Completeness4/5

    The server covers the full design lifecycle: project creation, schematic entry, libraries, PCB layout, routing, SI/EMC/PDN, simulation, quality gates, exports, manufacturing, and VCS. Minor gaps exist around generic schematic deletion/update operations, such as removing labels or sheets, but agents can generally work around them.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      A
      maintenance
      KiCAD MCP is a Model Context Protocol (MCP) implementation that enables Large Language Models (LLMs) like Claude to directly interact with KiCAD for printed circuit board design.
      61 npm
      3,328
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with KiCAD for PCB design automation.
      61 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants like Claude to interact with KiCAD for PCB design automation, providing comprehensive tool schemas and real-time project state access.
      61 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      KiCad MCP Pro is an MCP server for KiCad EDA workflows. It lets AI agents automate schematic and PCB tasks, ERC/DRC validation, DFM review, and manufacturing export.
      10,388 PyPI
      213
      MIT