Sign In

mcp-server-kicad

Package Overview
Dependencies
Maintainers
1
Versions
72
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mcp-server-kicad

Byte-preserving MCP servers for KiCad: schematic capture, PCB layout, ERC, DRC, and manufacturing exports

pipPyPI
Version
0.20.1
Weekly downloads
9K
Maintainers
1
Created
mcp-server-kicad

mcp-server-kicad

Let an AI assistant edit real KiCad projects without corrupting them.

109 MCP tools covering schematic capture, PCB layout, symbol and footprint libraries, ERC and DRC, and manufacturing exports. No screenshots, no copy-paste, no hand-edited s-expressions: the model calls tools, KiCad files change on disk.

PyPI Python KiCad Tests License

Quick startWhat you getConfigurationTool referenceRequirementsContributing

What it looks like

"Add a 100 nF decoupling cap on U1's VCC pin, then check ERC."

  get_pin_positions            locate U1's VCC and GND pins
  auto_place_decoupling_cap    place C3, wire it, drop the junctions
  run_erc                      report what the change broke

"Now push the netlist to the board and route it."

  update_pcb_from_schematic    sync footprints and pad nets onto the PCB
  autoroute_pcb                route with Freerouting
  run_drc                      clearance, width, and unconnected checks

Every tool works on the real file. Writes go through a byte-preserving substrate, so bytes you did not ask to change reach the disk unchanged, and an edit that cannot be done correctly is refused with the file intact. That now covers every board and schematic this server writes. The two library upgrades are the only tools that let KiCad do the writing, and they say so on themselves.

Quick start

Claude Code

Install the plugin. It wires up the server and ships the design skills with it:

claude plugin marketplace add ProductOfAmerica/mcp-server-kicad
claude plugin install kicad

Claude Desktop

Download kicad-<version>.mcpb from the latest release and install it from Settings, then Extensions. Claude Desktop fetches Python and the package itself, so KiCad is the only thing you need installed first.

Fill in the schematic, board, and export paths it asks for. Unlike the Claude Code plugin, Desktop does not run from your project directory, so nothing is auto-detected. Leave the kicad-cli field blank unless KiCad lives somewhere unusual; stock installs are found on their own, on every platform. The design skills are Claude Code only.

Everything else

pip install mcp-server-kicad

Then point your MCP client at the unified server and set cwd to a KiCad project directory so paths resolve themselves:

{
  "mcpServers": {
    "kicad": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad"],
      "cwd": "/path/to/your/kicad/project"
    }
  }
}

That single entry registers all 109 tools. Prefer to split them across five smaller servers? See Configuration.

What you get

Five tool servers

Run them as one unified server, or separately when you want a smaller tool surface in context.

ServerToolsWhat it does
mcp-server-kicad-schematic42Schematic read/write, net tracing, ERC, exports (PDF, SVG, DXF, netlist, BOM)
mcp-server-kicad-pcb34Board read/write, netlist import, zones, DRC, autorouting, exports (Gerber, drill, 3D, pick-and-place)
mcp-server-kicad-project24Project scaffolding, hierarchical sheets, hierarchy validation, annotation, cross-sheet net tracing
mcp-server-kicad-symbol5Symbol library browsing, authoring, SVG export, format upgrade
mcp-server-kicad-footprint4Footprint library browsing, SVG export, format upgrade

Six design skills (Claude Code plugin)

Tools alone let a model click every button. The bundled skills teach it which buttons, in what order, and what "done" looks like.

SkillKicks in when
using-kicadAny electronics or EDA conversation starts. Routes to the right skill below
circuit-designChoosing topology, regulators, and component values, before any file exists
schematic-planPlanning exact placement coordinates and wiring. Pure planning, no writes
schematic-designExecuting that plan, or modifying an existing schematic
pcb-layoutPlacing footprints, routing, zones, stackup, trace widths
verificationERC and DRC failures, unconnected nets, export prep

The design skills hand their artifacts to independent reviewer subagents (agents/) before moving on, so a bad BOM or a bad placement plan gets caught before it becomes a schematic.

Configuration

Split servers

Five entries instead of one, when you want to load only part of the tool surface:

