Skip to main content
Glama
ProductOfAmerica

mcp-server-kicad

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
KICAD_FP_LIBNoPath to .pretty footprint library directory
KICAD_SYM_LIBNoPath to .kicad_sym symbol library file
KICAD_PCB_PATHNoPath to .kicad_pcb PCB file
KICAD_SCH_PATHNoPath to .kicad_sch schematic file
KICAD_OUTPUT_DIRNoOutput directory for exports and reports

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_schematic_summaryA

Get schematic page info and item counts.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_componentsA

List all placed components in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_labelsA

List all net labels in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_wiresA

List all wire segments in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_global_labelsA

List all global labels in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_hierarchical_labelsA

List all hierarchical labels in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_sheetsA

List all hierarchical sheets in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_junctionsA

List all junctions in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_no_connectsA

List all no-connect flags in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_schematic_bus_entriesA

List all bus entries in the schematic.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
get_symbol_pinsA

Get pin info for a symbol in the schematic's lib_symbols.

Args:
    symbol_name: Symbol name (e.g. "LM7805", "C", "Fuse")
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
get_pin_positionsA

Get absolute pin positions for a placed component (accounts for rotation/mirror).

Args:
    reference: Component reference (e.g. "U1", "R1")
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
get_net_connectionsA

Find 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.

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.
place_componentA

Place a schematic symbol: resistor, capacitor, inductor, diode, LED, transistor, crystal, switch, connector, or an IC such as a microcontroller or regulator chip. Any lib_id in a library works.

Args:
    lib_id: Library identifier (e.g. "Device:R", "Device:C", "MyLib:MyPart")
    reference: Reference designator (e.g. "R1", "U1")
    value: Component value (e.g. "10K", "100nF")
    x: X position in schematic units (mm)
    y: Y position in schematic units (mm)
    rotation: Rotation angle in degrees (0, 90, 180, 270)
    symbol_lib_path: Path to .kicad_sym file if using custom library.
        Optional; omit to use the configured default.
    mirror: Mirror axis ("x", "y", or "" for none)
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    project_path: Path to .kicad_pro file (for correct hierarchy resolution in sub-sheets)
remove_componentA

Remove a component by reference designator.

Args:
    reference: Reference designator to remove (e.g. "U2")
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
remove_labelA

Remove net label(s) or global label(s) by text, optionally filtered by position.

If x and y are provided, only removes labels matching both text AND
position (within 0.1mm tolerance). Otherwise removes ALL labels with
matching text. To move a global label, remove it and re-add with
add_global_label (which takes shape and rotation).

Args:
    text: Label text to match (e.g. "VCC", "PGND")
    x: Optional X position filter
    y: Optional Y position filter
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
remove_wireA

Remove a wire segment by its endpoint coordinates.

Matches wires with endpoints within 0.1mm tolerance (in either order).
Use list_schematic_wires to get wire coordinates first.

Args:
    x1: Start X
    y1: Start Y
    x2: End X
    y2: End Y
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
remove_junctionA

Remove a junction at the given coordinates.

Args:
    x: X position
    y: Y position
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
add_wiresB

Add multiple wires at once. Each wire dict has keys: x1, y1, x2, y2.

Args:
    wires: List of wire defs [{x1, y1, x2, y2}, ...]
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
add_labelA

Add 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_junctionsB

Add multiple junctions. Each point dict has keys: x, y.

Args:
    points: List of junction positions [{x, y}, ...]
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
add_lib_symbolC

Load 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.
move_componentA

Move a placed component to a new position.

Args:
    reference: Reference designator (e.g. "R1")
    x: New X position
    y: New Y position
    rotation: New rotation in degrees (None = keep current)
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
set_component_propertyA

Set any property on a placed component, or rename it. Creates the property if it is missing.

Reference, Value and Footprint are mirrored into the symbol's own
instances and into the root symbol_instances table, so setting
key="Reference" is how a component is renamed and both views stay in
step. The root table needs the .kicad_pro to resolve the hierarchy
path; a loose .kicad_sch with no project beside it keeps the symbol
correct and leaves that table alone.

Args:
    reference: Component reference (e.g. "R1")
    key: Property name (e.g. "MPN", "Tolerance", "Value")
    value: Property value
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
set_page_sizeA

