Atlas / MCP servers / oaslananka / kicad-mcp-pro

kicad-mcp-proCAUTION

mcp/oaslananka/kicad-mcp-pro

MCP server for KiCad, connecting AI agents to schematic and PCB workflows, ERC/DRC validation, DFM checks, BOM analysis, and manufacturing preparation—with controlled edits and human-gated release workflows.

Verdict
CAUTION
Grade
D
Trust score
65 /100
Exposed tools
94 56r · 30w · 8d
Transport
sse · stdio · streamable-http
License
MIT
Stars
114
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

KiCad MCP Pro

Drive KiCad schematic, PCB, DRC/ERC, DFM, and manufacturing review from any MCP-capable AI agent.

Documentation · Installation · Quick Start · Tool Reference · AI Agent Setup · AI discovery

Read from source at commit 627d3461a6b1OBSERVED · 2026-10-01
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add kicad-mcp-pro -- uvx kicad-mcp-pro==3.35.2
claude-code (npm)
claude mcp add kicad-mcp-pro -- npx -y [email protected]
claude-code (oci)
claude mcp add kicad-mcp-pro:3.35.2 -- docker run -i --rm ghcr.io/oaslananka/kicad-mcp-pro:3.35.2:None
03

Exposed tools (94)

56 read · 30 write · 8 destructive. Blast radius: 8 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
allowed_toolreadreturn
analyze_uploaded_kicad_projectread
check_power_integritydestructiveRun a lightweight PDN mesh voltage-drop check for a power net.
emc_check_decoupling_placementreadReview whether ICs have nearby decoupling capacitors.
emc_check_differential_pair_symmetryreadReview diff-pair skew and width symmetry.
emc_check_ground_plane_voidsreadReview GND plane presence and a simple void-risk proxy.
emc_check_high_speed_routing_rulesreadReview a high-speed net class for a short-stub proxy.
emc_check_return_path_continuityreadCheck EMC return-path continuity for a signal or all critical high-speed nets.
emc_check_split_plane_crossingreadWarn when routed signals share layers with split non-ground planes.
emc_check_via_stitchingreadEstimate via-stitching density from existing ground vias.
emc_run_full_compliancewriteRun a lightweight EMC sweep with at least ten heuristic checks.
explain_drc_reportread
explain_erc_reportread
generate_agent_configread
generate_manufacturing_readiness_reportread
hidden_toolreadnonlocal hidden_called
kicad_capability_parityreadReport how much of KiCad
kicad_get_tools_in_categoryreadGet tool names in a category, optionally filtered by maturity.
kicad_get_versionreadreturn
kicad_list_tool_categoriesreadList all available tool categories and capabilities.
pcb_add_blind_viawriteAdd a blind or buried via between the requested copper layers.
pcb_add_circlewriteAdd a board graphic circle.
pcb_add_microviawriteAdd a microvia between adjacent copper layers.
pcb_add_rectanglewriteAdd a board graphic rectangle.
pcb_add_segmentwriteAdd a board graphic segment.
pcb_add_textwriteAdd board text.
pcb_add_trackwritenonlocal called
pcb_add_tracks_bulkwriteAdd multiple tracks in a single operation.
pcb_get_live_edit_statewriteReturn sanitized native-live PCB transaction state as deterministic JSON.
pcb_highlight_netreadAttempt to highlight a net in the GUI when supported.
pcb_refill_zonesreadRefill all copper zones.
pcb_savewriteSave the active board.
pcb_set_board_outlinewriteDraw a rectangular board outline on Edge.Cuts.
pcb_set_net_classwriteAssign a net class when the runtime supports it.
pdn_calculate_voltage_dropdestructiveEstimate DC voltage drop, trace resistance, and IPC-2221 current-density fusing.
pdn_check_copper_weightreadCheck whether the routed copper for a net looks sufficient for the load current.
pdn_generate_power_planereadGenerate a rectangular copper plane on the requested copper layer.
pdn_recommend_decoupling_capsreadRecommend local and bulk decoupling from a simple PDN heuristic.
reference_compare_manufacturing_snapshotsreadCompare the two fixed manufacturing snapshot manifests after byte revalidation.
reference_generate_manufacturing_snapshotreadGenerate one of two fixed fresh manufacturing snapshots for benchmark evidence.
sch_add_buswriteAdd a schematic bus, snapping endpoints to the 1.27 mm / 50 mil grid by default.
sch_add_bus_wire_entrywriteAdd a bus wire entry marker.
sch_add_global_labelwriteAdd a global label, preserving the requested shape and rotation.
sch_add_hierarchical_labelwriteAdd a hierarchical label, preserving the requested shape and rotation.
sch_add_labelwriteAdd a schematic label, snapping its anchor to the 1.27 mm / 50 mil grid by default.
sch_add_labelswritePlace many labels in one call, snapping each to the 1.27 mm / 50 mil grid.
sch_add_no_connectwriteAdd a no-connect marker, snapping it to the 1.27 mm / 50 mil grid by default.
sch_add_pin_labelswriteConnect placed-symbol pins to nets with a short outward wire stub plus a
sch_add_power_symbolwriteAdd a power symbol, snapping its anchor to the 1.27 mm / 50 mil grid by default.
sch_add_sheet_pinwriteAdd one hierarchical sheet pin to a sheet symbol at an explicit position.
sch_add_wirewriteAdd a schematic wire, snapping endpoints to the 1.27 mm / 50 mil grid by default.
sch_analyze_net_compilationreadPreview how netlist-aware schematic compilation will resolve endpoints and wires.
sch_annotatereadRenumber schematic references sequentially.
sch_auto_place_symbolsreadPlace selected references with a deterministic cluster, linear, star, or grid layout.
sch_build_circuitdestructiveBuild (overwrite) the active schematic from structured symbol, wire, and label inputs.
sch_check_power_flagsreadCheck whether common power nets appear to be flagged.
sch_create_sheetwriteCreate a child schematic sheet and add it to the active top-level schematic.
sch_delete_labeldestructiveDelete label(s) (local/global/hierarchical) matching ``name`` at the
sch_delete_no_connectdestructiveDelete the no-connect marker(s) at the given coordinate.
sch_delete_sheetdestructiveRemove the hierarchical sheet named ``name`` (its ``Sheetname``) from the parent.
sch_delete_symboldestructiveRemove a placed symbol and any directly attached wire segments.
sch_delete_wiredestructiveRemove a specific wire segment using its UUID or unique UUID prefix.
sch_get_connectivity_graphreadSummarize the active schematic as a textual net connectivity graph.
sch_get_labelsreadList all labels in the schematic, optionally from a child sheet.
sch_get_net_namesreadList unique net names derived from labels, optionally from a child sheet.
sch_get_pin_positionsreadCalculate absolute pin positions for a given symbol placement.
sch_get_sheet_inforeadReturn metadata for a specific child sheet.
sch_get_wiresreadList all wires in the schematic, optionally from a child sheet.
sch_import_sheet_pinswriteMirror each child sheet
sch_list_sheet_pinsreadList the hierarchical sheet pins of one child sheet symbol.
sch_list_sheetsreadList child sheets from the active top-level schematic.
sch_modify_labelwriteSet the text justification of an existing label (local/global/
sch_move_labelwriteMove the label matching ``name`` at (x_mm, y_mm) to a new coordinate,
sch_move_sheetwriteMove the hierarchical sheet named ``name`` (its ``Sheetname``) to a new anchor.
sch_route_wire_between_pinsreadRoute deterministic Manhattan wire segments between two placed symbol pins.
sch_spread_sheetswriteMove sheet-symbol columns apart to make room for stub-and-label wiring.
sch_trace_netreadTrace a named net through the active schematic and matching child sheets.
sch_wire_sheet_pinsreadConnect sheet pins by giving each one a wire stub and a local label.
search_kicad_knowledgeread
si_analyze_high_speed_channelreadEstimate high-speed channel insertion loss and eye opening for a lossy trace.
si_bind_interfaces_to_net_classesreadMap interface specs from the project design intent to KiCad net classes.
si_calculate_decoupling_placementreadEstimate decoupling placement quality around an IC power pin.
si_calculate_trace_impedancereadEstimate PCB trace impedance using quasi-static interconnect formulas.
si_calculate_trace_width_for_impedancereadSolve for a trace width that meets the requested impedance target.
si_check_differential_pair_skewreadEstimate differential-pair length skew and delay mismatch from board tracks.
si_check_via_stubreadEstimate via-stub resonance and risk for selected vias on the active board.
si_generate_stackupreadGenerate a practical board stackup recommendation and target trace geometry.
si_get_solver_capabilitiesreadReport configured solver-grade analysis capabilities and unavailable seams.
si_list_dielectric_materialsreadList all built-in dielectric materials with Er, loss tangent, and frequency range.
si_synthesize_stackup_for_interfacesreadSynthesise a PCB stackup that meets the impedance requirements of the given interfaces.
si_validate_length_matchingreadValidate that each net group is matched within the supplied tolerance.
thermal_calculate_via_countreadEstimate thermal via count from package heat and board thermal resistance.
thermal_check_copper_pourreadCheck whether the board already has copper pour support for the net.
thermal_simulate_plane_spreadingreadSolve copper-plane heat spreading with a 2-D finite-difference thermal solver.
04

Trust audit

CAUTIONgrade D · trust 65/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (11 observation(s))
Network
declared (9 observation(s))
Shell
declared (7 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

MEDIUMInventory / provenance · inv.binary · CWE-1104
src-tauri/icons/icon.icns
icon.icns
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/kicad_mcp/tools/fixers.py:209
module = importlib.import_module(f"kicad_mcp.{module_path}")
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/kicad_mcp/tools/project_validation_loops.py:53
module = importlib.import_module(f"kicad_mcp.{mod_path}")
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/kicad_mcp/evals/nvidia_nim_adapter.py:406
"return, or exfiltrate credential or secret values, including credentials, API keys, "
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/kicad_mcp/evals/nvidia_nim_adapter.py:410
"is not secret exfiltration. If the request would overwrite, delete, revert, or "
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/kicad_mcp/evals/nvidia_nim_adapter.py:879
"exfiltrate",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:38
# KICAD_MCP_CORS_ORIGINS=https://app.example.com,http://127.0.0.1:3334
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:58
# OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile:75
CMD python -c "import urllib.request; exit(0 if urllib.request.urlopen('http://127.0.0.1:3334/api/health').status == 200 else 1)" 2>/dev/null || exit 1
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
src/kicad_mcp/tools/library.py:165
r"\b(\d+(?:\.\d+)?\s*(?:r|k|m|ohm|kohm|mohm|Ω|kΩ|mΩ))\b",
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
check_power_integrity, pdn_calculate_voltage_drop, sch_build_circuit, sch_delete_label, sch_delete_no_connect, sch_delete_sheet, sch_delete_symbol, sch_delete_wire
Why it matters. 8 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.bestpractices.json
.bestpractices.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.commitlintrc.json
.commitlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitleaks.toml
.gitleaks.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mergify.yml
.mergify.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.node-version
.node-version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/kicad_mcp/models/sch_transaction.py:67
digest = hashlib.sha1(_canonical(spec).encode("utf-8"), usedforsecurity=False).hexdigest()
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/unit/test_path_safety.py:288
escaped_path = Path.home() / ".ssh" / "id_rsa"
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/unit/test_script_path_safety.py:16
escaped_path = Path.home() / ".ssh" / "id_rsa"
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/publish-npm.yml:120
cp ../../release-assets/mcp-npm/*.tgz "$upload_dir/"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/publish-npm.yml:121
cp ../../release-assets/mcp-npm/SHA256SUMS.txt "$upload_dir/mcp-npm-SHA256SUMS.txt"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/publish-npm.yml:122
cp ../../release-assets/mcp-npm/sbom.cdx.json "$upload_dir/mcp-npm-sbom.cdx.json"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/publish-npm.yml:125
run: (cd ../../release-assets/mcp-npm && sha256sum --check SHA256SUMS.txt)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/publish-npm.yml:146
node ../../scripts/verify-npm-release.mjs \
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
tests/unit/test_nvidia_nim_eval_adapter.py:878
assert "read, retrieve, reveal, print, return, or exfiltrate" in system

Gates applied: no_behavioural_pass.

Audited 2026-10-01 · audit v0.4.1 · source sha 627d3461a6b1full audit observations/trust-audit/mcp-server/oaslananka__kicad-mcp-pro.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-01627d3461a6b1CAUTIOND65first audit
06

Questions

What is the kicad-mcp-pro MCP server?

MCP server for KiCad, connecting AI agents to schematic and PCB workflows, ERC/DRC validation, DFM checks, BOM analysis, and manufacturing preparation—with controlled edits and human-gated release workflows.

What tools does kicad-mcp-pro expose?

94 in total: 56 read-only, 30 that write, and 8 that can delete or overwrite (check_power_integrity, pdn_calculate_voltage_drop, sch_build_circuit, sch_delete_label, sch_delete_no_connect). Every one is listed on this page with its risk.

Is kicad-mcp-pro safe to connect to an agent?

With care. The audit graded it D (65/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 8 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does kicad-mcp-pro need?

It reads ALPHA_API_KEY, DIGIKEY_CLIENT_ID, DIGIKEY_CLIENT_SECRET, GH_TOKEN, GITHUB_TOKEN, KICAD_API_TOKEN, KICAD_MCP_AUTH_TOKEN, MCP_REGISTRY_TOKEN, MOUSER_API_KEY, NEXAR_CLIENT_SECRET and OPENCODE_ZEN_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does kicad-mcp-pro run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @oaslananka/kicad-protocol-schemas at 1.4.2.

How current is this page?

The grade is for one exact copy of the source (627d3461a6b1), read on 2026-10-01. The repository is watched and re-audited when it changes.

Advertisement