KiCad Tools
Byte-preserving KiCad automation: 100+ tools for schematics, PCB layout, ERC, DRC, exports
Connector by ProductOfAmerica · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying KiCad Tools?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/productofamerica-mcp-server-kicad
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: ui-design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 37 read · 58 write · 12 delete · 2 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 109
Read from the source code; the running server may list different tools.
Read 37 · Look things up without changing anything.
check_placementget_board_infoget_footprint_boundsget_footprint_infoget_footprint_padsget_net_connectionsget_pin_positionsget_schematic_summaryget_sheet_infoget_symbol_infoget_symbol_instancesget_symbol_pins
Show 25 more tools
get_versionis_root_schematiclist_cross_sheet_netslist_hierarchylist_lib_footprintslist_lib_symbolslist_pcb_footprintslist_pcb_graphic_itemslist_pcb_layerslist_pcb_netslist_pcb_traceslist_pcb_zoneslist_schematic_bus_entrieslist_schematic_componentslist_schematic_global_labelslist_schematic_hierarchical_labelslist_schematic_junctionslist_schematic_labelslist_schematic_no_connectslist_schematic_sheetslist_schematic_wireslist_unconnected_pinstrace_hierarchical_netvalidate_boardvalidate_hierarchy
Write 58 · Create, change, send or run things.
add_copper_zoneadd_global_labeladd_hierarchical_labeladd_hierarchical_sheetadd_junctionsadd_keepout_zoneadd_labeladd_lib_symboladd_pcb_lineadd_pcb_textadd_power_symboladd_sheet_pin
Show 46 more tools
add_symboladd_textadd_thermal_viasadd_traceadd_viaadd_wiresannotate_schematicauto_place_decoupling_capautoroute_pcbconnect_pinscreate_projectcreate_schematiccreate_sym_lib_tablecreate_symbol_libraryduplicate_sheetexport_3dexport_bomexport_footprint_svgexport_gerbersexport_hierarchical_netlistexport_ipc2581export_netlistexport_pcbexport_positionsexport_schematicexport_symbol_svgfill_zonesmodify_hierarchical_labelmodify_hierarchical_sheetmove_componentmove_footprintmove_hierarchical_sheetno_connect_pinplace_componentreorder_sheet_pagesrun_drcrun_ercrun_jobsetset_component_propertyset_net_classset_page_sizeset_trace_widthupdate_pcb_from_schematicupgrade_footprint_libupgrade_symbol_libwire_pins_to_net
Delete 12 · Delete, drop, revoke or wipe things.
remove_componentremove_dangling_tracksremove_footprintremove_hierarchical_labelremove_hierarchical_sheetremove_junctionremove_labelremove_no_connectremove_sheet_pinremove_textremove_tracesremove_wire
Not yet classified 2 · We could not tell from the name and description.
flatten_hierarchyplace_footprint
Network hosts it talks to 4
adoptium.net· found in codegithub.com· found in codeglama.ai· found in coderaw.githubusercontent.com· found in code
Files it touches
/root/sheet/.../usr/lib/kicad/lib/python3/dist-packages/usr/lib/python3/dist-packages/usr/local/share/kicad/symbols/usr/share/kicad/symbols- Your home directory (~)
~/.local/share- Any path the agent passes to its tools
Tools (109)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_copper_zoneCreate 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 priori…
add_global_labelAdd 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.
add_hierarchical_labelAdd 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.
add_hierarchical_sheetAdd a hierarchical sheet to a parent schematic with matching labels in the child. Creates the sheet block in the parent, with its pins on the left edge, and the corresponding hierarchical labels in the child schematic. The child schematic must already exist (create it with create_schematic first). Everything is checked before the first write, so a refusal changes neither file: a pin direction that is not one of the five below, an empty pin name, a child that is no schematic, and a child that is the parent or has the parent somewhere below it. The sheet's page is the lowest number no sheet o…
add_junctionsAdd multiple junctions, as KiCad's junction tool places them. Each point dict has keys: x, y. A junction joins only where three or more wire directions, pins or sheet pins meet: a crossing, a T, a wire end at a pin with another wire. Anywhere else (empty space, a straight wire's interior, an L corner, a wire ending at a pin) KiCad's editor refuses it, "Junction location contains no joinable wires and/or pins." (sch_drawing_tools.cpp: 1465-1497 at 9.0.8), and its cleanup deletes one placed there, so the whole call is refused, naming each such point, and nothing is written. Every wire through a…
add_keepout_zoneCreate 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.
add_labelAdd 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.
add_lib_symbolLoad 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.
add_pcb_lineAdd 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.
add_pcb_textAdd 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.
add_power_symbolPlace a power symbol (VCC, GND, +3V3, etc.). Uses place_component internally. Power symbols are regular symbols from the 'power' library with isPower=True. Places only the symbol asked for. A PWR_FLAG tells ERC the net has a source it cannot see, which only the designer knows, so add one with lib_id="power:PWR_FLAG" on each net that needs it. 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 a .kicad_sym file that defines the power symbol, …
add_sheet_pinAdd a pin to an existing hierarchical sheet block. The pin goes on the chosen edge at the first slot, counting down from the sheet's top edge in steps of 2.54 mm, that has no pin within 2.54 mm and lies inside the edge (this layout is the tool's own, not KiCad's). When the edge has no such slot the call is refused, writing nothing, and the message gives the height that takes one more pin (set it with modify_hierarchical_sheet). A direction that is not one of the five below, an empty name and a side other than left or right are refused too. Args: sheet_uuid: UUID of the sheet pin_name…
add_symbolAdd 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" …
add_textAdd 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.
add_thermal_viasAdd 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, at least 1. rows * cols is at most 256. cols: Number of columns in the via grid, at least 1. 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 config…
Show 94 more tools
add_traceAdd 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: A net number from list_pcb_nets, or 0 for no net. Any other number is refused and nothing is written, and so is every number but 0 on a board in KiCad 9's format or older that has no net table. A KiCad 10 board holds nets by name and its numbers are derived from where each net first appears, so read list_pcb_nets again after an edit. pcb_path: Path to .kicad_pcb file. Op…
add_viaAdd a via at a position. Args: x: X position y: Y position size: Via pad size in mm drill: Drill diameter in mm net: A net number from list_pcb_nets, or 0 for no net. Any other number is refused and nothing is written, and so is every number but 0 on a board in KiCad 9's format or older that has no net table. A KiCad 10 board holds nets by name and its numbers are derived from where each net first appears, so read list_pcb_nets again after an edit. layers: Via layers (default: ["F.Cu", "B.Cu"]) pcb_path: Path to .kicad_pcb file. Opti…
add_wiresAdd multiple wires at once, as KiCad's wire tool adds them. Each wire dict has keys: x1, y1, x2, y2. Following SCH_LINE_WIRE_BUS_TOOL::finishSegments (sch_line_wire_bus_tool.cpp:1168-1276 at 9.0.8): a junction goes wherever three or more wire directions, pins or sheet pins meet, at a new wire's end or at a point already on the sheet that a new wire runs through (a pin, a wire end), and every wire through a junction is split there, so a T, or a wire drawn through a pin, joins in every reader. As KiCad merges the new wire with the collinear wires of its stroke that it overlaps or meets end to e…
annotate_schematicAuto-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)
auto_place_decoupling_capPlace 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 a .kicad_sym file that defines the capacitor, for a library outside KiCad's stock set.…
autoroute_pcbAutoroute 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 KiCad's pcbnew Python bindings, whose major version has to match the board's format era, and Java 25+ for the Freerouting build it downloads. Unless FREEROUTING_JAR names a Freerouting jar, the first run downloads Freerouting 2.5.0 (65 MB) from GitHub, checks its SHA-256 and caches it. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the conf…
check_placementCheck one proposed footprint positionCheck 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. Keep-outs are read as KiCad reads them: a footprint's own keep-outs in board coordinates, as the file stores them; a layer set such as *.Cu or F&B.Cu as the layers it names; the footprint on its side, B.Cu or else F.Cu, as K…
connect_pinsConnect two component pins with Manhattan (L-shaped) wire routing. Combines get_pin_positions + coordinate math + add_wires into one call. At its own points (both pins and the L's corner) a junction goes where three or more directions meet, and any wire through it is split there, as KiCad's wire tool does (sch_line_wire_bus_tool.cpp:1263-1267 at 9.0.8); a leg running through a junction or a bus entry end already on the sheet is split there too, as KiCad's cleanup splits it. The result names each junction and split. Args: ref1: First component reference (e.g. "U1") pin1: First pin nam…
create_projectCreate a KiCad 9 project (.kicad_pro + root .kicad_sch). No .kicad_prl is written, and an existing .kicad_sch or .kicad_prl of that name is left as it is; the result says whether the root schematic was created or kept. Args: directory: Directory to create the project in (created if missing) name: Project name (used for filenames)
create_schematicCreate a valid empty KiCad 9 schematic file. Args: schematic_path: Path for the new .kicad_sch file. Optional; omit to use the configured default.
create_sym_lib_tableCreate a sym-lib-table file in the given directory. Each entry dict needs 'name' (the library nickname) and 'uri' (its path, usually "${KIPRJMOD}/..."). Overwrites existing sym-lib-table if present. A backslash in a uri is written as '/', as KiCad stores it. The whole list is checked first. An entry that cannot be written as given refuses the call, names the entry, and leaves any existing table as it was: an empty name; a name holding a character below U+0020, a backslash or a colon (a library nickname cannot); a name an earlier entry has; an empty uri; a double quote in a name or uri, or a …
create_symbol_libraryCreate 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.
duplicate_sheetDuplicate a hierarchical sheet, copying the child file with new UUIDs. The new block is a copy of the source block, moved to its right, with its fields placed again when the source's were autoplaced, and its page the lowest number no sheet uses, stored at the parent's path where KiCad reads it. The copied file's symbols get references of their own, so the two sheets are two sets of parts: each prefix takes its first free number across the hierarchy, in the order of the symbols' x then y position, and the units of one part keep one reference. A reference with no number stays as it is. A sourc…
export_3dExport 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)
export_bomExport 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.
export_footprint_svgExport 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.
export_gerbersExport 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) …
export_hierarchical_netlistExport a netlist with sheet paths for the whole hierarchyExport 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.
export_ipc2581Export 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. Optional; omit to write <board name>.xml to the configured output directory, or beside the board when none is configured. precision: Numeric precision (default: 3) compress: Compress output file version: IPC-2581 version (default: "C") units: Output units - "mm" or "in"
export_netlistExport a netlist for one schematicExport 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.
export_pcbExport 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…
export_positionsExport component position file (pick and place) as CSV, in millimetres (mm). The columns are Ref, Val, Package, PosX, PosY, Rot and Side. PosX and PosY are the footprint's position in millimetres, with the board's Y axis negated; Rot is its angle in degrees; Side is top or bottom. 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.
export_schematicExport 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.
export_symbol_svgExport 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.
fill_zonesFill 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.
flatten_hierarchyFlatten a hierarchical schematic into a single sheet whose netlist is the hierarchy's. The flat file is the root schematic with each sub-sheet's content copied below it, one cell per use of a sheet file (a file used twice is copied twice). Each part keeps the reference and unit KiCad reads for it at its sheet's path. A sheet pin becomes a local label at its place when its sheet has a hierarchical label of its name, and nothing otherwise. A local or hierarchical label of a sub-sheet becomes a local label named after the sheet's path, so nets keep their joins and no others; net names change to …
get_board_infoGet board summary: footprint count, trace count, net count, thickness. The net count includes the unconnected net, as KiCad's own count does. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
get_footprint_boundsOutline bounds of a footprint placed on the boardGet 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.
get_footprint_infoFootprint details from a .kicad_mod fileGet 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.
get_footprint_padsPads of a footprint placed on the boardGet 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.
get_net_connectionsFind 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. Each placed symbol contributes only its own unit's pins, so a multi-unit part does not report a sibling gate's input as sitting on this net. 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.
get_pin_positionsGet absolute pin positions for a placed component (accounts for rotation/mirror). A multi-unit part is placed as one symbol per unit and they all share the reference, so every placed unit is listed, each with its own pins plus the unit-0 pins they all share. Args: reference: Component reference (e.g. "U1", "R1") schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
get_schematic_summaryGet schematic page info and item counts. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
get_sheet_infoGet 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.
get_symbol_infoSymbol details from a library fileGet 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.
get_symbol_instancesList 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.
get_symbol_pinsSymbol pins from the schematic's embedded libraryGet 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.
get_versionGet KiCad version information including build details and library versions.
is_root_schematicCheck if a schematic is the root or a sub-sheet. A sheet is found in its project wherever its file sits below the project's folder. A file that no sheet of its project uses is a root. For a sub-sheet, root_path is the top-level sheet of its project that holds it. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_cross_sheet_netsList 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.
list_hierarchyList 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.
list_lib_footprintsList all footprints in a .pretty library directory. Args: pretty_dir: Path to .pretty directory containing .kicad_mod files
list_lib_symbolsList all symbols in a .kicad_sym library file. Args: symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
list_pcb_footprintsList all footprints on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_graphic_itemsList all graphic items (lines, text, etc.) on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_layersList 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.
list_pcb_netsList all named nets on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_tracesList all trace segments and vias on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_zonesList all zones (copper and keepout) on the PCB. Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_schematic_bus_entriesList all bus entries in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_componentsList all placed components in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_global_labelsList all global labels in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_hierarchical_labelsList all hierarchical labels in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_junctionsList all junctions in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_labelsList all net labels in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_no_connectsList all no-connect flags in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_sheetsList all hierarchical sheets in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_wiresList all wire segments in the schematic. Args: schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_unconnected_pinsList unconnected pins by running ERC and filtering results. Requires kicad-cli. Lists the violations KiCad types pin_not_connected. A sub-sheet is checked from its project's root, as run_erc does, and gets the pins of that sheet alone, under every top-level sheet the project lists. A sheet below a top-level sheet other than the root is refused when that kicad-cli did not check it from the root. A run that makes no report raises and leaves output_dir as it was. The x and y of each entry are millimetres (mm) in sheet coordinates, the numbers get_pin_positions prints. Args: schematic_path:…
modify_hierarchical_labelModify 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
modify_hierarchical_sheetModify properties of an existing hierarchical sheet block. A new width or height keeps each pin on its edge and moves it with the edge, places the name and file fields of an autoplaced sheet again, and moves a wire, bus end or no-connect that sat on a moved pin with it, so the sheet stays connected. A size smaller than the sheet's pins need is refused, naming the minimum, and a size equal to the current one changes nothing. 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…
move_componentMove a placed component, turn it, or both. The symbol and all its fields move together: each field keeps its place relative to the symbol, rotation included, and keeps its own text angle, so KiCad draws it turning with the symbol. KiCad's GUI would also re-place auto-placed fields after a turn when its autoplace preference is on; this tool does not. Wires, labels, junctions and no-connect flags stay where they are, as with KiCad's own Move. The result lists every pin whose connections changed (what it left, what it now meets); reconnect those with wire_pins_to_net or connect_pins. x and y s…
move_footprintMove a footprint to a new position. A move rewrites the footprint's own position and nothing of its pads, texts or graphics, which KiCad stores relative to the footprint. The zones it owns and a KiCad 10 footprint's points are stored in board coordinates, so they move by the same delta, as KiCad's FOOTPRINT::SetPosition moves them (pcbnew/footprint.cpp:2553-2584 at 9.0.8). A rotation turns the footprint to that angle as KiCad's own rotate turns it: every pad and text turns by the change from the angle it had, its zones and points turn about it, and a keep-upright text that would read upside d…
move_hierarchical_sheetMove 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.
no_connect_pinPlace 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.
place_componentPlace 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 a .kicad_sym file that defines the symbol, for a…
place_footprintPlace 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, a footprint in KiCad 7's form taking the reference and value in its own (fp_text reference|value ...), where one holding %V or %R, which KiCad reads there as a variable, is refused. 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_…
remove_componentRemove 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.
remove_dangling_tracksDetect 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.
remove_footprintRemove 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.
remove_hierarchical_labelRemove 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
remove_hierarchical_sheetRemove 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)
remove_junctionRemove a junction at the given coordinates, as KiCad's delete removes one. The junction within 0.1 mm goes, with any other at exactly its point. Then, as KiCad's DeleteJunction does (bus-wire-junction.cpp:115-185 at 9.0.8), of the wires and buses ending there each parallel pair is made one, or one of two identical lines goes, so whatever met only at the junction is disconnected: a T loses its stem, a crossing becomes two wires that do not join. Wires that merely meet there at an angle stay joined. Where a bus entry ends at the point nothing is merged, since kicad-cli 9 cuts a wire at a bus en…
remove_labelRemove 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.
remove_no_connectRemove 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.
remove_sheet_pinRemove 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.
remove_textRemove 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.
remove_tracesRemove 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.
remove_wireRemove 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.
reorder_sheet_pagesPut hierarchical sheets in the page order given: sheets listed come first, in that order, then the others in the order they have now. KiCad orders sheets by their page numbers, not by where their blocks sit in the file, so this rewrites the page numbers and leaves the blocks where they are. Call it on the root schematic: a sheet's page is stored at its parent's path, and a sub-sheet's blocks are refused. The numbers already in use are given back in the new order, so custom labels such as "Intro" stay; when they repeat, or a deeper sheet uses one, the sheets are numbered from the lowest positi…
run_drcRun 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.
run_ercRun Electrical Rules Check (ERC) on a schematic. A sub-sheet is checked from its project's root, so the hierarchy around it counts, and only that sheet's own violations are returned, those of every use of it under every top-level sheet the project lists. A sheet below a top-level sheet other than the root is refused when that kicad-cli did not check it from the root; run_erc on that top-level sheet checks it on its own. A file that no sheet of its project uses is checked on its own. A run that makes no report raises and leaves output_dir as it was. Returns JSON report with violations. An ite…
run_jobsetRun a KiCad jobset file: every output it defines. The jobset runs against the one .kicad_pro in its own folder, and a relative output folder in it is relative to that folder. kicad-cli is given a copy of the jobset, never the file, because it rewrites or deletes a jobset it cannot parse. It is an error when nothing ran or a job failed, and the error carries the counts kicad-cli reported. Args: jobset_path: Path to .kicad_jobset file
set_component_propertySet 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 valu…
set_net_classCreate or update a net class with design rules and assign nets. Edits the KiCad project file (.kicad_pro) alongside the board to define the net class and assign nets. Does NOT require pcbnew. Args: name: Net class name (e.g. "Power", "HighSpeed") nets: List of net names to assign to this class track_width: Track width in mm (None = use default) clearance: Clearance in mm (None = use default) via_size: Via diameter in mm (None = use default) via_drill: Via drill in mm (None = use default) pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured defa…
set_page_sizeSet the schematic page/sheet size. Args: size: Standard name (A5, A4, A3, A2, A1, A0, A, B, C, D, E) or 'User' for custom width: Custom width in mm (required when size='User') height: Custom height in mm (required when size='User') portrait: If True, swap width/height for portrait orientation schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
set_trace_widthChange the width of existing traces matching the given filters. At least one filter (net_name, layer, or bounding box) is required. Args: width: New trace width in mm 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.
trace_hierarchical_netTrace a net across the hierarchy, following hierarchical pins and labels. Args: net_name: Net/label name to trace schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
update_pcb_from_schematicUpdate the PCB from the schematic (headless Tools -> Update PCB from Schematic). Exports the schematic's netlist, loads the assigned footprints from libraries, and binds every pad to its net. Creates the .kicad_pcb if it does not exist; new footprints land in a grid cluster at orientation 0, written as KiCad writes a footprint it has just loaded (no angle on the footprint, library pad and text angles normalized as KiCad holds them). Existing footprints are matched by reference and keep their position; a footprint in KiCad 7's form, on the board or from its library, takes the symbol's referenc…
upgrade_footprint_libUpgrade a footprint library to current KiCad format. Rewrites every footprint in the library, so this takes the library directory. kicad-cli has no per-footprint option here, and a single .kicad_mod path is rejected. So is a library that is, or holds, a link or anything other than plain files and folders, before anything is copied. KiCad performs the migration, as it should, but it performs it on a copy and each result lands through the server's atomic write, so no footprint file can be left truncated. Only files whose content actually changed are written, so an upgrade that touches three f…
upgrade_symbol_libUpgrade a symbol library to current KiCad format. KiCad performs the migration, as it should, but it performs it on a copy: the result lands through the server's atomic write, so your library is replaced whole or not at all and can never be left truncated. A backup is still taken beside it at ``<name>.kicad_sym.bak``, and the result names it, because that is the undo for an upgrade that SUCCEEDED and is not something an atomic write can offer. There is exactly one, and every run overwrites it. Args: symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
validate_boardCheck every footprint already on the boardValidate all footprint placements against keep-out zones and board edge. Each footprint's origin is checked as check_placement checks it: keep-outs read as KiCad reads them, footprint keep-outs in board coordinates and layer sets such as *.Cu included, and a footprint never flagged by its own keep-outs, which KiCad's DRC never tests it against (pcbnew/pcbexpr_functions.cpp:697 at 9.0.8). Args: pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
validate_hierarchyValidate a hierarchical schematic for common issues. Checks every sheet below the root, however deep, each file once. A relative sheet file name is found beside the file holding the sheet, as KiCad finds it; a sheet that contains itself, which KiCad refuses, is skipped. Per sheet block: orphaned labels and pins, direction mismatches, a missing file, a file that cannot be parsed ("unreadable_file", whose "note" names the file; its checks are skipped, the rest still run). Per sheet instance, so a reused sheet counts once per use: duplicate and unannotated reference designators, each read from t…
wire_pins_to_netPut each listed pin on the net named label_text, or refuse and write nothing. Each pin gets a short wire stub pointing away from its symbol, with a net label at the stub's end. When the stub would touch, overlap or cross anything else on the sheet, or move a net into another net class, the label goes on the pin end itself instead. No junction is ever written, and a pin already on the net is left alone. The file is written once or not at all. The whole call is refused when any pin cannot be wired safely: its net may already carry another name, it may reach something this tool cannot judge (a …
Signals
- Stars
- 15
- Forks
- 7
- Open issues
- 34
- Weekly downloads
- 939
- Last commit
- Oct 23, 2026 (7 days ago)
- Last release
- Oct 20, 2026 (11 days ago)
- Last package publish
- Oct 20, 2026 (11 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.ProductOfAmerica/mcp-server-kicad- Version
- 0.21.1
- Auth
- No auth
- Packages
- pypi mcp-server-kicad
- License
- GPL-3.0
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get KiCad Tools running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
KiCad Tools MCP server. Agent Mart. https://agentmart.dev/connectors/productofamerica-mcp-server-kicad (last updated 2026-10-24)