Set 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.
add_global_labelA

Add 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_labelA

Add 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.
remove_hierarchical_labelA

Remove a hierarchical label by name or UUID.

Args:
    text: Label text to match
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    uuid: Optional UUID for disambiguation when multiple labels share a name
modify_hierarchical_labelA

Modify an existing hierarchical label.

Args:
    text: Current label text to find
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    new_text: New label text (empty = keep current)
    new_shape: New shape/direction (empty = keep current)
    new_x: New X position (None = keep current)
    new_y: New Y position (None = keep current)
    uuid: UUID for disambiguation
add_power_symbolA

Place a power symbol (VCC, GND, +3V3, etc.).

Uses place_component internally. Power symbols are regular symbols
from the 'power' library with isPower=True.

Automatically places a PWR_FLAG at the same position so the net
satisfies ERC (power pin driven).

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 power symbol .kicad_sym if not in schematic.
        Optional; omit to use the configured default.
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    project_path: Path to .kicad_pro file (for sub-sheet instance tracking)
auto_place_decoupling_capA

Place 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 .kicad_sym if using custom lib.
        Optional; omit to use the configured default.
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    project_path: Path to .kicad_pro file (for sub-sheet instance tracking)
add_textB

Add 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.
remove_textA

Remove text annotation(s) by content, optionally filtered by position.

If x and y are provided, only removes texts matching both content AND
position (within 0.1mm tolerance). Otherwise removes ALL texts with
matching content.

Args:
    text: Text content to match
    x: Optional X position filter
    y: Optional Y position filter
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
wire_pins_to_netA

Wire multiple component pins to the same net label.

Wires each pin with a short stub and a shared net label, one file write.

Args:
    pins: List of {"reference": "R1", "pin": "1"} dicts
    label_text: Net label text (e.g. "GND", "VCC")
    direction: Wire direction: "auto", "left", "right", "up", "down"
    stub_length: Wire stub length in mm (default 2.54)
    auto_pwr_flag: Auto-place PWR_FLAG when net has power_in but no power_out (default True)
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
connect_pinsA

Connect two component pins with Manhattan (L-shaped) wire routing.

Combines get_pin_positions + coordinate math + add_wires into one call.

Args:
    ref1: First component reference (e.g. "U1")
    pin1: First pin name or number
    ref2: Second component reference (e.g. "C3")
    pin2: Second pin name or number
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
no_connect_pinA

Place a no-connect flag on a component pin.

Resolves pin position and places a no-connect flag. Idempotent:
calling again for a pin that already has one is a no-op.

Args:
    reference: Component reference (e.g. "U2")
    pin_name: Pin name (e.g. "NC") or number (e.g. "3")
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
remove_no_connectA

Remove no-connect flag(s) from a component pin.

Removes every no-connect at the pin's position, so stacked
duplicates from repeated no_connect_pin calls clear in one go.

Args:
    reference: Component reference (e.g. "U2")
    pin_name: Pin name (e.g. "NC") or number (e.g. "3")
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_unconnected_pinsA

List unconnected pins by running ERC and filtering results.

Requires kicad-cli. Auto-redirects to root schematic for sub-sheets
to avoid false positives from hierarchical label context.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    output_dir: Directory for ERC report file. Optional; omit to use the configured default.
    project_path: Path to .kicad_pro file for explicit root resolution
run_ercA

Run Electrical Rules Check (ERC) on a schematic.

Auto-redirects to root schematic for sub-sheets to avoid false
positives from missing hierarchical context.

Returns JSON report with violations.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    output_dir: Directory for report file (default: same as schematic).
        Optional; omit to use the configured default.
    project_path: Path to .kicad_pro file for explicit root resolution
export_schematicA

Export 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_netlistA

Export 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_bomA

Export 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.
list_pcb_footprintsA

List all footprints on the PCB.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_tracesA

List 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_netsA

List all named nets on the PCB.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_zonesA

List all zones (copper and keepout) on the PCB.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_layersA

List all layers defined in the PCB stackup: copper, silkscreen, soldermask, solder paste, courtyard, fabrication, and the board outline.