Five-server MCP config
{
  "mcpServers": {
    "kicad-schematic": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-schematic"],
      "cwd": "/path/to/your/kicad/project"
    },
    "kicad-pcb": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-pcb"],
      "cwd": "/path/to/your/kicad/project"
    },
    "kicad-symbol": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-symbol"],
      "cwd": "/path/to/your/kicad/project"
    },
    "kicad-footprint": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-footprint"],
      "cwd": "/path/to/your/kicad/project"
    },
    "kicad-project": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-project"],
      "cwd": "/path/to/your/kicad/project"
    }
  }
}

Each is also runnable directly:

uvx --from mcp-server-kicad mcp-server-kicad-schematic

How paths resolve

Highest priority wins:

  • Tool parameters. Every tool accepts an explicit path.
  • Environment variables. They override anything auto-detected.
  • Auto-detect. The working directory is scanned for a .kicad_pro, and the schematic, board, and library paths are derived from it.
VariablePoints at
KICAD_SCH_PATHa .kicad_sch schematic file
KICAD_PCB_PATHa .kicad_pcb board file
KICAD_SYM_LIBa .kicad_sym symbol library file
KICAD_FP_LIBa .pretty footprint library directory
KICAD_OUTPUT_DIRwhere exports and reports are written

Requirements

  • Python 3.10+
  • KiCad 9.x or 10.x, for the tools that shell out to kicad-cli: ERC, DRC, and every export. The read and write tools parse files directly and need no KiCad install at all.

CI runs the full suite on Linux against KiCad 9 and on macOS against KiCad 10, plus a KiCad-free matrix across Python 3.10 through 3.13.

Finding your KiCad install

kicad-cli is looked up on PATH, then inside /Applications/KiCad/KiCad.app on macOS, then in the standard Windows install folders, machine-wide under Program Files and per-user under AppData, newest version first. Neither installer adds it to PATH. Everything else in the KiCad tree is located relative to it, the same way KiCad itself does it, so a stock install on any platform needs no configuration: the stock symbol libraries and the bundled Python that provides pcbnew are both found automatically.

Override any of it if your install is unusual:

VariableOverrides
KICAD_CLI_PATHthe kicad-cli executable, and everything derived from its location
KICAD_SYMBOL_DIRthe directory holding the stock .kicad_sym libraries
KICAD_PYTHONthe interpreter used for pcbnew (fill_zones, autoroute_pcb)

CLI-backed tools are always registered. Without kicad-cli they fail with a message naming KICAD_CLI_PATH, rather than vanishing from the tool list.

KiCad 10 files

FileWhat works today
.kicad_schEverything, read and write: the whole schematic server and the whole project server
.kicad_pcbEverything, read and write
.kicad_sym, .kicad_modEverything: your own libraries as well as the stock ones

Every tool parses and edits through the byte-preserving substrate, so none of them refuses a file on its format version, and none of them rewrites bytes you did not ask to change. Two caveats are worth knowing about.

autoroute_pcb needs a pcbnew whose era matches the board, because it uses one for the DSN export and the SES import. It checks before it starts. A KiCad 10 board on a KiCad 9 pcbnew is refused with a message naming both versions; install KiCad 10 or point KICAD_PYTHON at one. The other direction runs and warns, because the routed copy comes back in the KiCad 10 format. Your original board is untouched either way, since this one writes a copy.

upgrade_symbol_lib and upgrade_footprint_lib are the one place KiCad still rewrites your file, because changing the format is exactly what you asked for. It rewrites a copy: the result is moved into place atomically, so a library can never be left half-written, and only files whose content actually changed are touched. Each file is atomic; the library as a whole is not a transaction, so an interrupted upgrade leaves some footprints migrated and none damaged. A backup is still taken at <name>.bak, overwritten every run, because that is the undo for an upgrade that worked.

fill_zones and update_pcb_from_schematic used to be listed here and no longer are. fill_zones still asks pcbnew to compute the fills, because nothing else can, but pcbnew only reads: the copper comes back as coordinates and the substrate splices it in. update_pcb_from_schematic no longer uses pcbnew at all. Both leave everything they were not asked to change byte-identical, including the format stamp. The design behind the substrate is written up in docs/adr-cst-substrate.md.

Windows: Controlled Folder Access

Windows Defender's ransomware protection, Controlled Folder Access, guards your Documents folder and blocks writes from applications it does not recognise. KiCad keeps its own data there, a 3D cache and templates under Documents\KiCad, so a blocked write kills kicad-cli at startup with an access violation (exit 3221225477) before it does any work. Every invocation fails, --version included.

