Kicad Mcp Pro (oaslananka) MCP Server

kicad-mcp-pro PyPI v3.34.0

Published by oaslananka — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.

Production-grade MCP server for KiCad EDA—PCB design, DRC, simulation, BOM, DFM, and manufacturing.

Trust grade
A
93/100
Last scanned get badge →
Trust
A · 93/100
Adoption risk for you: the threat score, then adjusted down for blast radius, publisher verification and how much the scan could see. Deterministic; every point is auditable.
Capability
High
Blast radius if it went rogue — what the server’s tools could reach. Independent of trust.
Coverage
Source
How much the scan could actually inspect. Shallow coverage is stated, never hidden.
Share this Trust Score
𝕏 Share LinkedIn Reddit
A Why this grade threat 100 − adoption risk = 93/100

The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.

1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:

The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.

2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:

PointsAdoption-risk factor
−6 capability blast radius (high) — client exposure if the model is manipulated
−1 publisher verification (public source) — no provenance, but the source is public and inspectable

Capability observations and info notes are shown under Findings but never scored. Open any row's finding below for the file, line and evidence behind a deduction.

Findings 11

high Shell/command execution in server code (src/kicad_mcp/bridge.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/bridge.py:526`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: 0000200 proc = subprocess.Popen( args, stdout=subprocess.DEVNULL, stderr=su

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/bridge.py

high Shell/command execution in server code (src/kicad_mcp/diagnostics.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/diagnostics.py:283`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: try: result = subprocess.run( [git_executable, "-C", str(repo), *args], check=False,

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/diagnostics.py

high Shell/command execution in server code (src/kicad_mcp/discovery.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/discovery.py:148`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: try: result = subprocess.run( [str(cli_path), "--version"], capture_output=True,

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/discovery.py

high Shell/command execution in server code (src/kicad_mcp/evals/live_adapters.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/evals/live_adapters.py:395`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: completed = subprocess.run( list(self._configuration.command), input=request

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/evals/live_adapters.py

high Shell/command execution in server code (src/kicad_mcp/evals/reference_agent_runner.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/evals/reference_agent_runner.py:690`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ry: completed = subprocess.run( command, input=prompt, cwd=workspace.checkou

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/evals/reference_agent_runner.py

high Shell/command execution in server code (src/kicad_mcp/evals/release_policy.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/evals/release_policy.py:240`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ble, None) result = subprocess.run( [git, *arguments], cwd=repo_root, check=False, c

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/evals/release_policy.py

high Shell/command execution in server code (src/kicad_mcp/server.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/server.py:3251`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: cmd=cmd) proc = subprocess.Popen( cmd, stdout=sys.stdout, stderr=sys.stderr,

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/server.py

high Shell/command execution in server code (src/kicad_mcp/setup.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/setup.py:895`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: result = subprocess.run( [claude_path, "mcp", "list"], capture_ou

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/setup.py

high Shell/command execution in server code (src/kicad_mcp/tools/export_support.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/tools/export_support.py:68`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: result = subprocess.run( [str(cfg.kicad_cli), *args], cap

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/tools/export_support.py

high Shell/command execution in server code (src/kicad_mcp/tools/manufacturing.py)MTC-SRC-002

In the server's implementation (`src/kicad_mcp/tools/manufacturing.py:262`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: y: result = subprocess.run( cmd, capture_output=True, text=T

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/tools/manufacturing.py

medium Dynamic module load from a non-literal (src/kicad_mcp/tools/schematic.py)MTC-SRC-005

In the server's implementation (`src/kicad_mcp/tools/schematic.py:2075`): Loading a module chosen at runtime (from a variable) can pull in and run attacker-influenced code paths. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: metadata contract = __import__( "kicad_mcp.models.live_preview", fromlist=["LivePreviewPayload"] ).LiveP

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/kicad_mcp/tools/schematic.py

Tools 82

Each tool and what it can reach — statically extracted from the published source.

  • check_power_integrityno sensitive capability
  • emc_check_decoupling_placementno sensitive capability
  • emc_check_differential_pair_symmetryno sensitive capability
  • emc_check_ground_plane_voidsno sensitive capability
  • emc_check_high_speed_routing_rulesno sensitive capability
  • emc_check_return_path_continuityno sensitive capability
  • emc_check_split_plane_crossingno sensitive capability
  • emc_check_via_stitchingno sensitive capability
  • emc_run_full_complianceno sensitive capability
  • kicad_capability_parityno sensitive capability
Show 72 more tools ↓
  • kicad_get_tools_in_categoryno sensitive capability
  • kicad_list_tool_categoriesno sensitive capability
  • pcb_add_blind_viano sensitive capability
  • pcb_add_circleno sensitive capability
  • pcb_add_microviano sensitive capability
  • pcb_add_rectangleno sensitive capability
  • pcb_add_segmentno sensitive capability
  • pcb_add_textno sensitive capability
  • pcb_add_tracks_bulkno sensitive capability
  • pcb_get_live_edit_stateno sensitive capability
  • pcb_highlight_netno sensitive capability
  • pcb_refill_zonesno sensitive capability
  • pcb_saveno sensitive capability
  • pcb_set_board_outlineno sensitive capability
  • pcb_set_net_classno sensitive capability
  • pdn_calculate_voltage_dropno sensitive capability
  • pdn_check_copper_weightno sensitive capability
  • pdn_generate_power_planeno sensitive capability
  • pdn_recommend_decoupling_capsno sensitive capability
  • sch_add_busno sensitive capability
  • sch_add_bus_wire_entryno sensitive capability
  • sch_add_global_labelno sensitive capability
  • sch_add_hierarchical_labelno sensitive capability
  • sch_add_labelno sensitive capability
  • sch_add_labelsno sensitive capability
  • sch_add_no_connectno sensitive capability
  • sch_add_pin_labelsno sensitive capability
  • sch_add_power_symbolno sensitive capability
  • sch_add_sheet_pinno sensitive capability
  • sch_add_wireno sensitive capability
  • sch_analyze_net_compilationno sensitive capability
  • sch_annotateno sensitive capability
  • sch_auto_place_symbolsno sensitive capability
  • sch_build_circuitno sensitive capability
  • sch_check_power_flagsno sensitive capability
  • sch_create_sheetno sensitive capability
  • sch_delete_labelno sensitive capability
  • sch_delete_no_connectno sensitive capability
  • sch_delete_sheetno sensitive capability
  • sch_delete_symbolno sensitive capability
  • sch_delete_wireno sensitive capability
  • sch_get_connectivity_graphno sensitive capability
  • sch_get_labelsno sensitive capability
  • sch_get_net_namesno sensitive capability
  • sch_get_pin_positionsno sensitive capability
  • sch_get_sheet_infono sensitive capability
  • sch_get_wiresno sensitive capability
  • sch_import_sheet_pinsno sensitive capability
  • sch_list_sheet_pinsno sensitive capability
  • sch_list_sheetsno sensitive capability
  • sch_modify_labelno sensitive capability
  • sch_move_labelno sensitive capability
  • sch_move_sheetno sensitive capability
  • sch_route_wire_between_pinsno sensitive capability
  • sch_spread_sheetsno sensitive capability
  • sch_trace_netno sensitive capability
  • sch_wire_sheet_pinsno sensitive capability
  • si_analyze_high_speed_channelno sensitive capability
  • si_bind_interfaces_to_net_classesno sensitive capability
  • si_calculate_decoupling_placementno sensitive capability
  • si_calculate_trace_impedanceno sensitive capability
  • si_calculate_trace_width_for_impedanceno sensitive capability
  • si_check_differential_pair_skewno sensitive capability
  • si_check_via_stubno sensitive capability
  • si_generate_stackupno sensitive capability
  • si_get_solver_capabilitiesno sensitive capability
  • si_list_dielectric_materialsno sensitive capability
  • si_synthesize_stackup_for_interfacesno sensitive capability
  • si_validate_length_matchingno sensitive capability
  • thermal_calculate_via_countno sensitive capability
  • thermal_check_copper_pourno sensitive capability
  • thermal_simulate_plane_spreadingno sensitive capability

What this scan could not see

Versions 10

Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.

VersionScoreFindingsEngineScanned
v3.34.0 latest A 93/100 11 1.13.0 2026-09-05
v3.33.3 A 93/100 11 1.13.0 2026-08-28
v3.33.2 A 93/100 11 1.13.0 2026-08-27
v3.32.0 A 93/100 11 1.13.0 2026-08-25
v3.31.0 A 93/100 11 1.12.1 2026-08-14
Show 5 more versions ↓
v3.30.1 A 93/100 11 1.12.1 2026-08-05
v3.29.2 A 93/100 11 1.12.1 2026-07-31
v3.29.1 A 93/100 11 1.12.1 2026-07-28
v3.29.0 A 93/100 11 1.12.1 2026-07-27
v3.28.0 A 93/100 11 1.9.0 2026-07-23

Embed this score

Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.

MCP Trust Score: A · 93/100
Markdown (GitHub README)
[![MCP Trust Score](https://mcptrustchecker.com/registry/kicad-mcp-pro/badge.svg)](https://mcptrustchecker.com/registry/kicad-mcp-pro)
HTML
<a href="https://mcptrustchecker.com/registry/kicad-mcp-pro"><img src="https://mcptrustchecker.com/registry/kicad-mcp-pro/badge.svg" alt="MCP Trust Score" height="20"></a>
Prefer shields.io styling? Point it at https://mcptrustchecker.com/registry/kicad-mcp-pro/badge.json via https://img.shields.io/endpoint?url=…

Verify this score yourself

The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.

npx mcptrustchecker scan kicad-mcp-pro --online --registry pypi

Use the free API → How scoring works

Other implementations of Kicad Mcp Pro 1

Independent packages implementing the same tool, scanned with the same engine. Compare all 2 side by side →

More in Other