Which of those a given board actually defines is up to the board. Call
this before any tool that takes a layer name, since the valid set is
per-board and renamed layers are common.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_pcb_graphic_itemsA

List all graphic items (lines, text, etc.) on the PCB.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
get_board_infoA

Get board summary: footprint count, trace count, net count, thickness.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
get_footprint_padsA

Get 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.
place_footprintA

Place a footprint on the PCB.

Name a library and a footprint to place the real thing: its pads, silkscreen,
courtyard and 3D model are copied from the library file exactly as KiCad
would place them. Without them you get a marker carrying only the reference
and value, which has NO PADS and so cannot be routed or checked; that is the
older behaviour and it is kept for callers that only want a placeholder.

Use list_lib_footprints to see what a library holds.

Args:
    reference: Reference designator (e.g. "R2")
    value: Component value (e.g. "4.7K")
    x: X position in mm
    y: Y position in mm
    rotation: Rotation in degrees
    layer: Layer (F.Cu or B.Cu)
    library: Footprint library nickname (e.g. "Resistor_SMD"), or a path to a
        .pretty directory. Optional; omit for a pad-less marker.
    footprint: Footprint name within that library (e.g. "R_0805_2012Metric").
        Required when library is given.
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
move_footprintA

Move a footprint to a new position.

Args:
    reference: Reference designator (e.g. "R1")
    x: New X position
    y: New Y position
    rotation: New rotation (None = keep current)
    layer: New layer. Naming the other side flips the footprint: every pad,
        graphic and text layer mirrors with it, the local geometry mirrors,
        and text gains a mirrored justification, which is what KiCad's own
        flip does. A footprint carrying a construct whose flip has not been
        measured here is refused rather than half-transformed.
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
check_placementA

Check 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.

Args:
    reference: Footprint reference designator
    x: Proposed X position
    y: Proposed Y position
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
remove_footprintA

Remove a footprint by reference designator.

Args:
    reference: Reference designator (e.g. "R1")
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
add_traceA

Add 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: Net number
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
add_viaA

Add a via at a position.

Args:
    x: X position
    y: Y position
    size: Via pad size in mm
    drill: Drill diameter in mm
    net: Net number
    layers: Via layers (default: ["F.Cu", "B.Cu"])
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
add_pcb_textA

Add 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_pcb_lineA

Add 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_copper_zoneA

Create 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
    priority: Zone fill priority (higher fills first)
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
add_keepout_zoneA

Create 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.
fill_zonesA

Fill 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.
update_pcb_from_schematicA

Update 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. Existing
footprints are matched by reference and keep their position; a
changed footprint assignment swaps the footprint in place. Stale
board footprints are reported, and removed only with delete_stale
(locked ones are never removed). Zones are NOT refilled: run
fill_zones afterward. Net names arrive exactly as KiCad's F8
produces them (local labels sheet-prefixed, e.g. "/SIG"); read them
with list_pcb_nets.

Requires kicad-cli. It no longer needs KiCad's pcbnew Python bindings.

Every byte this writes goes through the server's byte-preserving write, so
a board's format stamp does not move and the parts of it this tool did not
touch arrive unchanged.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    pcb_path: Path to .kicad_pcb file (created if missing).
        Optional; omit to use the configured default.
    delete_stale: Remove unlocked board footprints absent from the schematic
    project_path: Path to .kicad_pro for explicit root resolution (sub-sheets)
set_trace_widthA

Change 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.
remove_tracesA

Remove trace segments matching the given filters. Does not remove vias. At least one filter (net_name, layer, or bounding box) is required.

Args:
    net_name: Filter by net name
    layer: Filter by layer name (e.g. "F.Cu", "B.Cu")
    x_min: Left edge of bounding box filter (mm)
    y_min: Top edge of bounding box filter (mm)
    x_max: Right edge of bounding box filter (mm)
    y_max: Bottom edge of bounding box filter (mm)
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
add_thermal_viasA

Add 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
    cols: Number of columns in the via grid
    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 configured default.
set_net_classA

Create 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 default.
remove_dangling_tracksA

Detect and remove trace segments with unconnected endpoints.