The block surfaces as error 2: The system cannot find the file specified, which is why this reads like a missing folder rather than a permission problem. Measured on a machine with the feature on: the folder is plainly there and a write into it still fails with FileNotFoundError.

kicad-cli is handled for you. On that crash the server retries once with KiCad's own KICAD_DOCUMENTS_HOME pointed at a local folder outside the protected set, then reuses it for the session. Nothing to configure, and a machine without the block never sees any of it. Setting KICAD_DOCUMENTS_HOME yourself picks the folder and disables the retry, on the grounds that a directory you chose is yours to fix.

Your project files are a separate matter. The same block applies to any write, so if your KiCad project lives under Documents, the write tools can fail the same confusing way, and the server cannot repair that: it is the location you asked it to edit. Either keep projects outside the protected folders, or allow the tools through at Windows Security, Virus & threat protection, Ransomware protection, Allow an app through Controlled folder access.

Tool reference

Schematic (42 tools)

Read

ToolDescription
get_schematic_summaryGet item counts for a schematic sheet
list_schematic_componentsList all components (symbols) on a sheet
list_schematic_labelsList all net labels on a sheet
list_schematic_wiresList all wires on a sheet
list_schematic_global_labelsList all global labels on a sheet
list_schematic_hierarchical_labelsList all hierarchical labels on a sheet
list_schematic_sheetsList all hierarchical sheet blocks on a sheet
list_schematic_junctionsList all junctions on a sheet
list_schematic_no_connectsList all no-connect flags on a sheet
list_schematic_bus_entriesList all bus entries on a sheet
get_symbol_pinsGet pin info for a symbol in the schematic's lib_symbols
get_pin_positionsGet absolute pin positions for a placed component, accounting for rotation and mirror
get_net_connectionsGet all connections for a named net (multi-hop BFS wire tracing)
list_unconnected_pinsList unconnected pins from ERC data

Write

ToolDescription
place_componentPlace a component in the schematic
remove_componentRemove a component by reference designator
move_componentMove a placed component to a new position
set_component_propertySet any property (Value, Reference, Footprint, ...) on a placed component
add_lib_symbolLoad a symbol definition from a .kicad_sym library into the schematic
add_wiresAdd one or more wires between points, auto-creating junctions on T-connections
remove_wireRemove a wire segment
add_junctionsAdd one or more junction dots
remove_junctionRemove a junction dot
add_labelAdd a net label at a position
remove_labelRemove a net label or global label
add_global_labelAdd a global net label visible across all sheets
add_hierarchical_labelAdd a hierarchical label for sheet-to-sheet connections
remove_hierarchical_labelRemove a hierarchical label by name or UUID
modify_hierarchical_labelModify text, shape, or position of a hierarchical label
add_power_symbolPlace a power symbol (VCC, GND, +3V3, ...) with auto PWR_FLAG
add_textAdd a text annotation to the schematic
remove_textRemove text annotation(s) by content, optionally filtered by position
wire_pins_to_netWire one or more pins to a named net
connect_pinsWire two component pins together
auto_place_decoupling_capAutomatically place a decoupling capacitor near an IC
no_connect_pinPlace a no-connect flag on an unused pin (idempotent)
remove_no_connectRemove no-connect flag(s) from a pin
set_page_sizeSet the schematic page size

Analysis and export

ToolDescription
run_ercRun Electrical Rules Check, with project_path support for hierarchies
export_schematicExport schematic to PDF, SVG, or DXF
export_netlistExport the schematic netlist
export_bomExport a Bill of Materials as CSV
PCB (34 tools)

Read

ToolDescription
list_pcb_footprintsList all footprints on the board
list_pcb_tracesList all traces on the board
list_pcb_netsList all nets on the board
list_pcb_zonesList all zones on the board
list_pcb_layersList all layers on the board
list_pcb_graphic_itemsList all graphic items on the board
get_board_infoBoard summary: footprint count, trace count, net count, thickness
get_footprint_padsGet pad info for a placed footprint
get_footprint_boundsGet the board-coordinate bounding box of a placed footprint

Write

