KiCad Tools
PYPI · MCP-SERVER-KICAD · SCANNED OCT 4
Byte-preserving KiCad automation: 100+ tools for schematics, PCB layout, ERC, DRC, exports
Available components
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
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
claude mcp add productofamerica-mcp-server-kicad -- uvx mcp-server-kicad
{
"mcpServers": {
"productofamerica-mcp-server-kicad": {
"command": "uvx",
"args": [
"mcp-server-kicad"
]
}
}
} {
"servers": {
"productofamerica-mcp-server-kicad": {
"command": "uvx",
"args": [
"mcp-server-kicad"
]
}
}
} codex mcp add productofamerica-mcp-server-kicad -- uvx mcp-server-kicad
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"productofamerica-mcp-server-kicad": {
"type": "local",
"command": [
"uvx",
"mcp-server-kicad"
],
"enabled": true
}
}
} openclaw mcp add productofamerica-mcp-server-kicad --command uvx --arg mcp-server-kicad
mcp_servers:
productofamerica-mcp-server-kicad:
command: "uvx"
args: ["mcp-server-kicad"] {
"McpServers": {
"productofamerica-mcp-server-kicad": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"mcp-server-kicad"
]
}
}
} assistant mcp add productofamerica-mcp-server-kicad -t stdio -c uvx -a mcp-server-kicad
{
"mcpServers": {
"productofamerica-mcp-server-kicad": {
"command": "uvx",
"args": [
"mcp-server-kicad"
]
}
}
} 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.
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 →
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 →
get_symbol_info Symbol details from a library file ~79
Get detailed pin and property info for a symbol in a library. Args: symbol_name: Symbol name (e.g. "LM7805") symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol_lib_path | string | – | – |
| symbol_name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_symbol_instances ~56
List all symbol instances from a root schematic's symbolInstances table. Args: schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| instances | array | yes | – |
No examples provided.
get_symbol_pins Symbol pins from the schematic's embedded library ~85
Get pin info for a symbol in the schematic's lib_symbols. Args: symbol_name: Symbol name (e.g. "LM7805", "C", "Fuse") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| symbol_name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_version ~20
Get KiCad version information including build details and library versions.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| version_info | string | yes | – |
No examples provided.
is_root_schematic ~55
Check if a schematic is the root or a sub-sheet. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| is_root | boolean | yes | – |
| root_path | – | yes | – |
No examples provided.
list_cross_sheet_nets ~60
List all nets that cross sheet boundaries (hierarchical pins and global labels). Args: schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| global_nets | array | yes | – |
| hierarchical_nets | array | yes | – |
No examples provided.
list_hierarchy ~54
List the full sheet hierarchy starting from a root schematic. Args: schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| component_count | integer | yes | – |
| root | string | yes | – |
| sheet_count | integer | yes | – |
| sheets | array | yes | – |
No examples provided.
list_lib_footprints ~48
List all footprints in a .pretty library directory. Args: pretty_dir: Path to .pretty directory containing .kicad_mod files
| Name | Type | Req | Description |
|---|---|---|---|
| pretty_dir | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_lib_symbols ~56
List all symbols in a .kicad_sym library file. Args: symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol_lib_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_pcb_footprints ~52
List all footprints on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_pcb_graphic_items ~60
List all graphic items (lines, text, etc.) on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_pcb_layers ~115
List all layers defined in the PCB stackup: copper, silkscreen, soldermask, solder paste, courtyard, fabrication, and the board outline. Which of those a given board actually defines is up to the board. Call this before any tool that takes a layer name, since the valid set is per-board and renamed layers are common. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_pcb_nets ~52
List all named nets on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_pcb_traces ~54
List all trace segments and vias on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_pcb_zones ~58
List all zones (copper and keepout) on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_bus_entries ~52
List all bus entries in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_components ~51
List all placed components in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_global_labels ~52
List all global labels in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_hierarchical_labels ~54
List all hierarchical labels in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_junctions ~53
List all junctions in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_labels ~51
List all net labels in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_no_connects ~54
List all no-connect flags in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_sheets ~52
List all hierarchical sheets in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_schematic_wires ~52
List all wire segments in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_unconnected_pins ~134
List unconnected pins by running ERC and filtering results. Requires kicad-cli. Auto-redirects to root schematic for sub-sheets to avoid false positives from hierarchical label context. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. output_dir: Directory for ERC report file. Optional; omit to use the configured default. project_path: Path to .kicad_pro file for explicit root resolution
| Name | Type | Req | Description |
|---|---|---|---|
| output_dir | string | – | – |
| project_path | string | – | – |
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| note | – | – | – |
| pins | array | yes | – |
| unconnected_count | integer | yes | – |
No examples provided.
modify_hierarchical_label ~163
Modify an existing hierarchical label. Args: text: Current label text to find schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. new_text: New label text (empty = keep current) new_shape: New shape/direction (empty = keep current) new_x: New X position (None = keep current) new_y: New Y position (None = keep current) uuid: UUID for disambiguation
| Name | Type | Req | Description |
|---|---|---|---|
| new_shape | string | – | – |
| new_text | string | – | – |
| new_x | – | – | – |
| new_y | – | – | – |
| schematic_path | string | – | – |
| text | string | yes | – |
| uuid | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
modify_hierarchical_sheet ~153
Modify properties of an existing hierarchical sheet block. Args: sheet_uuid: UUID of the sheet to modify (from list_schematic_sheets) schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default. sheet_name: New display name (empty = keep) file_name: New file path (empty = keep) width: New width in mm (None = keep) height: New height in mm (None = keep)
| Name | Type | Req | Description |
|---|---|---|---|
| file_name | string | – | – |
| height | – | – | – |
| schematic_path | string | – | – |
| sheet_name | string | – | – |
| sheet_uuid | string | yes | – |
| width | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
move_component ~117
Move a placed component to a new position. Args: reference: Reference designator (e.g. "R1") x: New X position y: New Y position rotation: New rotation in degrees (None = keep current) schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| reference | string | yes | – |
| rotation | – | – | – |
| schematic_path | string | – | – |
| x | number | yes | – |
| y | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
move_footprint ~196
Move a footprint to a new position. Args: reference: Reference designator (e.g. "R1") x: New X position y: New Y position rotation: New rotation (None = keep current) layer: New layer. Naming the other side flips the footprint: every pad, graphic and text layer mirrors with it, the local geometry mirrors, and text gains a mirrored justification, which is what KiCad's own flip does. A footprint carrying a construct whose flip has not been measured here is refused rather than half-transformed. pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| layer | string | – | – |
| pcb_path | string | – | – |
| reference | string | yes | – |
| rotation | – | – | – |
| x | number | yes | – |
| y | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
move_hierarchical_sheet ~113
Move a hierarchical sheet block to a new position, including all pins. Args: sheet_uuid: UUID of the sheet to move new_x: New X position in mm new_y: New Y position in mm schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| new_x | number | yes | – |
| new_y | number | yes | – |
| schematic_path | string | – | – |
| sheet_uuid | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
no_connect_pin ~131
Place a no-connect flag on a component pin. Resolves pin position and places a no-connect flag. Idempotent: calling again for a pin that already has one is a no-op. Args: reference: Component reference (e.g. "U2") pin_name: Pin name (e.g. "NC") or number (e.g. "3") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pin_name | string | yes | – |
| reference | string | yes | – |
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
place_component ~322
Place a schematic symbol: resistor, capacitor, inductor, diode, LED, transistor, crystal, switch, connector, or an IC such as a microcontroller or regulator chip. Any lib_id in a library works. Args: lib_id: Library identifier (e.g. "Device:R", "Device:C", "MyLib:MyPart") reference: Reference designator (e.g. "R1", "U1") value: Component value (e.g. "10K", "100nF") x: X position in schematic units (mm) y: Y position in schematic units (mm) rotation: Rotation angle in degrees (0, 90, 180, 270) symbol_lib_path: Path to .kicad_sym file if using custom library. Optional; omit to use the configured default. mirror: Mirror axis ("x", "y", or "" for none) schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. project_path: Path to .kicad_pro file (for correct hierarchy resolution in sub-sheets)
| Name | Type | Req | Description |
|---|---|---|---|
| lib_id | string | yes | – |
| mirror | string | – | – |
| project_path | string | – | – |
| reference | string | yes | – |
| rotation | integer | – | – |
| schematic_path | string | – | – |
| symbol_lib_path | string | – | – |
| value | string | yes | – |
| x | number | yes | – |
| y | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
place_footprint ~337
Place a footprint on the PCB. Name a library and a footprint to place the real thing: its pads, silkscreen, courtyard and 3D model are copied from the library file exactly as KiCad would place them. Without them you get a marker carrying only the reference and value, which has NO PADS and so cannot be routed or checked; that is the older behaviour and it is kept for callers that only want a placeholder. Use list_lib_footprints to see what a library holds. Args: reference: Reference designator (e.g. "R2") value: Component value (e.g. "4.7K") x: X position in mm y: Y position in mm rotation: Rotation in degrees layer: Layer (F.Cu or B.Cu) library: Footprint library nickname (e.g. "Resistor_SMD"), or a path to a .pretty directory. Optional; omit for a pad-less marker. footprint: Footprint name within that library (e.g. "R_0805_2012Metric"). Required when library is given. pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| footprint | string | – | – |
| layer | string | – | – |
| library | string | – | – |
| pcb_path | string | – | – |
| reference | string | yes | – |
| rotation | number | – | – |
| value | string | yes | – |
| x | number | yes | – |
| y | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_component ~72
Remove a component by reference designator. Args: reference: Reference designator to remove (e.g. "U2") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| reference | string | yes | – |
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_dangling_tracks ~88
Detect and remove trace segments with unconnected endpoints. Iteratively removes dangling segments until no more are found. A segment is considered dangling if either endpoint does not connect to a pad, via, or another trace endpoint. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| iterations | integer | yes | – |
| tracks_removed | integer | yes | – |
No examples provided.
remove_footprint ~72
Remove a footprint by reference designator. Args: reference: Reference designator (e.g. "R1") pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | – | – |
| reference | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_hierarchical_label ~91
Remove a hierarchical label by name or UUID. Args: text: Label text to match schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. uuid: Optional UUID for disambiguation when multiple labels share a name
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| text | string | yes | – |
| uuid | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_hierarchical_sheet ~143
Remove a hierarchical sheet block from a parent schematic. Identify the sheet by name, uuid, or both. If name matches multiple sheets, returns an error with UUIDs for disambiguation. Args: parent_schematic_path: Path to parent .kicad_sch name: Sheet name to match uuid: Sheet UUID for unambiguous identification delete_child_file: If True, delete the child .kicad_sch file (unless still referenced by another sheet)
| Name | Type | Req | Description |
|---|---|---|---|
| delete_child_file | boolean | – | – |
| name | – | – | – |
| parent_schematic_path | string | yes | – |
| uuid | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_junction ~76
Remove a junction at the given coordinates. Args: x: X position y: Y position schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| x | number | yes | – |
| y | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_label ~168
Remove net label(s) or global label(s) by text, optionally filtered by position. If x and y are provided, only removes labels matching both text AND position (within 0.1mm tolerance). Otherwise removes ALL labels with matching text. To move a global label, remove it and re-add with add_global_label (which takes shape and rotation). Args: text: Label text to match (e.g. "VCC", "PGND") x: Optional X position filter y: Optional Y position filter schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| text | string | yes | – |
| x | – | – | – |
| y | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_no_connect ~129
Remove no-connect flag(s) from a component pin. Removes every no-connect at the pin's position, so stacked duplicates from repeated no_connect_pin calls clear in one go. Args: reference: Component reference (e.g. "U2") pin_name: Pin name (e.g. "NC") or number (e.g. "3") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pin_name | string | yes | – |
| reference | string | yes | – |
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_sheet_pin ~87
Remove a pin from a hierarchical sheet block. Args: sheet_uuid: UUID of the sheet pin_name: Name of the pin to remove schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| pin_name | string | yes | – |
| schematic_path | string | – | – |
| sheet_uuid | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_text ~129
Remove text annotation(s) by content, optionally filtered by position. If x and y are provided, only removes texts matching both content AND position (within 0.1mm tolerance). Otherwise removes ALL texts with matching content. Args: text: Text content to match x: Optional X position filter y: Optional Y position filter schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| text | string | yes | – |
| x | – | – | – |
| y | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_traces ~189
Remove trace segments matching the given filters. Does not remove vias. At least one filter (net_name, layer, or bounding box) is required. Args: net_name: Filter by net name layer: Filter by layer name (e.g. "F.Cu", "B.Cu") x_min: Left edge of bounding box filter (mm) y_min: Top edge of bounding box filter (mm) x_max: Right edge of bounding box filter (mm) y_max: Bottom edge of bounding box filter (mm) pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| layer | – | – | – |
| net_name | – | – | – |
| pcb_path | string | – | – |
| x_max | – | – | – |
| x_min | – | – | – |
| y_max | – | – | – |
| y_min | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| layer | – | yes | – |
| net | – | yes | – |
| traces_removed | integer | yes | – |
No examples provided.
remove_wire ~138
Remove a wire segment by its endpoint coordinates. Matches wires with endpoints within 0.1mm tolerance (in either order). Use list_schematic_wires to get wire coordinates first. Args: x1: Start X y1: Start Y x2: End X y2: End Y schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | – | – |
| x1 | number | yes | – |
| x2 | number | yes | – |
| y1 | number | yes | – |
| y2 | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
reorder_sheet_pages ~75
Reorder hierarchical sheets by specifying the desired UUID order. Args: page_order: List of sheet UUIDs in desired order schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| page_order | array | yes | – |
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
run_drc ~93
Run Design Rules Check (DRC) on a PCB. Returns structured report with violations. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default. output_dir: Directory for report file (default: same as PCB). Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| output_dir | string | – | – |
| pcb_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| kicad_version | string | yes | – |
| note | – | – | – |
| source | string | yes | – |
| unconnected_count | integer | yes | – |
| unconnected_items | array | yes | – |
| violation_count | integer | yes | – |
| violations | array | yes | – |
No examples provided.
run_erc ~139
Run Electrical Rules Check (ERC) on a schematic. Auto-redirects to root schematic for sub-sheets to avoid false positives from missing hierarchical context. Returns JSON report with violations. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default. output_dir: Directory for report file (default: same as schematic). Optional; omit to use the configured default. project_path: Path to .kicad_pro file for explicit root resolution
| Name | Type | Req | Description |
|---|---|---|---|
| output_dir | string | – | – |
| project_path | string | – | – |
| schematic_path | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| kicad_version | string | yes | – |
| note | – | – | – |
| source | string | yes | – |
| violation_count | integer | yes | – |
| violations | array | yes | – |
No examples provided.
run_jobset ~43
Run a KiCad jobset file. Args: jobset_path: Path to .kicad_jobset file
| Name | Type | Req | Description |
|---|---|---|---|
| jobset_path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
set_component_property ~207
Set any property on a placed component, or rename it. Creates the property if it is missing. Reference, Value and Footprint are mirrored into the symbol's own instances and into the root symbol_instances table, so setting key="Reference" is how a component is renamed and both views stay in step. The root table needs the .kicad_pro to resolve the hierarchy path; a loose .kicad_sch with no project beside it keeps the symbol correct and leaves that table alone. Args: reference: Component reference (e.g. "R1") key: Property name (e.g. "MPN", "Tolerance", "Value") value: Property value schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| reference | string | yes | – |
| schematic_path | string | – | – |
| value | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
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.