Iteratively removes dangling segments until no more are found.
A segment is considered dangling if either endpoint does not connect
to a pad, via, or another trace endpoint.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
run_drcA

Run Design Rules Check (DRC) on a PCB.

Returns structured report with violations.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
    output_dir: Directory for report file (default: same as PCB).
        Optional; omit to use the configured default.
export_pcbA

Export 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: Include border and title block (DXF only)
export_gerbersA

Export 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)
    layers: Optional list of layer names. Single layer = single file output.
export_3dA

Export 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_positionsA

Export component position file (pick and place).

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_ipc2581C

Export 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
    precision: Numeric precision (default: 3)
    compress: Compress output file
    version: IPC-2581 version (default: "C")
    units: Output units - "mm" or "in"
autoroute_pcbA

Autoroute 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 Java 17+ and KiCad's pcbnew Python bindings, whose major version
has to match the board's format era. On first run, the Freerouting JAR is
auto-downloaded (~20MB).

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
    max_passes: Maximum autorouter optimization passes
    num_threads: Thread count for routing. Defaults to 1 because
        freerouting prints "Multi-threaded route optimization is broken
        and it is known to generate clearance violations" on every run.
        Raise it only if you are willing to DRC the result carefully.
    timeout: Max seconds to wait for routing (default: 600)
    output_dir: Directory for output files (default: same as PCB).
        Optional; omit to use the configured default.
get_footprint_boundsA

Get 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.
validate_boardA

Validate all footprint placements against keep-out zones and board edge.

Args:
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
list_lib_symbolsA

List all symbols in a .kicad_sym library file.

Args:
    symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
get_symbol_infoA

Get detailed pin and property info for a symbol in a library.

Args:
    symbol_name: Symbol name (e.g. "LM7805")
    symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
add_symbolA

Add 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"
        x (float): X position in mm (default 0)
        y (float): Y position in mm (default 0)
        rotation (float): angle 0/90/180/270 (default 0)
        length (float): pin length in mm (default 2.54)
    reference_prefix: Reference prefix e.g. "U", "R", "C" (default "U")
    is_power: True for power symbols (default False)
    pin_names_offset: Pin name label offset in mm (default 0.508)
    in_bom: Include in BOM (default True)
    on_board: Place on board (default True)
    footprint: Default footprint e.g. "Package_SO:SOIC-8" (default "")
    datasheet: Datasheet URL (default "~")
    rectangles: Optional body rectangle(s) — list of dicts with keys:
        x1, y1, x2, y2 (float): corner coordinates in mm
        fill (str): "none", "background", or "outline" (default "background")
        If omitted, a rectangle is auto-computed from pin positions.
    symbol_lib_path: Path to .kicad_sym file. Optional; omit to use the configured default.
export_symbol_svgA

Export 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.
upgrade_symbol_libA

Upgrade 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.
list_lib_footprintsA

List all footprints in a .pretty library directory.

Args:
    pretty_dir: Path to .pretty directory containing .kicad_mod files
get_footprint_infoB

Get 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.
export_footprint_svgB

Export 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.
upgrade_footprint_libA

Upgrade 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.

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 footprints leaves the rest of the library
alone. The whole library is still copied to ``<name>.pretty.bak`` first and
the result names it, because that is the undo for an upgrade that SUCCEEDED.
There is exactly one, and every run overwrites it.

Each file is atomic; the library as a whole is not a transaction. An upgrade
interrupted midway leaves some footprints migrated and some not, and no file
damaged. Version control is still the better answer for a library you care
about.

Args:
    footprint_path: Path to a .pretty library directory.
        Optional; omit to use the configured default.
create_projectA

Create a KiCad 9 project (.kicad_pro + .kicad_prl + .kicad_sch).

Args:
    directory: Directory to create the project in (created if missing)
    name: Project name (used for filenames)
create_schematicB

Create 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_symbol_libraryA

Create 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.
create_sym_lib_tableA

Create a sym-lib-table file in the given directory.

Each entry dict needs 'name' and 'uri' keys.
Overwrites existing sym-lib-table if present.

Args:
    directory: Directory to write sym-lib-table in
    entries: List of dicts with 'name' and 'uri' keys
add_hierarchical_sheetA