ToolDescription
place_footprintPlace a footprint on the board
move_footprintMove a footprint to a new position
remove_footprintRemove a footprint by reference designator
add_traceAdd a trace segment between two points
remove_tracesRemove trace segments matching filters
set_trace_widthChange the width of existing traces
remove_dangling_tracksDetect and remove trace segments with unconnected endpoints
add_viaAdd a via at a position
add_thermal_viasAdd a grid of thermal vias under a footprint pad
add_pcb_textAdd text to the board (silkscreen, fab layer, ...)
add_pcb_lineAdd a graphic line (edge cuts, silkscreen, ...)
add_copper_zoneCreate an unfilled copper zone
add_keepout_zoneCreate a keep-out zone restricting tracks, vias, pads, pours, or footprints
fill_zonesFill all copper zones on the board
set_net_classCreate or update a net class with design rules
update_pcb_from_schematicImport or sync the schematic netlist onto the board (footprints and pad nets)

Analysis and export

ToolDescription
run_drcRun Design Rules Check on the board
check_placementCheck whether a proposed footprint position hits a keep-out zone or the board edge
validate_boardCheck every placed footprint against keep-out zones and the board edge
autoroute_pcbAutoroute traces using the Freerouting autorouter
export_pcbExport board layers to PDF, SVG, or DXF
export_gerbersExport Gerber files, all layers or a specific list
export_3dExport a 3D model (STEP/STL/GLB) or render the 3D view to PNG
export_positionsExport a component position file for pick and place
export_ipc2581Export in IPC-2581 format for manufacturing data exchange
Project (24 tools)

Scaffolding

ToolDescription
create_projectCreate a KiCad 9 project (.kicad_pro, .kicad_prl, .kicad_sch)
create_schematicCreate a blank schematic file
create_symbol_libraryCreate a blank symbol library file
create_sym_lib_tableCreate a sym-lib-table file

Sheet management

ToolDescription
add_hierarchical_sheetAdd a hierarchical sheet with matching labels in the child
remove_hierarchical_sheetRemove a hierarchical sheet block from a parent
modify_hierarchical_sheetModify sheet name, file, width, or height
move_hierarchical_sheetMove a sheet block to a new position, pins included
add_sheet_pinAdd a pin to an existing hierarchical sheet block
remove_sheet_pinRemove a pin from a hierarchical sheet block
duplicate_sheetDuplicate a sheet, copying the child file with new UUIDs
reorder_sheet_pagesReorder sheets by specifying the desired UUID order

Hierarchy inspection

ToolDescription
is_root_schematicCheck whether a schematic is the root or a sub-sheet
list_hierarchyList the full sheet hierarchy tree from root
get_sheet_infoGet sheet details with pin and label matching status
validate_hierarchyCheck for orphaned labels and pins, direction mismatches, duplicate refs

Cross-sheet analysis

ToolDescription
trace_hierarchical_netTrace a net across the hierarchy through pins and labels
list_cross_sheet_netsList all nets crossing sheet boundaries
get_symbol_instancesList symbol instances from the root schematic

Annotation, export, utilities

ToolDescription
annotate_schematicAuto-assign reference designators, respecting hierarchy
export_hierarchical_netlistExport a netlist with hierarchy info (requires kicad-cli)
flatten_hierarchyFlatten a hierarchical schematic into a single sheet
run_jobsetRun a KiCad jobset file
get_versionGet KiCad version information
Symbol and footprint libraries (9 tools)

Symbol

ToolDescription
list_lib_symbolsList all symbols in a .kicad_sym library
get_symbol_infoGet detailed pin and property info for a library symbol
add_symbolAdd a new symbol to a .kicad_sym library
export_symbol_svgExport a symbol library to SVG images
upgrade_symbol_libUpgrade a symbol library to the current KiCad format

Footprint

ToolDescription
list_lib_footprintsList all footprints in a .pretty library directory
get_footprint_infoGet pad and outline details for a .kicad_mod file
export_footprint_svgExport a footprint to SVG
upgrade_footprint_libUpgrade a footprint library to the current KiCad format

Debugging

Drive the servers by hand with the MCP Inspector:

npx @modelcontextprotocol/inspector uvx --from mcp-server-kicad mcp-server-kicad

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for development setup, and docs/adr-cst-substrate.md for the architecture decisions behind the byte-preserving write path.

License

MIT

Keywords

eda

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts