Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

KiCad Tools

PYPI · MCP-SERVER-KICAD · SCANNED OCT 4

Byte-preserving KiCad automation: 100+ tools for schematics, PCB layout, ERC, DRC, exports

Available components

+11 this week 77 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 28 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to ProductOfAmerica/mcp-server-kicad). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 49 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability69
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 14242 tokens (~130/item across 109 items; 109 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 12 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 110 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the KiCad Tools MCP server?

KiCad Tools runs locally as a PyPI package, launched with uvx mcp-server-kicad. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · mcp-server-kicad

# add to Claude Code
claude mcp add productofamerica-mcp-server-kicad -- uvx mcp-server-kicad
// .cursor/mcp.json
{
  "mcpServers": {
    "productofamerica-mcp-server-kicad": {
      "command": "uvx",
      "args": [
        "mcp-server-kicad"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "productofamerica-mcp-server-kicad": {
      "command": "uvx",
      "args": [
        "mcp-server-kicad"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add productofamerica-mcp-server-kicad -- uvx mcp-server-kicad
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "productofamerica-mcp-server-kicad": {
      "type": "local",
      "command": [
        "uvx",
        "mcp-server-kicad"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add productofamerica-mcp-server-kicad --command uvx --arg mcp-server-kicad
# ~/.hermes/config.yaml
mcp_servers:
  productofamerica-mcp-server-kicad:
    command: "uvx"
    args: ["mcp-server-kicad"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "productofamerica-mcp-server-kicad": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "mcp-server-kicad"
      ]
    }
  }
}
# add to Vellum
assistant mcp add productofamerica-mcp-server-kicad -t stdio -c uvx -a mcp-server-kicad
// mcp.json
{
  "mcpServers": {
    "productofamerica-mcp-server-kicad": {
      "command": "uvx",
      "args": [
        "mcp-server-kicad"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 28 Sept 26 +11
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Oct 2026 · Analysed pypi/mcp-server-kicad@0.20.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo ProductOfAmerica/mcp-server-kicad
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/ProductOfAmerica/mcp-server-kicad/.github/workflows/release.yml@refs/heads/main
Rekor log index 2473555764
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:490f70415eeaa4587dca9a437d643f0cc2cd74130b17ae34a247277b36dc0efb

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 28 packages
Packages resolved 28
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 109 exposed · ~13,808 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_copper_zone ~276

Create an unfilled copper zone: a ground plane, power plane, or any filled copper pour. Call fill_zones afterward to compute the fills. Args: net_name: Name of the net to assign to this zone (e.g. "GND") layer: Copper layer (e.g. "F.Cu", "B.Cu") corners: List of {x, y} dicts defining the zone polygon (min 3) clearance: Zone clearance in mm min_thickness: Minimum copper thickness in mm thermal_relief: Use thermal relief pads (True) or solid connection (False) thermal_gap: Thermal relief gap in mm thermal_bridge_width: Thermal relief bridge width in mm priority: Zone fill priority (higher fills first) pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
clearancenumber––
cornersarrayyes–
layerstringyes–
min_thicknessnumber––
net_namestringyes–
pcb_pathstring––
priorityinteger––
thermal_bridge_widthnumber––
thermal_gapnumber––
thermal_reliefboolean––
NameTypeReqDescription
clearance_mmnumberyes–
cornersintegeryes–
layerstringyes–
netstringyes–

No examples provided.

add_global_label ~159

Add a global net label (visible across all sheets). Args: text: Net name (e.g. "VCC", "SDA") x: X position y: Y position rotation: Degrees (0=right, 90=up, 180=left, 270=down) shape: Label shape: input, output, bidirectional, tri_state, passive schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
rotationinteger––
schematic_pathstring––
shapestring––
textstringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_hierarchical_label ~151

Add a hierarchical label to a sub-sheet schematic. Args: text: Label name (must match parent sheet pin name) shape: Direction — input, output, bidirectional, tri_state, passive x: X position in mm y: Y position in mm rotation: Degrees (0, 90, 180, 270) schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
rotationinteger––
schematic_pathstring––
shapestringyes–
textstringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_hierarchical_sheet ~245

Add a hierarchical sheet to a parent schematic with matching labels in the child. Creates the sheet block in the parent and corresponding hierarchical labels in the child schematic. The child schematic must already exist (create it with create_schematic first). Args: parent_schematic_path: Path to parent .kicad_sch sheet_name: Display name for the sheet sheet_file: Path to child .kicad_sch (must exist) pins: List of dicts with 'name' (str) and 'direction' (str) keys. Direction: input, output, bidirectional, tri_state, passive. x: X position of sheet block (default 25.4) y: Y position of sheet block (default 25.4) project_path: Path to .kicad_pro file (for sub-sheet instance tracking)

NameTypeReqDescription
parent_schematic_pathstringyes–
pinsarrayyes–
project_pathstring––
sheet_filestringyes–
sheet_namestringyes–
xnumber––
ynumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_junctions ~79

Add multiple junctions. Each point dict has keys: x, y. Args: points: List of junction positions [{x, y}, ...] schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
pointsarrayyes–
schematic_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_keepout_zone ~221

Create a keep-out zone that restricts placement of specified items. Args: corners: List of {x, y} dicts defining the zone polygon (min 3) layers: Layers to apply keep-out to (default: ["F.Cu", "B.Cu"]) no_tracks: Restrict tracks in this zone no_vias: Restrict vias in this zone no_pads: Restrict pads in this zone no_copper_pour: Restrict copper pour in this zone no_footprints: Restrict footprints in this zone pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
cornersarrayyes–
layers–––
no_copper_pourboolean––
no_footprintsboolean––
no_padsboolean––
no_tracksboolean––
no_viasboolean––
pcb_pathstring––
NameTypeReqDescription
cornersintegeryes–
layersarrayyes–
restrictionsobjectyes–

No examples provided.

add_label ~132

Add a net label at a position. Args: text: Net name (e.g. "VIN_PROT", "5V_REL") x: X position y: Y position rotation: Degrees (0=right, 90=up, 180=left, 270=down) schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
rotationinteger––
schematic_pathstring––
textstringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_lib_symbol ~113

Load a symbol definition from a .kicad_sym library into the schematic. Args: symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default. symbol_name: Symbol name (e.g. "LM7805") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
schematic_pathstring––
symbol_lib_pathstringyes–
symbol_namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_pcb_line ~161

Add a graphic line to the PCB (edge cuts, silkscreen, etc.). Args: x1: Start X y1: Start Y x2: End X y2: End Y layer: Layer (e.g. "Edge.Cuts", "F.SilkS") width: Line width in mm pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
layerstring––
pcb_pathstring––
widthnumber––
x1numberyes–
x2numberyes–
y1numberyes–
y2numberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_pcb_text ~143

Add text to the PCB (silkscreen, fab layer, etc.). Args: text: Text content x: X position y: Y position layer: Layer (e.g. "F.SilkS", "B.SilkS", "F.Fab") rotation: Rotation in degrees pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
layerstring––
pcb_pathstring––
rotationnumber––
textstringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_power_symbol ~259

Place a power symbol (VCC, GND, +3V3, etc.). Uses place_component internally. Power symbols are regular symbols from the 'power' library with isPower=True. Automatically places a PWR_FLAG at the same position so the net satisfies ERC (power pin driven). Args: lib_id: Library ID (e.g. "power:VCC", "power:GND") reference: Reference (e.g. "#PWR01") x: X position y: Y position rotation: Rotation in degrees symbol_lib_path: Path to power symbol .kicad_sym if not in schematic. Optional; omit to use the configured default. schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. project_path: Path to .kicad_pro file (for sub-sheet instance tracking)

NameTypeReqDescription
lib_idstringyes–
project_pathstring––
referencestringyes–
rotationinteger––
schematic_pathstring––
symbol_lib_pathstring––
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_sheet_pin ~140

Add a pin to an existing hierarchical sheet block. Args: sheet_uuid: UUID of the sheet pin_name: Pin name (should match a hierarchical label in the child schematic) connection_type: input, output, bidirectional, tri_state, passive schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default. side: Which sheet edge to place pin on (left or right)

NameTypeReqDescription
connection_typestringyes–
pin_namestringyes–
schematic_pathstring––
sheet_uuidstringyes–
sidestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_symbol ~524

Add a new symbol definition to a .kicad_sym library. Creates a complete symbol with pins and body graphics. If the library file does not exist it will be created. Args: name: Symbol name (e.g. "MP4572GQB-P", "TLV75733PDBVR") pins: Pin definitions — list of dicts, each with keys: number (str): pin number, e.g. "1" name (str): pin name, e.g. "VIN" ("~" for unnamed) type (str): electrical type — "input", "output", "bidirectional", "passive", "power_in", "power_out", "tri_state", "open_collector", "open_emitter", "unconnected", "free" x (float): X position in mm (default 0) y (float): Y position in mm (default 0) rotation (float): angle 0/90/180/270 (default 0) length (float): pin length in mm (default 2.54) reference_prefix: Reference prefix e.g. "U", "R", "C" (default "U") is_power: True for power symbols (default False) pin_names_offset: Pin name label offset in mm (default 0.508) in_bom: Include in BOM (default True) on_board: Place on board (default True) footprint: Default footprint e.g. "Package_SO:SOIC-8" (default "") datasheet: Datasheet URL (default "~") rectangles: Optional body rectangle(s) — list of dicts with keys: x1, y1, x2, y2 (float): corner coordinates in mm fill (str): "none", "background", or "outline" (default "background") If omitted, a rectangle is auto-computed from pin positions. symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.

NameTypeReqDescription
datasheetstring––
footprintstring––
in_bomboolean––
is_powerboolean––
namestringyes–
on_boardboolean––
pin_names_offsetnumber––
pinsarrayyes–
rectangles–––
reference_prefixstring––
symbol_lib_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_text ~102

Add a text annotation to the schematic. Args: text: Text content x: X position y: Y position rotation: Rotation in degrees schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
rotationinteger––
schematic_pathstring––
textstringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_thermal_vias ~228

Add a grid of thermal vias under a footprint pad. Args: reference: Footprint reference (e.g. "U1", "R1") pad_number: Pad number to center vias on. If empty, auto-selects largest SMD pad. rows: Number of rows in the via grid cols: Number of columns in the via grid spacing: Spacing between vias in mm via_size: Via annular ring diameter in mm via_drill: Via drill diameter in mm net_name: Net to assign to vias. If None, auto-detect from pad. pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
colsinteger––
net_name–––
pad_numberstring––
pcb_pathstring––
referencestringyes–
rowsinteger––
spacingnumber––
via_drillnumber––
via_sizenumber––
NameTypeReqDescription
centerobjectyes–
netstringyes–
padstringyes–
referencestringyes–
vias_addedintegeryes–

No examples provided.

add_trace ~163

Add a trace segment between two points. Args: x1: Start X y1: Start Y x2: End X y2: End Y width: Trace width in mm layer: Copper layer (e.g. "F.Cu", "B.Cu") net: Net number pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
layerstring––
netinteger––
pcb_pathstring––
widthnumber––
x1numberyes–
x2numberyes–
y1numberyes–
y2numberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_via ~142

Add a via at a position. Args: x: X position y: Y position size: Via pad size in mm drill: Drill diameter in mm net: Net number layers: Via layers (default: ["F.Cu", "B.Cu"]) pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
drillnumber––
layers–––
netinteger––
pcb_pathstring––
sizenumber––
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_wires ~95

Add multiple wires at once. Each wire dict has keys: x1, y1, x2, y2. Args: wires: List of wire defs [{x1, y1, x2, y2}, ...] schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
schematic_pathstring––
wiresarrayyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

annotate_schematic ~122

Auto-assign reference designators to unannotated components. Finds components with '?' in their reference (e.g. R?, U?) and assigns sequential numbers, respecting existing references in the schematic and across the hierarchy when project_path is provided. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. project_path: Path to .kicad_pro file (scans hierarchy for existing refs)

NameTypeReqDescription
project_pathstring––
schematic_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

auto_place_decoupling_cap ~318

Place a decoupling capacitor and wire it to power/ground nets. Places the cap, wires pin 1 (top) to power_net and pin 2 (bottom) to ground_net via stub wires + labels. Args: lib_id: Cap symbol (e.g. "Device:C") reference: Reference (e.g. "C5") value: Cap value (e.g. "100nF") x: X position y: Y position power_net: Label for pin 1 (e.g. "VCC", "+3V3") ground_net: Label for pin 2 (e.g. "GND", "PGND") rotation: Rotation in degrees (default 0) symbol_lib_path: Path to .kicad_sym if using custom lib. Optional; omit to use the configured default. schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. project_path: Path to .kicad_pro file (for sub-sheet instance tracking)

NameTypeReqDescription
ground_netstringyes–
lib_idstringyes–
power_netstringyes–
project_pathstring––
referencestringyes–
rotationinteger––
schematic_pathstring––
symbol_lib_pathstring––
valuestringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

autoroute_pcb ~280

Autoroute PCB traces using the Freerouting autorouter. Exports the board to Specctra DSN format, runs Freerouting for automated trace routing, and imports the results into a new PCB file. The original board is never modified. Requires Java 17+ and KiCad's pcbnew Python bindings, whose major version has to match the board's format era. On first run, the Freerouting JAR is auto-downloaded (~20MB). Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. max_passes: Maximum autorouter optimization passes num_threads: Thread count for routing. Defaults to 1 because freerouting prints "Multi-threaded route optimization is broken and it is known to generate clearance violations" on every run. Raise it only if you are willing to DRC the result carefully. timeout: Max seconds to wait for routing (default: 600) output_dir: Directory for output files (default: same as PCB). Optional; omit to use the configured default.

NameTypeReqDescription
max_passesinteger––
num_threadsinteger––
output_dirstring––
pcb_pathstring––
timeoutinteger––
NameTypeReqDescription
drc_unconnected–––
drc_violations–––
keepouts_promotedinteger––
routed_pathstringyes–
text_fields_fixedintegeryes–
traces_addedintegeryes–
vias_addedintegeryes–
warningsarray––

No examples provided.

check_placement ~168

Check if placing/moving a footprint to (x, y) would violate constraints. Both checks are on the footprint's origin point, not its courtyard, so a footprint whose body overlaps a keep-out while its origin does not still reports ok. That is also why there is no rotation parameter: rotating about the origin cannot move the origin, so an angle could not change either answer. Args: reference: Footprint reference designator x: Proposed X position y: Proposed Y position pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
pcb_pathstring––
referencestringyes–
xnumberyes–
ynumberyes–
NameTypeReqDescription
board_edge_checkedbooleanyes–
keepout_violationsarrayyes–
outside_board_edgebooleanyes–
statusstringyes–

No examples provided.

connect_pins ~153

Connect two component pins with Manhattan (L-shaped) wire routing. Combines get_pin_positions + coordinate math + add_wires into one call. Args: ref1: First component reference (e.g. "U1") pin1: First pin name or number ref2: Second component reference (e.g. "C3") pin2: Second pin name or number schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
pin1stringyes–
pin2stringyes–
ref1stringyes–
ref2stringyes–
schematic_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

create_project ~75

Create a KiCad 9 project (.kicad_pro + .kicad_prl + .kicad_sch). Args: directory: Directory to create the project in (created if missing) name: Project name (used for filenames)

NameTypeReqDescription
directorystringyes–
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

create_schematic ~56

Create a valid empty KiCad 9 schematic file. Args: schematic_path: Path for the new .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
schematic_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

create_sym_lib_table ~87

Create a sym-lib-table file in the given directory. Each entry dict needs 'name' and 'uri' keys. Overwrites existing sym-lib-table if present. Args: directory: Directory to write sym-lib-table in entries: List of dicts with 'name' and 'uri' keys

NameTypeReqDescription
directorystringyes–
entriesarrayyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

create_symbol_library ~57

Create a valid empty KiCad 9 symbol library. Args: symbol_lib_path: Path for the new .kicad_sym file. Optional; omit to use the configured default.

NameTypeReqDescription
symbol_lib_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

duplicate_sheet ~144

Duplicate a hierarchical sheet, copying the child file with new UUIDs. Args: sheet_uuid: UUID of the sheet to duplicate new_sheet_name: Display name for the new sheet schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default. project_path: Path to .kicad_pro (for hierarchy metadata) new_file_name: Name for the copied file (auto-generated if empty)

NameTypeReqDescription
new_file_namestring––
new_sheet_namestringyes–
project_pathstring––
schematic_pathstring––
sheet_uuidstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

export_3d ~215

Export PCB 3D model or render 3D view to image. `render` fills width, height and side; the mesh formats leave them unset. Args: format: Output format - "step", "stl", "glb", or "render" (PNG image) pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. output_dir: Output directory. Optional; omit to use the configured default. width: Image width in pixels (render only) height: Image height in pixels (render only) side: View side: top, bottom, left, right, front, back (render only) quality: Render quality: basic, high (render only)

NameTypeReqDescription
formatstring––
heightinteger––
output_dirstring––
pcb_pathstring––
qualitystring––
sidestring––
widthinteger––
NameTypeReqDescription
formatstringyes–
height–––
pathstringyes–
side–––
size_bytesintegeryes–
width–––

No examples provided.

export_bom ~77

Export Bill of Materials (BOM) as CSV. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. output_dir: Output directory. Optional; omit to use the configured default.

NameTypeReqDescription
output_dirstring––
schematic_pathstring––
NameTypeReqDescription
component_countintegeryes–
formatstringyes–
note–––
pathstringyes–
size_bytesintegeryes–

No examples provided.

export_footprint_svg ~81

Export footprint to SVG. Args: footprint_path: Path to a .kicad_mod file, or a .pretty library directory. Optional; omit to use the configured default. output_dir: Output directory. Optional; omit to use the configured default.

NameTypeReqDescription
footprint_pathstringyes–
output_dirstring––
NameTypeReqDescription
countintegeryes–
filesarrayyes–
formatstringyes–
pathstringyes–

No examples provided.

export_gerbers ~186

Export Gerber files for manufacturing. When layers contains exactly one layer, exports a single Gerber file: path names it, and size_bytes and layer are filled. Otherwise exports all layers (or the specified subset) plus optional drill files, and path names the output directory. files and count are filled either way. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. output_dir: Output directory for gerber files. Optional; omit to use the configured default. include_drill: Also export drill files (default: True, ignored in single-layer mode) layers: Optional list of layer names. Single layer = single file output.

NameTypeReqDescription
include_drillboolean––
layers–––
output_dirstring––
pcb_pathstring––
NameTypeReqDescription
countintegeryes–
drill_countinteger––
drill_filesarray––
filesarrayyes–
formatstringyes–
layer–––
note–––
pathstringyes–
size_bytes–––

No examples provided.

export_hierarchical_netlist ~117

Export a netlist from the root schematic, including hierarchy info. Runs kicad-cli to generate a netlist and returns parsed component/net data with sheet path information for each component. Args: schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default. output_dir: Directory for netlist output (defaults to schematic directory). Optional; omit to use the configured default.

NameTypeReqDescription
output_dirstring––
schematic_pathstring––
NameTypeReqDescription
component_countintegeryes–
componentsarrayyes–
net_countintegeryes–
netsarrayyes–
output_pathstringyes–

No examples provided.

export_ipc2581 ~144

Export PCB in IPC-2581 format for manufacturing data exchange. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. output: Output file path precision: Numeric precision (default: 3) compress: Compress output file version: IPC-2581 version (default: "C") units: Output units - "mm" or "in"

NameTypeReqDescription
compressboolean––
outputstring––
pcb_pathstring––
precisioninteger––
unitsstring––
versionstring––
NameTypeReqDescription
formatstringyes–
note–––
pathstringyes–
size_bytesintegeryes–

No examples provided.

export_netlist ~95

Export a schematic netlist. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. output_dir: Output directory. Optional; omit to use the configured default. format: Netlist format. spice and spicemodel produce simulator input.

NameTypeReqDescription
formatstring––
output_dirstring––
schematic_pathstring––
NameTypeReqDescription
formatstringyes–
note–––
pathstringyes–
size_bytesintegeryes–

No examples provided.

export_pcb ~246

Export PCB to PDF, SVG, or DXF format. Args: format: Output format - "pdf", "svg", or "dxf" pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. output_dir: Directory for output files. Optional; omit to use the configured default. layers: Optional list of layer names to include (required for DXF) output_units: DXF output units - "in" or "mm" (DXF only) exclude_refdes: Exclude reference designators (DXF only) exclude_value: Exclude component values (DXF only) use_contours: Use board outline contours (DXF only) include_border_title: Include border and title block (DXF only)

NameTypeReqDescription
exclude_refdesboolean––
exclude_valueboolean––
formatstring––
include_border_titleboolean––
layers–––
output_dirstring––
output_unitsstring––
pcb_pathstring––
use_contoursboolean––
NameTypeReqDescription
formatstringyes–
layersarrayyes–
note–––
pathstringyes–
size_bytesintegeryes–

No examples provided.

export_positions ~74

Export component position file (pick and place). Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. output_dir: Output directory. Optional; omit to use the configured default.

NameTypeReqDescription
output_dirstring––
pcb_pathstring––
NameTypeReqDescription
component_countintegeryes–
formatstringyes–
note–––
pathstringyes–
size_bytesintegeryes–

No examples provided.

export_schematic ~144

Export schematic to PDF, SVG, or DXF format. pdf and dxf produce one file, so path names it and size_bytes is filled. svg produces one file per sheet, so path names the directory. files and count are filled either way. Args: format: Output format - "pdf", "svg", or "dxf" schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. output_dir: Directory for output files. Optional; omit to use the configured default.

NameTypeReqDescription
formatstring––
output_dirstring––
schematic_pathstring––
NameTypeReqDescription
countintegeryes–
filesarrayyes–
formatstringyes–
pathstringyes–
size_bytes–––

No examples provided.

export_symbol_svg ~74

Export symbol library to SVG images. Args: symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default. output_dir: Output directory. Optional; omit to use the configured default.

NameTypeReqDescription
output_dirstring––
symbol_lib_pathstring––
NameTypeReqDescription
countintegeryes–
filesarrayyes–
formatstringyes–
pathstringyes–

No examples provided.

fill_zones ~148

Fill all copper zones on the board using pcbnew's zone filler. pcbnew computes the fill; this server writes it. The board is handed to pcbnew read-only and the computed polygons come back as data, so the file that reaches the disk is the original with its zones' fills replaced and every other byte untouched. Nothing else about it changes: not its format version, not its layer names, not the constructs pcbnew does not model. Requires KiCad's pcbnew Python bindings to be installed. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
pcb_pathstring––
NameTypeReqDescription
statusstringyes–
warningsarray––
zones_filledintegeryes–

No examples provided.

flatten_hierarchy ~104

Flatten a hierarchical schematic into a single sheet. Merges all child sheet content into one schematic with offset positions. Creates a new file — does NOT modify the original hierarchy. Args: schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default. output_path: Path for flattened output (defaults to *_flat.kicad_sch)

NameTypeReqDescription
output_pathstring––
schematic_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

get_board_info ~57

Get board summary: footprint count, trace count, net count, thickness. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
pcb_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

get_footprint_bounds ~71

Get the board-coordinate bounding box of a placed footprint. Args: reference: Footprint reference designator pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
pcb_pathstring––
referencestringyes–
NameTypeReqDescription
courtyard–yes–
layerstringyes–
positionobjectyes–
referencestringyes–
rotationnumberyes–

No examples provided.

get_footprint_info ~58

Get pad and outline details for a footprint .kicad_mod file. Args: footprint_path: Path to .kicad_mod file. Optional; omit to use the configured default.

NameTypeReqDescription
footprint_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

get_footprint_pads ~81

Get pad info for a placed footprint on the PCB. Args: reference: Footprint reference (e.g. "R1", "U1") pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.

NameTypeReqDescription
pcb_pathstring––
referencestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

get_net_connections ~102

Find all component pins connected to a net label. Scans labels matching the text, traces wires from label positions, and identifies component pins at wire endpoints. Args: label_text: Net name to search for (e.g. "VCC", "GND") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
label_textstringyes–
schematic_pathstring––
NameTypeReqDescription
connectionsarrayyes–
label_countintegeryes–
netstringyes–

No examples provided.

get_pin_positions ~81

Get absolute pin positions for a placed component (accounts for rotation/mirror). Args: reference: Component reference (e.g. "U1", "R1") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
referencestringyes–
schematic_pathstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

get_schematic_summary ~51

Get schematic page info and item counts. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.

NameTypeReqDescription
schematic_pathstring––
NameTypeReqDescription
componentsintegeryes–
global_labelsintegeryes–
hierarchical_labelsintegeryes–
junctionsintegeryes–
labelsintegeryes–
no_connectsintegeryes–
page_height_mmnumberyes–
page_sizestringyes–
page_width_mmnumberyes–
sheetsintegeryes–
wiresintegeryes–

No examples provided.

get_sheet_info ~72

Get detailed info about a hierarchical sheet including pin/label matching. Args: sheet_uuid: UUID of the sheet schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.

NameTypeReqDescription
schematic_pathstring––
sheet_uuidstringyes–
NameTypeReqDescription
component_count–––
file_namestringyes–
heightnumberyes–
hierarchical_label_count–––
label_count–––
pinsarrayyes–
sheet_namestringyes–
uuidstringyes–
widthnumberyes–
xnumberyes–
ynumberyes–

No examples provided.

Common questions

What is the KiCad Tools MCP server?

KiCad Tools is an MCP server listed in the public MCP registry as io.github.ProductOfAmerica/mcp-server-kicad. Byte-preserving KiCad automation: 100+ tools for schematics, PCB layout, ERC, DRC, exports. This page covers its PyPI package (mcp-server-kicad).

Is the KiCad Tools MCP server safe to use?

KiCad Tools scores 77 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the KiCad Tools MCP server expose?

KiCad Tools exposes 109 tools: get_schematic_summary, list_schematic_components, list_schematic_labels, list_schematic_wires, list_schematic_global_labels, and 104 more. Their descriptions and schemas cost roughly 13,808 tokens of context every time the server is loaded.

Is the KiCad Tools MCP server still maintained?

KiCad Tools is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the KiCad Tools MCP server under?

KiCad Tools declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.