Add a hierarchical sheet to a parent schematic with matching labels in the child.

Creates the sheet block in the parent and corresponding hierarchical
labels in the child schematic. The child schematic must already exist
(create it with create_schematic first).

Args:
    parent_schematic_path: Path to parent .kicad_sch
    sheet_name: Display name for the sheet
    sheet_file: Path to child .kicad_sch (must exist)
    pins: List of dicts with 'name' (str) and 'direction' (str) keys.
          Direction: input, output, bidirectional, tri_state, passive.
    x: X position of sheet block (default 25.4)
    y: Y position of sheet block (default 25.4)
    project_path: Path to .kicad_pro file (for sub-sheet instance tracking)
remove_hierarchical_sheetA

Remove a hierarchical sheet block from a parent schematic.

Identify the sheet by name, uuid, or both. If name matches multiple sheets,
returns an error with UUIDs for disambiguation.

Args:
    parent_schematic_path: Path to parent .kicad_sch
    name: Sheet name to match
    uuid: Sheet UUID for unambiguous identification
    delete_child_file: If True, delete the child .kicad_sch file
          (unless still referenced by another sheet)
modify_hierarchical_sheetA

Modify properties of an existing hierarchical sheet block.

Args:
    sheet_uuid: UUID of the sheet to modify (from list_schematic_sheets)
    schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
    sheet_name: New display name (empty = keep)
    file_name: New file path (empty = keep)
    width: New width in mm (None = keep)
    height: New height in mm (None = keep)
add_sheet_pinA

Add a pin to an existing hierarchical sheet block.

Args:
    sheet_uuid: UUID of the sheet
    pin_name: Pin name (should match a hierarchical label in the child schematic)
    connection_type: input, output, bidirectional, tri_state, passive
    schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
    side: Which sheet edge to place pin on (left or right)
remove_sheet_pinA

Remove a pin from a hierarchical sheet block.

Args:
    sheet_uuid: UUID of the sheet
    pin_name: Name of the pin to remove
    schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
annotate_schematicA

Auto-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)
validate_hierarchyA

Validate hierarchical schematic for common issues.

Checks for orphaned labels/pins, direction mismatches, duplicate
reference designators, unannotated components, and missing files.

Args:
    schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
is_root_schematicA

Check if a schematic is the root or a sub-sheet.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
list_hierarchyA

List the full sheet hierarchy starting from a root schematic.

Args:
    schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
get_sheet_infoA

Get 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.
trace_hierarchical_netA

Trace 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.
list_cross_sheet_netsA

List all nets that cross sheet boundaries (hierarchical pins and global labels).

Args:
    schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
get_symbol_instancesA

List all symbol instances from a root schematic's symbolInstances table.

Args:
    schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
move_hierarchical_sheetA

Move a hierarchical sheet block to a new position, including all pins.

Args:
    sheet_uuid: UUID of the sheet to move
    new_x: New X position in mm
    new_y: New Y position in mm
    schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
reorder_sheet_pagesA

Reorder hierarchical sheets by specifying the desired UUID order.

Args:
    page_order: List of sheet UUIDs in desired order
    schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
duplicate_sheetA

Duplicate a hierarchical sheet, copying the child file with new UUIDs.

Args:
    sheet_uuid: UUID of the sheet to duplicate
    new_sheet_name: Display name for the new sheet
    schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.
    project_path: Path to .kicad_pro (for hierarchy metadata)
    new_file_name: Name for the copied file (auto-generated if empty)
flatten_hierarchyA

Flatten a hierarchical schematic into a single sheet.

Merges all child sheet content into one schematic with offset positions.
Creates a new file — does NOT modify the original hierarchy.

Args:
    schematic_path: Path to root .kicad_sch file. Optional; omit to use the configured default.
    output_path: Path for flattened output (defaults to *_flat.kicad_sch)
export_hierarchical_netlistA

Export 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.
run_jobsetA

Run a KiCad jobset file.

Args:
    jobset_path: Path to .kicad_jobset file
get_versionA

Get KiCad version information including build details and library versions.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ProductOfAmerica/mcp-server-kicad'

If you have feedback or need assistance with the MCP directory API, please join our Discord server