Skip to main content
Glama
ProductOfAmerica

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 start • What you get • Configuration • Tool reference • Requirements • Contributing

IMPORTANT

Maintenance mode. As of October 2026 this project gets security fixes and KiCad compatibility fixes only. No new tools or features are planned. Existing installs keep working. Why

Why maintenance mode

The plugin was built on one idea: KiCad files are large, so an AI assistant should change them through tools instead of editing the text. We tested that idea against plain Claude Code with KiCad installed and no plugin: the same model (Claude Opus 5.5), the same settings and the same tasks, each result judged by KiCad 10 itself (netlist, board, ERC and DRC).

  • Six single edits on a public KiCad 10 design (a value change, do-not-populate, a footprint swap, pads assigned to a net, a footprint rotation, a net renamed across sheets), three runs each. Plain Claude Code got all 18 right. With the plugin, 3 of 18 were right.

  • A long session of 20 board edits. Both got every edit right, and the plugin's sessions used about 1.8 times as much context.

  • Why the plugin failed, from reading every transcript:

    • It had no tool for some edits (a pad's net, the do-not-populate flag, swapping one footprint).

    • Its instructions told the model never to edit KiCad files directly, so the model stopped and asked instead.

    • Its board-sync tool rewrote almost every footprint on the board, so the model undid its own work.

  • The premise did not hold in these tests. Plain Claude Code changed a 2 MB board without reading it whole: it searched for the part and edited only the lines it needed.

These were small tests on one design, not a verdict on every board or every model. They were enough to stop adding tools. The test material is not published, because the design it used carries no license.

What to use instead: a coding agent such as Claude Code, with KiCad installed. Ask it to check its changes with kicad-cli (netlist export, ERC, DRC) before it finishes.

Bug reports and fixes for KiCad compatibility are still welcome.


Related MCP server: kicad-mcp-pro

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 and wire both pins to their nets
  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, and a write changes only the bytes you asked it to. An edit that cannot be done correctly is refused with the file intact. KiCad itself writes a design file in just two places: the library upgrades, and autoroute_pcb's routed copy, a new board that leaves yours untouched.

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; you need KiCad installed, plus Java 25 or newer for autoroute_pcb.

Desktop does not run from your project directory, so fill in the schematic, board, and export paths it asks for. Leave the kicad-cli field blank unless KiCad is installed somewhere unusual. The design skills are Claude Code only.

Everything else

pip install mcp-server-kicad

Then point your MCP client at the unified server, and name your schematic, board, and export folder in env by absolute path, so tools find them without being told on every call:

{
  "mcpServers": {
    "kicad": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad"],
      "env": {
        "KICAD_SCH_PATH": "/path/to/project/project.kicad_sch",
        "KICAD_PCB_PATH": "/path/to/project/project.kicad_pcb",
        "KICAD_OUTPUT_DIR": "/path/to/project"
      }
    }
  }
}

That single entry registers all 109 tools. A client that starts the server in your project's folder can leave env out: the server then takes the paths from the single .kicad_pro there (see How paths resolve). Prefer to split the tools 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.

Server

Tools

What it does

mcp-server-kicad-schematic

42

Schematic read/write, net tracing, ERC, exports (PDF, SVG, DXF, netlist, BOM)

mcp-server-kicad-pcb

34

Board read/write, netlist import, zones, DRC, autorouting, exports (Gerber, drill, 3D, pick-and-place)

mcp-server-kicad-project

24

Project scaffolding, hierarchical sheets, hierarchy validation, annotation, cross-sheet net tracing

mcp-server-kicad-symbol

5

Symbol library browsing, authoring, SVG export, format upgrade

mcp-server-kicad-footprint

4

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

Skill

Kicks in when

using-kicad

Any electronics or EDA conversation starts. Routes to the right skill below

circuit-design

Choosing topology, regulators, and component values, before any file exists

schematic-plan

Planning exact placement coordinates and wiring. Pure planning, no writes

schematic-design

Executing that plan, or modifying an existing schematic

pcb-layout

Placing footprints, routing, zones, stackup, trace widths

verification

ERC 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:

{
  "mcpServers": {
    "kicad-schematic": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-schematic"]
    },
    "kicad-pcb": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-pcb"]
    },
    "kicad-symbol": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-symbol"]
    },
    "kicad-footprint": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-footprint"]
    },
    "kicad-project": {
      "command": "uvx",
      "args": ["--from", "mcp-server-kicad", "mcp-server-kicad-project"]
    }
  }
}

Give each entry the env block from Everything else, with KICAD_SYM_LIB or KICAD_FP_LIB for the library servers, unless your client starts them in the project's folder.

Each is also runnable directly:

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

How paths resolve

Highest priority wins:

  1. Tool parameters. Every tool accepts an explicit path.

  2. Environment variables. They override anything auto-detected.

  3. Auto-detect. The working directory is scanned for a .kicad_pro, and the schematic, board, and library paths are derived from it.

Variable

Points at

KICAD_SCH_PATH

a .kicad_sch schematic file

KICAD_PCB_PATH

a .kicad_pcb board file

KICAD_SYM_LIB

a .kicad_sym symbol library file

KICAD_FP_LIB

a .pretty footprint library directory

KICAD_OUTPUT_DIR

where exports and reports are written

Requirements

  • Python 3.11+

  • KiCad 9.x or 10.x, only for the tools that call KiCad:

    • kicad-cli: ERC, DRC, exports, jobsets, get_version, the library upgrades and update_pcb_from_schematic

    • pcbnew Python bindings: fill_zones and autoroute_pcb (which also needs Java 25 or newer; see The Freerouting download)

    • KiCad's stock libraries: placing a stock symbol or footprint

    Every other tool parses files directly and needs no KiCad.

CI covers Linux (KiCad 9 and 10), macOS and Windows (KiCad 10), and Python 3.11 to 3.14.

The Freerouting download

autoroute_pcb runs Freerouting. Unless FREEROUTING_JAR names a jar, its first call downloads Freerouting 2.5.0, freerouting-2.5.0.jar (65 MB, needs Java 25 or newer), from https://github.com/freerouting/freerouting/releases/download/v2.5.0/freerouting-2.5.0.jar and caches it as ~/.local/share/mcp-server-kicad/freerouting-2.5.0.jar (%USERPROFILE%\.local\share\mcp-server-kicad\ on Windows). Its SHA-256 is checked against the value pinned in this package before the download is saved and every time the cached copy is used. A download that does not match is not saved; a cached copy that does not match is not run, and is downloaded again.

Freerouting is run with --gui.enabled=false and --usage_and_diagnostic_data.disable_analytics=true, the settings its documentation gives for running headless and for not sending usage data, so it opens no window and its analytics stay off. When it starts, Freerouting still asks GitHub for its newest release; it has no setting to turn that off.

To skip the download, set FREEROUTING_JAR to the absolute path of a Freerouting jar you trust. That jar is used as given, with no hash check. A relative path, or one that names no file, is ignored and the download goes ahead. Earlier releases cached an unpinned freerouting.jar in the same folder; it is no longer read and can be deleted.

Finding your KiCad install

A stock install needs no configuration. kicad-cli is found on PATH, then in /Applications/KiCad/KiCad.app on macOS, then under Program Files and AppData on Windows, newest first. The stock libraries and pcbnew's Python are found relative to it. For an unusual install:

Variable

Overrides

KICAD_CLI_PATH

the kicad-cli executable, and everything derived from its location

KICAD_SYMBOL_DIR

the directory holding the stock .kicad_sym libraries

KICAD_PYTHON

the interpreter used for pcbnew (fill_zones, autoroute_pcb), as an absolute path or a name on PATH

Without kicad-cli, the tools that need it stay listed and fail with a message naming KICAD_CLI_PATH.

KiCad 10 files

The server's own reads and writes handle KiCad 9 and 10 schematics, boards, symbol libraries and footprints alike, and never change bytes you did not ask to change (see docs/adr-cst-substrate.md). Work handed to KiCad itself only succeeds if your install can load the file, and KiCad 9 cannot load a KiCad 10 board:

  • fill_zones and autoroute_pcb refuse a KiCad 10 board on a KiCad 9 pcbnew before starting; install KiCad 10 or point KICAD_PYTHON at one. autoroute_pcb on a KiCad 9 board through KiCad 10's pcbnew works but warns that the routed copy comes back in KiCad 10 format. It never touches the original board.

  • upgrade_symbol_lib and upgrade_footprint_lib let KiCad rewrite your files, by design. Each file is replaced atomically and only if it changed, so an interrupted upgrade leaves none damaged. A backup goes to <name>.bak, overwritten every run.

Windows: Controlled Folder Access

Defender's Controlled Folder Access blocks unrecognised apps from writing under Documents, where KiCad keeps its data. kicad-cli then crashes at startup (exit 3221225477) on every call, --version included, and the error looks like a missing file: error 2: The system cannot find the file specified.

The server works around this: it retries once with KICAD_DOCUMENTS_HOME pointed at an unprotected local folder and keeps it for the session. Set KICAD_DOCUMENTS_HOME yourself to pick the folder (this turns the retry off).

It cannot fix your project files. If your project lives under Documents, the write tools fail the same way. Move the project, or allow the tools under Windows Security > Virus & threat protection > Ransomware protection > Allow an app through Controlled folder access.

Tool reference

Read

Tool

Description

get_schematic_summary

Get item counts for a schematic sheet

list_schematic_components

List all components (symbols) on a sheet

list_schematic_labels

List all net labels on a sheet

list_schematic_wires

List all wires on a sheet

list_schematic_global_labels

List all global labels on a sheet

list_schematic_hierarchical_labels

List all hierarchical labels on a sheet

list_schematic_sheets

List all hierarchical sheet blocks on a sheet

list_schematic_junctions

List all junctions on a sheet

list_schematic_no_connects

List all no-connect flags on a sheet

list_schematic_bus_entries

List all bus entries on a sheet

get_symbol_pins

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

get_pin_positions

Get absolute pin positions for a placed component, accounting for rotation and mirror

get_net_connections

Get all connections for a named net (multi-hop BFS wire tracing)

list_unconnected_pins

List the pins ERC reports as not connected, positions in millimetres; a sub-sheet gets its own, from its project's root

Write

Tool

Description

place_component

Place a component in the schematic

remove_component

Remove a component by reference designator

move_component

Move or turn a placed component. Its fields travel with it; wires stay where they are, as with KiCad's own Move, and the result names every pin whose connections changed. Called at the symbol's own position it turns the symbol in place, without snapping

set_component_property

Set any property (Value, Reference, Footprint, ...) on a placed component

add_lib_symbol

Load a symbol definition from a .kicad_sym library into the schematic

add_wires

Add one or more wires between points as KiCad's wire tool does: a junction where three or more wires or pins meet, the wires split there

remove_wire

Remove a wire segment

add_junctions

Add one or more junction dots where three or more wires or pins meet, splitting the wires through them; refused anywhere else

remove_junction

Remove a junction dot, merging the wires it split as KiCad's delete does

add_label

Add a net label at a position

remove_label

Remove a net label or global label

add_global_label

Add a global net label visible across all sheets

add_hierarchical_label

Add a hierarchical label for sheet-to-sheet connections

remove_hierarchical_label

Remove a hierarchical label by name or UUID

modify_hierarchical_label

Modify text, shape, or position of a hierarchical label

add_power_symbol

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

add_text

Add a text annotation to the schematic

remove_text

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

wire_pins_to_net

Wire one or more pins to a named net

connect_pins

Wire two component pins together

auto_place_decoupling_cap

Automatically place a decoupling capacitor near an IC

no_connect_pin

Place a no-connect flag on an unused pin (idempotent)

remove_no_connect

Remove no-connect flag(s) from a pin

set_page_size

Set the schematic page size

Analysis and export

Tool

Description

run_erc

Run Electrical Rules Check, positions in millimetres; a sub-sheet is checked from its project's root and gets its own violations, with project_path to name the project; a run that makes no report raises and leaves output_dir as it was

export_schematic

Export schematic to PDF, SVG, or DXF

export_netlist

Export the schematic netlist

export_bom

Export a Bill of Materials as CSV

Read

Tool

Description

list_pcb_footprints

List all footprints on the board

list_pcb_traces

List all traces on the board

list_pcb_nets

List all nets on the board

list_pcb_zones

List all zones on the board

list_pcb_layers

List all layers on the board

list_pcb_graphic_items

List all graphic items on the board

get_board_info

Board summary: footprint count, trace count, net count, thickness

get_footprint_pads

Get pad info for a placed footprint

get_footprint_bounds

Get the board-coordinate bounding box of a placed footprint

Write

Tool

Description

place_footprint

Place a footprint on the board

move_footprint

Move a footprint to a new position

remove_footprint

Remove a footprint by reference designator

add_trace

Add a trace segment between two points

remove_traces

Remove trace segments matching filters

set_trace_width

Change the width of existing traces

remove_dangling_tracks

Detect and remove trace segments with unconnected endpoints

add_via

Add a via at a position

add_thermal_vias

Add a grid of thermal vias under a footprint pad

add_pcb_text

Add text to the board (silkscreen, fab layer, ...)

add_pcb_line

Add a graphic line (edge cuts, silkscreen, ...)

add_copper_zone

Create an unfilled copper zone

add_keepout_zone

Create a keep-out zone restricting tracks, vias, pads, pours, or footprints

fill_zones

Fill all copper zones on the board

set_net_class

Create or update a net class with design rules

update_pcb_from_schematic

Import or sync the schematic netlist onto the board: footprints, their fields and footprint filters, DNP and BOM flags (position-file flag too on KiCad 10), sheet linkage and pad nets; libraries through the project's and the user's fp-lib-table

Analysis and export

Tool

Description

run_drc

Run Design Rules Check on the board

check_placement

Check whether a proposed footprint position hits a keep-out zone or the board edge

validate_board

Check every placed footprint against keep-out zones and the board edge

autoroute_pcb

Autoroute traces using the Freerouting autorouter

export_pcb

Export board layers to PDF, SVG, or DXF

export_gerbers

Export Gerber files, all layers or a specific list

export_3d

Export a 3D model (STEP/STL/GLB) or render the 3D view to PNG

export_positions

Export a pick-and-place position file as CSV, in millimetres

export_ipc2581

Export in IPC-2581 format for manufacturing data exchange

Scaffolding

Tool

Description

create_project

Create a KiCad 9 project (.kicad_pro and the root .kicad_sch; no .kicad_prl)

create_schematic

Create a blank schematic file

create_symbol_library

Create a blank symbol library file

create_sym_lib_table

Create a sym-lib-table file

Sheet management

Tool

Description

add_hierarchical_sheet

Add a hierarchical sheet with matching labels in the child, all checked before anything is written

remove_hierarchical_sheet

Remove a hierarchical sheet block from a parent

modify_hierarchical_sheet

Modify sheet name, file, width, or height; a resize keeps pins on their edges and moves the wires on them

move_hierarchical_sheet

Move a sheet block to a new position, pins included

add_sheet_pin

Add a pin to the left or right edge of a sheet block, at the first free slot

remove_sheet_pin

Remove a pin from a hierarchical sheet block

duplicate_sheet

Duplicate a sheet: a copy of the block and of the child file, with the lowest free page and parts numbered apart from the originals; a sheet with sub-sheets of its own is refused

reorder_sheet_pages

Put sheets in the page order given by rewriting their page numbers, the order KiCad lists them in; call it on the root schematic

Hierarchy inspection

Tool

Description

is_root_schematic

Check whether a schematic is its project's root or one of its sheets, including a sheet in a folder below the project's; a file no sheet uses is a root

list_hierarchy

List the full sheet hierarchy tree from root

get_sheet_info

Get sheet details with pin and label matching status

validate_hierarchy

Check every sheet for orphaned labels and pins, direction mismatches, duplicate refs, junctions and bus entry ends left inside wires, and no-connect flags and wire ends left off the pins of mirrored, rotated parts, with the call that repairs each where a tool can

Cross-sheet analysis

Tool

Description

trace_hierarchical_net

Trace a net across the hierarchy through pins and labels

list_cross_sheet_nets

List all nets crossing sheet boundaries

get_symbol_instances

List symbol instances from the root schematic

Annotation, export, utilities

Tool

Description

annotate_schematic

Auto-assign reference designators, respecting hierarchy

export_hierarchical_netlist

Export a netlist with hierarchy info (requires kicad-cli)

flatten_hierarchy

Flatten a hierarchical schematic into a new single-sheet file whose netlist is the hierarchy's; refuses, writing nothing, where it could not keep it (bus names across sheets, for one)

run_jobset

Run a KiCad jobset against the project beside it; an error when nothing ran or a job failed

get_version

Get KiCad version information

Symbol

Tool

Description

list_lib_symbols

List all symbols in a .kicad_sym library

get_symbol_info

Get detailed pin and property info for a library symbol

add_symbol

Add a new symbol to a .kicad_sym library

export_symbol_svg

Export a symbol library to SVG images

upgrade_symbol_lib

Upgrade a symbol library to the current KiCad format

Footprint

Tool

Description

list_lib_footprints

List all footprints in a .pretty library directory

get_footprint_info

Get pad and outline details for a .kicad_mod file

export_footprint_svg

Export a footprint to SVG

upgrade_footprint_lib

Upgrade a footprint library to the current KiCad format

Debugging

Drive the servers by hand with the MCP Inspector:

npx -y @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

GPL-3.0-or-later. Releases up to and including 0.20.1 were MIT-licensed; see NOTICE.

Available Tools

109 tools
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.
NameRequiredDescriptionDefault
layerYes
cornersYes
net_nameYes
pcb_pathNo
priorityNo
clearanceNo
thermal_gapNo
min_thicknessNo
thermal_reliefNo
thermal_bridge_widthNo

Output Schema

NameRequiredDescription
netYes
layerYes
cornersYes
clearance_mmYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the zone is created unfilled and needs a separate fill step, which is an important behavioral nuance beyond the bare create operation. It also clarifies the optional pcb_path behavior, noting omission uses the configured default. The annotations are minimally informative with all false hints, so the description does meaningful extra work.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and the essential workflow hint, followed by a compact Args list. Every line earns its place and no wasted words exist. Given 10 parameters, the format is an efficient and scannable way to convey all necessary semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, 0% schema description coverage, and output schema not shown, the description successfully carries the full load by covering all parameters, the necessary fill_zones follow-up, and pcb_path behavior. However, it does not mention prerequisites like board existence or layer validity, nor does it describe potential error conditions, leaving a small but non-critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by documenting every parameter with units, examples, defaults, and additional meaning. It explains thermal_relief as a boolean choice, priority as "higher fills first," corners as a polygon with min 3 points, and pcb_path as optional with a default configuration. This goes well beyond the schema's titles and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action-resource pairing, "Create an unfilled copper zone," and disambiguates it from sibling tools by clarifying that fill_zones must be called afterward. Names like add_keepout_zone and fill_zones are clearly distinct because the tool explicitly covers copper pours and defers filling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear when-to-use guidance by saying this creates zones and that "Call fill_zones afterward to compute the fills," establishing the expected sequencing. It does not explicitly contrast with add_keepout_zone or other zone tools, so it doesn't fully cover exclusions, but the core workflow is clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
xYes
yYes
textYes
shapeNoinput
rotationNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating (readOnlyHint=false) and non-destructive operation. The description adds meaningful context beyond annotations by explaining that the label is visible across all sheets and that schematic_path is optional with a default configuration. This is sufficient behavioral disclosure for a straightforward add operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a single purpose sentence followed by a clean args list. Every line adds value, and the parameter explanations are tightly written without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six parameters and three required, the description covers all parameter semantics, states the tool's global-label scope, and explains the optional schematic_path with its default behavior. Since an output schema exists, return-value details are not needed. The description is fully adequate for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides detailed, human-readable explanations for all six parameters, including the rotation degree mapping (0=right, 90=up, etc.), the valid shape enum values, and the optional behavior of schematic_path. This fully compensates for the 0% schema description coverage and adds clarity beyond the bare schema properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a global net label' with a specific verb and resource, and adds the scoping detail 'visible across all sheets' that distinguishes it from local label tools like add_label or hierarchical labels. It is precise and not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for cross-sheet net labels via the phrase 'global net label (visible across all sheets)', but it does not explicitly state when to use this tool versus alternatives such as add_label or add_hierarchical_label, nor does it mention exclusions. The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
xYes
yYes
textYes
shapeYes
rotationNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a mutating operation (readOnlyHint=false), but the description adds minimal behavioral context beyond that. It mentions the name must match the parent sheet pin name, but does not disclose what happens on mismatch, whether the file is saved automatically, or other side effects. Given the annotations are present but not highly informative, the description carries some burden and partially fulfills it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear one-sentence purpose followed by a compact Args block. Every line provides necessary information (parameter name, explanation, or constraint) without extraneous prose. The front-loaded purpose makes it immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (so return values need not be described) and the parameters are fully explained, the description covers most operational context. However, it lacks mention of prerequisites such as the sub-sheet and parent sheet pin existing, and does not describe error behavior. These gaps are moderate given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions (0% coverage), so the description fully compensates by explaining each parameter: text must match a parent pin, shape is a direction with enumerated values, x/y are positions in mm, rotation is in degrees with allowed values, and schematic_path is optional. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a hierarchical label to a sub-sheet schematic,' using a specific verb and resource that distinguishes it from sibling tools like add_label and add_global_label. The phrase 'hierarchical label' and 'sub-sheet schematic' makes the tool's unique scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when this tool should be used: adding hierarchical labels to sub-sheet schematics. It also includes a critical usage constraint: 'Label name (must match parent sheet pin name).' It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to differentiate from similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_hierarchical_sheetA

Add 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 of the hierarchy uses. It is written at
the instance path of the parent (the sheet that holds the block), which is where KiCad
reads a sheet's page; give project_path when the parent is itself a sub-sheet, so that
path can be found. Symbols already in the child get an instance entry at the new
sheet's path.

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)
NameRequiredDescriptionDefault
xNo
yNo
pinsYes
sheet_fileYes
sheet_nameYes
project_pathNo
parent_schematic_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/safety profile (readOnlyHint=false, idempotentHint=false); the description adds far more, notably atomic validation ('Everything is checked before the first write, so a refusal changes neither file') and the enumerated refusal conditions. It also discloses non-obvious side effects: page-number allocation, instance-path writing, and instance entries added to symbols already in the child.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action in the first sentence and then layers prerequisites, validation, and mechanics. The page-number/instance-path paragraph is dense but earns its place for a hierarchy-editing tool; it could be trimmed slightly without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-idempotent hierarchy mutation with 7 parameters and no schema descriptions, the definition covers prerequisites, failure atomicity, refusal conditions, placement defaults, and instance-path behavior. An output schema exists, so return values need not be explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all parameter meaning, and it does: it defines the pins list shape ('dicts with name and direction'), enumerates the five legal directions, documents defaults for x/y, and explains the project_path-for-sub-sheet case and that sheet_file must exist. This fully compensates for the untyped schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Add a hierarchical sheet to a parent schematic') and immediately names the dual effect: the sheet block in the parent plus matching hierarchical labels in the child. This distinguishes it clearly from siblings like add_sheet_pin, add_hierarchical_label, and modify_hierarchical_sheet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States an explicit prerequisite and the alternative that satisfies it ('The child schematic must already exist (create it with create_schematic first)'). Also conditions when to supply project_path ('when the parent is itself a sub-sheet'). What's missing is a negative case — when to use modify_hierarchical_sheet or duplicate_sheet instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_junctionsA

Add 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 junction
is split there, which kicad-cli 9 needs to read the join; where a junction is already
exactly at a point no second one is added, but a wire still running through it is split.
A point where KiCad allows a junction, or where one already is, is taken even off the
page: it lies on wires or pins already drawn, which KiCad reads there as anywhere else.
Any other point off the page is refused as off the page. The result names each junction
written, each one already there and each split.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: atomic refusal with nothing written, per-point error naming, wire-splitting side effects, no duplicate junction insertion, and the nuanced off-page rule. This is exactly the mutation behavior (partial idempotency on junctions, mutation of existing wires) an agent cannot infer from readOnlyHint=false / destructiveHint=false / idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and the critical refusal semantics come early. The source citation (sch_drawing_tools.cpp:1465-1497 at 9.0.8) and the convoluted off-page sentence ("...which KiCad reads there as anywhere else") cost some density, and the trailing Args block partly repeats the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still summarizes what the result names (written, already present, split), which is helpful rather than redundant. For a mutation tool with two params and no annotation safety detail, every behavior an agent needs is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well: it spells out the points list shape ({x, y} dicts) and clarifies that schematic_path is optional and falls back to the configured default. It doesn't give coordinate units or a concrete example payload, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Add multiple junctions") plus the domain reference (KiCad's junction tool), which separates it cleanly from add_wires, remove_junction and list_schematic_junctions. The spatial rule that follows makes the resource even more concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Strong when-not guidance: it enumerates exactly the geometries where KiCad refuses a junction (empty space, wire interior, L corner, wire ending at a pin) and states the whole call fails if any point is invalid. It never names a sibling tool as an alternative (e.g. add_wires to create the wires first), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
layersNo
cornersYes
no_padsNo
no_viasNo
pcb_pathNo
no_tracksNo
no_footprintsNo
no_copper_pourNo

Output Schema

NameRequiredDescription
layersYes
cornersYes
restrictionsYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no hints (all false), so the description carries the burden. It discloses the zone's restriction capabilities and default layers, and notes that pcb_path is optional. However, it does not mention side effects such as direct file modification, whether the zone is appended to existing zones, or any validation/error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by a compact, scannable argument list. No filler or repetition; every line provides necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description thoroughly covers parameter semantics, it lacks key contextual details for a mutating tool: no mention of file modification side effects, no guidance on when to use vs sibling zone tools, and no reference to expected return values (though the output schema exists). This is adequate but leaves clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description effectively compensates by explaining every parameter: corners as {x,y} dicts with min 3, layer defaults, each no_* boolean's meaning, and pcb_path optionality. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create a keep-out zone that restricts placement of specified items,' which is a specific verb+resource statement that clearly defines the tool's function. This also distinguishes it from siblings like add_copper_zone, which serves a different purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its purpose statement, but it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. For example, it does not contrast with add_copper_zone or explain when a keep-out zone is preferable to other restrictions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
xYes
yYes
textYes
rotationNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false), and the description aligns by saying 'Add'. It adds some context for rotation values but does not disclose other behavioral traits like file-modification side effects or error conditions. With annotations covering the basic safety profile, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: one sentence for purpose, then a clear Args list. Every line adds value, and it is appropriately sized for a five-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description fully covers parameter semantics, optionality, and coordinate conventions. An output schema exists, so return value explanation is unnecessary. No prerequisites or complex behaviors are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameter descriptions, so the description carries full burden. It explains text with examples, defines rotation degrees, and clarifies that schematic_path is optional. This is exactly the kind of semantic enrichment needed for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Add') and resource ('net label') with positional context, clearly distinguishing it from sibling tools like add_global_label or add_hierarchical_label. It is unambiguous and precisely states the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives such as add_global_label or add_text. Usage is implied by the tool's name and description, but there is no direct comparison or exclusion, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
symbol_nameYes
schematic_pathNo
symbol_lib_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states symbol_lib_path is optional, but the schema marks it as required, a direct contradiction that undermines agent correctness. Additionally, with all annotations false, the description carries the full burden for disclosing side effects, but it neither explains the mutation behavior nor mentions idempotency or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, uses a clear docstring structure with an Args block, front-loads the purpose, and avoids redundancy. The only blemish is the optionality error, but that is a content issue, not a structural one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotation support and incomplete parameter documentation, the description should clarify the exact behavioral outcome (e.g., whether the symbol is added to the schematic library vs. instantiated) and highlight the required/optional mismatch. It does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 0%, the description compensates by explaining each parameter with a format hint (e.g., '.kicad_sym' and '.kicad_sch') and an example for symbol_name. However, the incorrect 'optional' label for symbol_lib_path reduces its value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Load' with a clear resource ('a symbol definition from a .kicad_sym library') and destination ('into the schematic'), distinguishing it from siblings like add_symbol or place_component.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It does not mention when to use this tool over alternatives like add_symbol or place_component, nor does it provide any exclusions or prerequisites. The 'into the schematic' context is implied but no explicit guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes
layerNoEdge.Cuts
widthNo
pcb_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no hints (all false), so the description bears the full burden. It states it adds a line but does not mention side effects, coordinate units/origin, file modification behavior, or reversibility. Only the optional pcb_path is noted, which is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single purpose sentence followed by a compact parameter list. Every line adds value, no fluff, and the structure front-loads the core action before parameter details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All 7 parameters are described with defaults and optionality noted. Missing details like coordinate units and preconditions are minor for a simple geometry-add tool. The output schema handles return values, so no description needed there. Overall, adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the Args section in the description is crucial. It explains start/end coordinates, gives layer examples, states width units (mm), and clarifies pcb_path optionality. However, it omits units for x/y coordinates and the origin reference, preventing a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a clear verb-object statement: 'Add a graphic line to the PCB', followed by examples of layer usage (edge cuts, silkscreen). This distinguishes it from sibling tools like add_trace (electrical) and add_pcb_text, giving a specific resource and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for graphic lines via examples but does not explicitly contrast with electrical trace tools or state when not to use it. It gives context but lacks explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
xYes
yYes
textYes
layerNoF.SilkS
pcb_pathNo
rotationNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false, so they provide no safety or side-effect information, leaving the description to carry the full disclosure burden. The description explains the pcb_path default behavior but does not mention mutation scope, error handling, file modifications, or return values. For a mutating tool, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-line summary followed by an Args list. Each line adds concrete value without redundancy or unnecessary fluff, keeping it easy for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters and annotations that provide no supporting context, the description covers all parameter semantics and the core action. It does not mention coordinate units or return behavior, but the existence of an output schema (if populated) would likely address return expectations. Overall, it is adequately complete for a PCB text-addition tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the primary source of parameter meaning. It explains each parameter, provides concrete layer examples ('F.SilkS', 'B.SilkS', 'F.Fab'), and clarifies pcb_path optionality with a default behavior. This strongly compensates for the bare schema, though some details like coordinate units are absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds text to a PCB with specific layers (silkscreen, fab, etc.). The verb 'Add' and resource 'the PCB' make the purpose unambiguous, and it immediately distinguishes from the schematic-oriented add_text sibling by naming PCB layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning 'silkscreen, fab layer, etc.' and the PCB scope, but it does not explicitly guide when to choose this tool over alternatives like add_text or add_pcb_line. It gives enough context to infer when to use it, though without explicit exclusions or direct sibling comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

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,
        for a library outside KiCad's stock set. Optional; omit to load it
        from the stock library named by the lib_id prefix.
    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)
NameRequiredDescriptionDefault
xYes
yYes
lib_idYes
rotationNo
referenceYes
project_pathNo
schematic_pathNo
symbol_lib_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, non-destructive, non-idempotent. The description adds real behavioral context beyond that: the internal delegation to place_component, the isPower=True nature of the symbols, and the ERC semantics of PWR_FLAG (tells ERC the net has a source it cannot see). It does not discuss repeat-call behavior despite idempotentHint=false, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then mechanism, then the PWR_FLAG note, then a structured Args block. Every sentence conveys useful information, though the PWR_FLAG paragraph is slightly tangential to the core placement action. Well organized and appropriately sized for an 8-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. For an 8-parameter placement tool the description covers purpose, mechanism, ERC-related behavior, and every parameter including optional/default semantics. It is essentially complete, missing only explicit sibling routing guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it delivers a complete Args section explaining all 8 parameters: lib_id with concrete examples, reference format '#PWR01', rotation in degrees, symbol_lib_path for out-of-stock libraries with default behavior, schematic_path default, and project_path purpose. This fully compensates for the empty schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Place a power symbol') with examples (VCC, GND, +3V3), and clarifies the mechanism by noting it uses place_component internally and that these are regular 'power' library symbols with isPower=True, which helps distinguish it from generic symbol placement. It does not explicitly contrast against add_symbol or place_component for the main use case, so differentiation is good but not complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides domain guidance on the PWR_FLAG companion case and clarifies 'Places only the symbol asked for', but gives no explicit when-to-use-this-vs-siblings rule (e.g., versus place_component or add_symbol). Usage is implied rather than stated, so the minimum-viable 3 fits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_sheet_pinA

Add 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: 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)
NameRequiredDescriptionDefault
sideNoleft
pin_nameYes
sheet_uuidYes
schematic_pathNo
connection_typeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the hints: each call consumes the next free slot (explaining why idempotentHint=false), failed validation is atomic ("writing nothing"), the error message carries actionable data (the required height), and the layout is explicitly the tool's own rather than KiCad's. Also enumerates the validation rules that cause refusal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by behavior, then arguments; every sentence carries information (slot algorithm, refusal semantics, remedy). The Args block restates schema titles, which is justified at 0% coverage but keeps it from being maximally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with an output schema available, the description covers what is needed to invoke it correctly: placement rule, atomic refusals, validation constraints and the pointer to the sibling that resolves the failure case. Nothing needed for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does: all five parameters are explained, and it supplies the five connection_type values that the schema does not constrain with an enum. It also states schematic_path is optional with a configured default and that side is left/right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("Add a pin to an existing hierarchical sheet block"), scoped to hierarchical sheets so it is distinguishable from add_hierarchical_label and from the create/modify sheet siblings. An agent knows exactly what this produces without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the placement rule (first free slot from the top edge in 2.54 mm steps) and the failure condition (no slot -> refused, nothing written), plus the remedy (modify_hierarchical_sheet) and the pin_name/hierarchical-label relationship. It stops short of naming explicit alternatives such as add_hierarchical_label, so it is clear but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
nameYes
pinsYes
in_bomNo
is_powerNo
on_boardNo
datasheetNo~
footprintNo
rectanglesNo
symbol_lib_pathNo
pin_names_offsetNo
reference_prefixNoU

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnly=false and destructive=false, which align with an add operation. The description adds useful behavioral context (auto-creating the library file, auto-computing rectangles when omitted). However, it fails to disclose behavior when a symbol with the same name already exists (overwrite vs error), a significant gap for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose statement followed by an organized Args list. Each parameter gets a line with defaults in parentheses. Every sentence contributes value, and the length is proportional to the tool's complexity (11 parameters).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, library file creation, automatic rectangle computation, and all parameter details. It lacks discussion of duplicate symbol names and error handling, but given the existence of an output schema and annotation context, the description is largely complete and only missing these edge-case behaviors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of parameter documentation. It thoroughly explains every parameter, including pin types, defaults (e.g., length 2.54, rotation 90/180/270), and the semantics of rectangles. This goes far beyond the schema's bare titles and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a new symbol definition to a .kicad_sym library' and explains it creates a complete symbol with pins and body graphics, which is a specific verb+resource. However, it does not explicitly distinguish itself from the sibling tool 'add_lib_symbol', so it falls short of fully differentiating among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: this tool is used to add a new symbol definition, and it will create the library file if missing, implying when it might be used. However, it gives no explicit guidance on when to prefer it over alternatives like add_lib_symbol or create_symbol_library, nor any exclusion cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
xYes
yYes
textYes
rotationNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate this is a non-read-only, non-idempotent mutation, but the description adds no extra behavioral context. It doesn't disclose whether it modifies the file in-place, creates duplicates, or requires an open schematic, leaving the agent without important side-effect information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core action, and uses a clear Args list. Every sentence earns its place with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple add operation, the description covers the primary purpose and parameter meanings. However, it lacks behavioral side effects, error handling, or prerequisites, and the presence of an output schema doesn't replace the need for this context. It's minimally viable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description's Args section is essential. It explains text content, x/y position, rotation in degrees, and the optional schematic_path with its default behavior. This compensates well for the schema gap, though it omits coordinate units/origin specifics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Add a text annotation to the schematic' with a specific verb and resource, clearly identifying the action. However, it doesn't differentiate from similar sibling tools like add_label or add_global_label, leaving potential ambiguity for the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as add_label, add_global_label, or add_pcb_text. The description only states the action, not the context or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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, 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 configured default.
NameRequiredDescriptionDefault
colsNo
rowsNo
spacingNo
net_nameNo
pcb_pathNo
via_sizeNo
referenceYes
via_drillNo
pad_numberNo

Output Schema

NameRequiredDescription
netYes
padYes
centerYes
referenceYes
vias_addedYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: the rows*cols <= 256 grid limit, automatic net detection from the pad when net_name is None, and the pad auto-selection rule. It does not discuss whether existing vias are replaced or how the mutation interacts with the board, but it materially exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-line summary is front-loaded and the Args list is justified given zero schema documentation. Every line adds information an agent needs; the only minor cost is length, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with 0% schema coverage, the description documents all parameters, their units, defaults, and constraints, and an output schema exists so return values need no explanation. An agent has everything required to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description carries the full burden and does so: it defines meaning and units for spacing/via_size/via_drill (mm), documents defaults semantics for pad_number ('empty auto-selects largest SMD pad'), net_name (None = auto-detect), pcb_path (omit = default), and states the rows/cols constraints and minimums.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a grid of thermal vias') with scope ('under a footprint pad'), which separates it cleanly from the sibling add_via (single via) and add_copper_zone. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phrasing 'under a footprint pad', and the pad_number arg says it auto-selects the largest SMD pad when empty. However, there is no explicit when-to-use / when-not-to-use guidance against alternatives such as add_via or add_copper_zone, so the agent must infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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: 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. Optional; omit to use the configured default.
NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes
netNo
layerNoF.Cu
widthNo
pcb_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses rejection semantics precisely: an invalid net number is refused, nothing is written, and the same applies to any nonzero net on KiCad 9-format or older boards without a net table. It also explains the KiCad 10 name-derived net numbering quirk that makes stale net numbers dangerous, which is exactly the kind of non-obvious behavior an agent cannot infer from readOnlyHint=false alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in one sentence and each subsequent line corresponds to a parameter, so nothing is padding. Points off for the raw docstring "Args:" formatting and for the net explanation, whose clause "and so is every number but 0 on a board in KiCad 9's format or older that has no net table" is dense enough to require re-reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter mutation with no schema descriptions, the description covers nearly everything an agent needs, and an output schema exists so return values need not be explained. Remaining gaps: coordinate units for x1/y1/x2/y2 are unstated (only width is marked mm), and there is no note that layer must be a valid copper layer from list_pcb_layers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — properties carry only titles — so the description must carry the full burden, and it does: every one of the eight parameters is given meaning, including width units (mm), layer examples ("F.Cu", "B.Cu"), the net=0 sentinel, and that pcb_path is optional with a configured default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific verb and resource with scope: "Add a trace segment between two points." Combined with the parameter list (layer, net, width) an agent can tell this is a PCB copper routing primitive, distinct from schematic-side siblings like add_wires or generic add_pcb_line. It stops short of naming which sibling to prefer when the goal is a line rather than a net-assigned trace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through prerequisites rather than stated: net numbers must come from list_pcb_nets, and on KiCad 10 boards list_pcb_nets must be re-read after each edit. That is real workflow routing, but there is no explicit when-to-use/when-not framing against alternatives such as add_via for layer transitions or add_pcb_line for non-copper geometry.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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: 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. Optional; omit to use the configured default.
NameRequiredDescriptionDefault
xYes
yYes
netNo
sizeNo
drillNo
layersNo
pcb_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing that a non-zero net on an older/format-9 board is refused and nothing is written, and that KiCad 10 derives net numbers from appearance order requiring a re-read of list_pcb_nets after edits. This is exactly the mutation-risk context annotations alone (destructiveHint=false, idempotentHint=false) cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in one line and the Args block is organized and scannable. It is somewhat verbose in the net explanation, but that verbosity is load-bearing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format need not be explained, and the description covers the critical preconditions for a non-idempotent write. It could still note valid layer name formats or which board layer pair is required, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: units for size/drill (mm), layers default ['F.Cu','B.Cu'], net semantics and refusal rules, and pcb_path optionality with default fallback. All seven parameters gain meaning beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Add a via at a position') so the operation is unambiguous. It does not differentiate itself from the closely related add_thermal_vias sibling, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use statement or exclusion versus alternatives such as add_thermal_vias; the only routing hint is embedded in the net parameter (use list_pcb_nets). Usage is implied at best.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_wiresA

Add 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 end (where no junction
is), a stretch such a wire already covers is left out, and a merged run holding both
pins of a two-pin part loses the stretch between them, so drawing across a part never
shorts it. A wire of no length is left out, as KiCad's tool drops one. Existing wires
are only ever split: where KiCad's trim would cut a wire already on the sheet, the call
is refused and nothing is written. The result counts the wire nodes written and names
each junction, split, left-out and trimmed stretch; when nothing changes it says so and
writes nothing.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the annotations: it discloses that junctions are auto-created at 3+ wire directions/pins, that existing wires are only split and the call is refused with nothing written when KiCad's trim would cut an existing wire (atomicity), that zero-length wires are dropped, and that merging across a two-pin part never shorts it. It also states the result reports junctions/splits/left-out/trimmed stretches and that no-op calls write nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, but the behavioral paragraph is a dense run-on that includes low-value implementation trivia (source file, line numbers, version 9.0.8). Much of it earns its place, yet it could be cut substantially without losing agent-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still summarizes what the result counts. Combined with the mutation/refusal semantics it covers the operation well; the main residual gap is coordinate units and the absence of guidance relative to sibling wire tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It restates the WireSpec keys and usefully clarifies that schematic_path is optional and falls back to the configured default (which the schema's empty-string default does not convey), but it never states coordinate units or origin for x1/y1/x2/y2 — a meaningful gap for a geometry tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Add multiple wires at once") and clarifies it mirrors KiCad's own wire tool, which separates it from PCB-side siblings like add_trace. It does not explicitly distinguish itself from close schematic siblings such as connect_pins, wire_pins_to_net, or add_junctions, leaving some ambiguity for an agent choosing among wire-creation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: batch-drawing wire segments on a schematic, with junctions handled automatically (hinting you need not call add_junctions). There is no explicit when-to-use versus when-not, and no named alternative such as connect_pins or wire_pins_to_net despite those being obvious siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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)
NameRequiredDescriptionDefault
project_pathNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations indicating safety or idempotency, the description must disclose behavior itself. It does so by explaining that it assigns sequential numbers, respects existing references, and scans the hierarchy when project_path is given. It could be more transparent about file modification or reversibility, but the provided details are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight: a one-sentence summary, a short explanatory paragraph, and an explicit Args list. No filler words. Every sentence contributes to understanding what the tool does and how to use it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool, the description covers the essential behavior, parameters, and hierarchy nuance. An output schema exists, so return value details are not required. It doesn't address edge cases like partially annotated boards or error scenarios, but given the tool's simplicity, the description is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for the two parameters, so the description must compensate. It explains both schematic_path and project_path concisely, including their optionality and the effect of omitting them (using configured default, scanning hierarchy). This adds meaning beyond the schema's bare names and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Auto-assign reference designators to unannotated components.' This clearly states the tool's core function and distinguishes it from sibling tools like remove_component or add_wires. The additional detail about finding '?' in references further pins down the exact use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells you when to use this tool: when components have '?' in their reference designators. It also explains hierarchical behavior when project_path is provided. However, it does not explicitly name alternatives or exclusion criteria, so it stops short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 a .kicad_sym file that defines the capacitor,
        for a library outside KiCad's stock set. Optional; omit to load it
        from the stock library named by the lib_id prefix.
    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)
NameRequiredDescriptionDefault
xYes
yYes
valueYes
lib_idYes
rotationNo
power_netYes
referenceYes
ground_netYes
project_pathNo
schematic_pathNo
symbol_lib_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare non-readOnly, non-idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the exact side effects created (stub wires plus net labels), the pin-to-net mapping, and the default-resolution behavior of the optional path args (omit to use the stock library named by the lib_id prefix, omit to use the configured default schematic).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary followed by a mechanics sentence and an Args block; the ordering is sensible and every line is informative. The opening line and the second sentence overlap slightly (both say it places the cap and wires it), which is minor redundancy but not waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and all 11 parameters are covered, including the tricky optional-path semantics. Remaining gaps are the lack of alternative-tool routing and any warning that the operation is non-idempotent (re-running would create duplicate symbols/wires).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does: every one of the 11 parameters is documented with a concrete example (lib_id "Device:C", reference "C5", value "100nF", power_net "VCC"/"+3V3", ground_net "GND"/"PGND") plus stated defaults and the semantics of the three optional path arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific compound action (place a decoupling cap AND wire it to power/ground nets) with concrete mechanics — pin 1 to power_net, pin 2 to ground_net via stub wires and labels. This clearly distinguishes it from the generic siblings place_component, add_symbol, connect_pins, and wire_pins_to_net.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mechanics imply when this tool is preferable (a one-shot decoupling-cap placement) but it never says so explicitly and never names an alternative path such as place_component + connect_pins. No when-not guidance, no prerequisites (e.g. schematic must exist), so the routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 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 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.
NameRequiredDescriptionDefault
timeoutNo
pcb_pathNo
max_passesNo
output_dirNo
num_threadsNo

Output Schema

NameRequiredDescription
warningsNo
vias_addedYes
routed_pathYes
traces_addedYes
drc_violationsNo
drc_unconnectedNo
keepouts_promotedNo
text_fields_fixedYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and openWorldHint=true; the description goes well beyond them by disclosing that a new PCB file is created and the original is never modified, the first-run 65 MB network download with SHA-256 verification and caching, and the FREEROUTING_JAR override. It does not quantify runtime cost or describe failure modes (e.g. unrouted nets), which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded — the operation and its non-destructive nature come first, followed by requirements, then a per-argument list. The num_threads explanation spans several lines but each part justifies the default, so the length is largely earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a long-running, network-dependent, multi-stage tool, the description covers side effects, external dependencies, download behavior, and every input; an output schema exists so return values need not be described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden and does: it documents all five parameters, including defaults, and explains non-obvious semantics (num_threads defaults to 1 due to a known Freerouting multithreading bug producing clearance violations; pcb_path/output_dir fall back to configured defaults).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (autoroute PCB traces) and the engine used (Freerouting), plus the exact pipeline it runs: DSN export, route, import to a new PCB. It is clearly distinguishable from manual trace siblings like add_trace or add_via.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives practical preconditions (pcbnew binding version match, Java 25+, jar download) and a strong caveat about num_threads, but never states when an agent should choose autorouting versus manual add_trace/place_component workflows, nor what board state is required (e.g. placement complete, netlist valid).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_placementCheck one proposed footprint positionA
Read-onlyIdempotent

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.

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 KiCad
reads any other footprint layer; and the footprint's own keep-outs never
count against it (intersectsArea skips an area whose parent is the item,
pcbnew/pcbexpr_functions.cpp:697 at 9.0.8).

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.
NameRequiredDescriptionDefault
xYes
yYes
pcb_pathNo
referenceYes

Output Schema

NameRequiredDescription
statusYes
board_edge_checkedYes
keepout_violationsYes
outside_board_edgeYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, yet the description goes well beyond them: checks operate on the origin, not the courtyard, so body overlaps can still report ok; no rotation parameter exists because rotating about the origin cannot change the answer; and keep-out reading semantics (layer expansion, KiCad's own-keepout exclusion) are spelled out. That is genuine behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, followed by rationale caveats and then Args. Efficient overall, though the embedded source citation (pcbnew/pcbexpr_functions.cpp:697 at 9.0.8) is closer to implementation trivia than agent-usable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is unnecessary, and the description covers the subtle semantics an agent needs (origin-based checks, no rotation, keep-out interpretation) plus every parameter. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the params, and it does via an Args block covering all four: reference designator, proposed x/y, and optional pcb_path that falls back to the configured default. It does not state units for x/y (presumably mm), which is the only meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) and resource (placing/moving a footprint to x,y) plus the outcome being evaluated (constraint violation). An agent can immediately distinguish this simulation/pre-flight check from the sibling move_footprint, which actually mutates placement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: it's clearly a pre-flight query, but the description never says 'use before move_footprint' nor names any exclusion or alternative. The caveats about origin-point checking and no rotation parameter give useful framing but are not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_pinsA

Connect 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 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.
NameRequiredDescriptionDefault
pin1Yes
pin2Yes
ref1Yes
ref2Yes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is a non-readonly, non-idempotent, non-destructive mutation. The description goes well beyond that, disclosing that junctions are created at meeting points, that existing wires are split there (citing KiCad behavior), and that the result names each junction and split. It stops short of stating reversibility or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in a clear first sentence, but the junction paragraph is dense and cluttered with source-file line citations (sch_line_wire_bus_tool.cpp:1263-1267) that consume space without helping the agent invoke the tool. The Args block is clean and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return-value explanation is unnecessary, and the description still notes that junction/split names are produced. For a mutation tool it communicates the key side effects, though it omits whether junction insertion can be suppressed and how failures are reported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it largely does: it documents all five args including examples ('U1', 'C3') and the fact that schematic_path is optional with a configured default. It leaves pin name-vs-number format and path format slightly ambiguous, but compensates adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (connect), resource (two component pins), and the routing strategy (Manhattan / L-shaped). It also clarifies the tool's abstraction level by saying it bundles get_pin_positions + coordinate math + add_wires, so an agent can distinguish it from the low-level add_wires sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'combines X + Y + Z into one call' framing implies when to prefer this over manually chaining the three lower-level tools, which is useful. However, it never names or contrasts with close siblings like wire_pins_to_net or add_wires, and gives no when-not conditions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_projectA

Create 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)
NameRequiredDescriptionDefault
nameYes
directoryYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false), and the description adds genuinely useful behavior: it will not overwrite an existing .kicad_sch/.kicad_prl and reports whether the root schematic was created or kept. It does not mention auth or failure modes, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The artifact statement is front-loaded in the first sentence, side effects follow, and the Args block is terse. Every line earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still flags the created-vs-kept status. Both required parameters are documented, making the definition sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and its Args section does so: directory is 'created if missing' and name is 'used for filenames'. This adds real meaning beyond the bare string types, though it omits validation rules and naming constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a KiCad 9 project') and names the exact artifacts produced (.kicad_pro + root .kicad_sch). This distinguishes it from siblings like create_schematic, which only produce a schematic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains side-file behavior (no .kicad_prl, existing files left as-is) but never says when to prefer this over create_schematic or other creation siblings. Usage is implied by the artifact list rather than stated as a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
schematic_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose behaviors beyond the annotations, such as whether the tool overwrites an existing file, requires parent directories, or returns a success/failure status. More critically, it states the schematic_path is 'Optional' while the input schema marks it as 'required', creating a misleading contradiction that could cause incorrect invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences. It front-loads the primary purpose and then structures the parameter explanation clearly under 'Args'. No unnecessary words or restatements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a file-creation tool, the description lacks critical context: it does not mention what happens if the file already exists, whether directories are auto-created, or what the tool returns. The contradictory 'Optional' claim further undermines completeness, leaving the agent with insufficient guidance for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds semantic meaning by explaining that the parameter is a file path and that there is a configured default. However, since schema coverage is 0%, this is the only source of param info, and it contains an inaccurate statement about the parameter being optional, which reduces its reliability.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Create'), a specific resource ('a valid empty KiCad 9 schematic file'), and the file extension (.kicad_sch). This unambiguously distinguishes it from sibling tools like create_project, which creates a project rather than a schematic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, typical use cases, or exclusions. The only contextual hint is the parameter description, but there is no explicit 'when to use' or 'when not to use' information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
symbol_lib_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations offer minimal safety hints (all false), so the description carries some responsibility. It adds context about the optional path and default behavior, but does not disclose what happens if the file already exists, whether it overwrites, or any error conditions. This is moderate beyond the schema but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two short sentences deliver the purpose and the parameter semantics. It front-loads the key action and avoids unnecessary detail, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter, and the description covers the core purpose and parameter meaning. However, it omits details about the configured default path and behaviors for existing files. The output schema likely covers return values, so the description is largely complete but leaves minor edge cases unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It does add meaning by stating the path is for a .kicad_sym file and that it is optional, but this directly contradicts the schema which marks symbol_lib_path as required. This conflicting guidance undermines semantic clarity and could mislead an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a valid empty KiCad 9 symbol library, specifying both the action (create) and the resource (library). This distinguishes it from sibling tools like create_schematic or add_lib_symbol, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as create_sym_lib_table or add_lib_symbol. It does not mention prerequisites, typical workflows, or situations where another tool would be more appropriate, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_sym_lib_tableA
Destructive

Create 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 line
end or NUL in a uri (KiCad 9 and KiCad 10 read these differently in a table).

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false) by disclosing the actual write semantics: the file is overwritten, backslashes in `uri` are normalized to '/', and validation is atomic — the whole list is checked first and any bad entry refuses the call while leaving the existing table untouched. That all-or-nothing guarantee is exactly the behavioral context an agent cannot get from `destructiveHint` alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first line, followed by overwrite/normalization notes and a dense but relevant validation paragraph, then a conventional Args block. The long single sentence enumerating invalid names is heavy but every clause maps to an actual rejection rule, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with an output schema already present, everything an agent needs is covered: what is written, that it overwrites, how uris are normalized, which inputs are rejected and that rejection is non-destructive. Nothing material about invocation or failure is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% on the top-level properties, so the description must compensate, and it does: `directory` is the write target, `entries` is a list of dicts requiring 'name' and 'uri', and the validation paragraph enumerates the real constraints on a nickname (no empty, no control chars, backslash, colon, duplicate, no double quote) and on a uri (no line endings, NUL, or double quote). It stops short of showing a concrete example entry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb and resource: 'Create a sym-lib-table file in the given directory', which is a distinct artifact from the file/entry tools in the sibling list. It does not, however, explicitly distinguish itself from the nearby `create_symbol_library` sibling, so an agent must infer that this writes the table file itself rather than a library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: you call it when you need a sym-lib-table present in a directory, and the 'Overwrites existing sym-lib-table if present' line signals it is not for appending. There is no explicit when-to-use versus `create_symbol_library`, `add_lib_symbol`, or `list_lib_symbols`, and no stated prerequisites (e.g. whether the directory must already exist or be a KiCad project).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_sheetA
Destructive

Duplicate 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 source file that holds sheets of its own is refused, with nothing written, because its
sub-sheets would need new instance paths in other files. Give project_path when the
parent is itself a sub-sheet, so its place in the hierarchy can be found.

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)
NameRequiredDescriptionDefault
sheet_uuidYes
project_pathNo
new_file_nameNo
new_sheet_nameYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses file-level copying with regenerated UUIDs, page-number allocation, placement of autoplaced fields, re-annotation of the copied symbols in x-then-y order, and a failure mode that writes nothing. For a destructive, non-idempotent mutation this is exactly the context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence front-loads the action, and the remainder is ordered from highest to lowest value detail. The middle paragraph on symbol reference renumbering is dense and partly restates the first sentence, but it is short enough overall to justify its length for a destructive operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return values are covered by the output schema, and the description supplies the missing pieces an agent needs: side effects on disk, error condition, parameter preconditions, and page/reference allocation semantics. Nothing essential to invoking it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for all five parameters via the Args block (default/omit behavior for schematic_path, auto-generation for new_file_name, hierarchy role for project_path). It stops short of saying where to obtain sheet_uuid (e.g., list_schematic_sheets) or its format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('Duplicate a hierarchical sheet') and immediately qualifies scope ('copying the child file with new UUIDs'), which distinguishes it from add_hierarchical_sheet/modify_hierarchical_sheet. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditional guidance ('Give project_path when the parent is itself a sub-sheet') and states a hard refusal case (source file holding sub-sheets). It does not name alternatives such as add_hierarchical_sheet for creating a fresh sheet, so routing is clear but not fully enumerated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_3dA
Idempotent

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)
NameRequiredDescriptionDefault
sideNotop
widthNo
formatNostep
heightNo
qualityNobasic
pcb_pathNo
output_dirNo

Output Schema

NameRequiredDescription
pathYes
sideNo
widthNo
formatYes
heightNo
size_bytesYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotent and non-destructive behavior, so the description's main addition is the conditional behavior of parameters (render fills dimensions, mesh formats leave them unset) and the default path behavior for pcb_path/output_dir. It does not disclose potential file overwriting or directory creation, but with annotations covering safety, the added context is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description starts with a concise purpose statement, then a clarifying sentence about render vs mesh behavior, followed by an organized Args list. Every line adds information necessary for correct use, and the structure makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, conditional dependencies, and no schema descriptions, the description addresses all required usage details: optional paths with defaults, format choices, and parameter applicability per format. The output schema is available so no return-value explanation is needed. The tool is fully specified for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions are absent (0% coverage), so the description carries full responsibility. It explains each of the 7 parameters, including enum values for format, defaults, and render-only constraints for width/height/side/quality. The note about 'render fills width, height and side; the mesh formats leave them unset' adds crucial conditional semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Export PCB 3D model or render 3D view to image,' which is a specific verb+resource statement. It clearly distinguishes from sibling export tools like export_schematic or export_pcb by focusing on 3D output. The format enumeration (step, stl, glb, render) further clarifies scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that render uses width/height/side/quality while mesh formats ignore them, guiding parameter selection. However, it does not explicitly state when to choose this tool over other export tools, such as export_pcb or export_gerbers. The purpose is clear but no alternatives or exclusions are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_bomA
Idempotent

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.
NameRequiredDescriptionDefault
output_dirNo
schematic_pathNo

Output Schema

NameRequiredDescription
noteNo
pathYes
formatYes
size_bytesYes
component_countYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds that it writes CSV and uses configured defaults, but it does not disclose details like output file naming, overwrite behavior, or behavior when the schematic path is invalid. It provides moderate value beyond annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose followed by a concise Args block. Every sentence provides useful information, and there is no filler or repetition of obvious schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, idempotent export tool with two optional parameters and an existing output schema, the description covers the essential inputs and defaults. It does not explain generated file naming or invalid-input behavior, but those are not necessary for selecting and invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the tool description fully documents both parameters: schematic_path points to a .kicad_sch file, output_dir specifies the output location, and both are optional with configured fallback defaults. The description fully compensates for the schema's lack of parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Export Bill of Materials (BOM) as CSV.' This clearly identifies the tool's output format and distinguishes it from sibling export tools like export_netlist, export_schematic, or export_pcb in the same family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the intended use—when a CSV BOM is needed—but it does not explicitly state when not to use it or mention alternatives. With many export-related sibling tools, some explicit differentiation would improve guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_footprint_svgB
Idempotent

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.
NameRequiredDescriptionDefault
output_dirNo
footprint_pathYes

Output Schema

NameRequiredDescription
pathYes
countYes
filesYes
formatYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present (readOnlyHint=false, idempotentHint=true), the description adds useful context about accepted path types and the use of configured defaults. However, the inconsistency between the description claiming footprint_path is optional and the schema marking it required undermines behavioral clarity, and no mention is made of side effects like file creation beyond what the annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and logically structured with an Args section. It avoids excessive verbosity, but the optionality error introduces a correctness issue that slightly detracts from the clarity of the structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple tool with an output schema and annotations, the description covers the core purpose and parameters. Yet it fails to clarify the required nature of footprint_path, omits file naming or overwrite behavior, and doesn't mention that it writes a file. The mismatch between description and schema is a significant gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides additional meaning by specifying footprint_path accepts a .kicad_mod file or .pretty directory and output_dir is an output directory, which helps with a 0% schema description coverage. However, it incorrectly states footprint_path is optional when the schema designates it required, creating a dangerous contradiction that could cause the agent to omit a necessary parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Export footprint to SVG' with a specific verb, resource (footprint), and output format. It distinguishes itself from the sibling tool export_symbol_svg by targeting footprints instead of symbols.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lacks explicit guidance on when to use this tool versus alternatives, offering no exclusions or preferred contexts. It misleadingly implies both arguments are optional, contradicting the schema that marks footprint_path as required, leaving the agent without reliable direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_gerbersA
Idempotent

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.
NameRequiredDescriptionDefault
layersNo
pcb_pathNo
output_dirNo
include_drillNo

Output Schema

NameRequiredDescription
noteNo
pathYes
countYes
filesYes
layerNo
formatYes
size_bytesNo
drill_countNo
drill_filesNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description thoroughly discloses behavior beyond annotations: it explains the single-layer versus multi-layer output modes, what output fields are populated in each case, the default behavior when 'layers' is omitted, and that 'include_drill' is ignored in single-layer mode. It also notes that pcb_path and output_dir fall back to configured defaults. This is a model of transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and well-organized: a purpose sentence, a behavioral paragraph, then a bulleted Arg list. It packs a lot of information into a relatively small space, though the prose could be slightly more scannable with better use of formatting (e.g., bolding modes). For its length, it's highly effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a file-export tool with all-optional parameters and a clear output schema, the description covers the essential behaviors: mode selection, defaults, and drill handling. Minor edge cases (e.g., behavior with invalid layer names) are not discussed, but these are reasonably outside the core use case and the output schema covers return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 0%, the description carries the full burden and does so excellently. It explains each parameter's meaning, defaults, and inter-relationships (e.g., 'include_drill' ignored in single-layer mode, 'layers' with one item yields a single file). This adds immense value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Export Gerber files for manufacturing,' giving a specific verb and resource that clearly distinguishes it from sibling export tools (e.g., export_pcb, export_netlist, export_3d). It further clarifies the output mode (single file vs directory) and key output fields, leaving no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While it doesn't name sibling alternatives explicitly, it provides clear context on when this tool is appropriate (manufacturing output) and explains the two behavioral modes (single-layer vs multi-layer). The description implies usage through its detailed mode logic but could have gone further to say 'use this instead of X when you need Gerber files.' The guidance is clear and practical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_hierarchical_netlistExport a netlist with sheet paths for the whole hierarchyA
Idempotent

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.
NameRequiredDescriptionDefault
output_dirNo
schematic_pathNo

Output Schema

NameRequiredDescription
netsYes
net_countYes
componentsYes
output_pathYes
component_countYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that it runs kicad-cli, generates a netlist file, and returns parsed component/net data with sheet paths. This adds behavioral context beyond the annotations (idempotentHint=true, destructiveHint=false) by clarifying the underlying execution and return format. It does not fully detail file overwrite behavior, but the idempotency annotation mitigates that need.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and front-loaded: it states the core purpose in the first sentence, then briefly outlines the method and arguments. No fluff or repetition, and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter tool with an output schema, the description covers all essential aspects: what it does, how it runs (kicad-cli), what it returns (parsed data with sheet paths), and parameter meanings. It is complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining both parameters: schematic_path is the root .kicad_sch file, output_dir is the directory for netlist output, and both are optional with defaults. This provides meaningful guidance that the raw schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Export a netlist from the root schematic') with a distinct scope ('including hierarchy info' and 'sheet path information'). This differentiates it from sibling tool export_netlist, which likely produces a flat netlist, by emphasizing hierarchical detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: use this tool when you need a netlist with sheet path hierarchy for the whole design. However, it does not explicitly mention alternatives or state when not to use it, leaving the agent to infer from the tool's name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_ipc2581A
Destructive

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. 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"
NameRequiredDescriptionDefault
unitsNomm
outputNo
versionNoC
compressNo
pcb_pathNo
precisionNo

Output Schema

NameRequiredDescription
noteNo
pathYes
formatYes
size_bytesYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description usefully explains the write target: '<board name>.xml' to the configured output directory or beside the board when none is configured. It does not explain whether an existing file is overwritten, which is exactly what the destructiveHint implies, nor any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose sentence is front-loaded, the Args block is terse and each line adds information. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and all parameters are covered. The remaining gap is what happens on overwrite and whether compression changes the output filename, which matters given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the schema has no enums, so the description carries the full burden — and does: it documents all six parameters including defaults for precision (3), version ("C"), units ("mm"/"in"), and the fallback semantics of pcb_path and output. This is meaningfully more than the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+format: 'Export PCB in IPC-2581 format for manufacturing data exchange.' That format name alone separates it from siblings like export_gerbers, export_pcb, export_3d, export_netlist and export_bom.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the format name; there is no explicit statement of when to choose IPC-2581 over the sibling exporters or any prerequisites (e.g. board must be validated/DCR'd). The agent can infer the choice, but nothing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_netlistExport a netlist for one schematicA
Idempotent

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.
NameRequiredDescriptionDefault
formatNokicadxml
output_dirNo
schematic_pathNo

Output Schema

NameRequiredDescription
noteNo
pathYes
formatYes
size_bytesYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide safety context (idempotent, non-destructive, not read-only), and the description adds useful context about output_dir defaults and that spice/spicemodel produce simulator input. However, it does not describe what files are created, whether files are overwritten, or other runtime behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and uses a clean Args list where every line adds value. It avoids repeating schema details and does not waste words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, the presence of an output schema, and annotations that cover safety, the description covers purpose, parameters, and defaults well. It is only missing explicit tool-selection boundaries relative to export_hierarchical_netlist, but overall it is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining all three parameters: schematic_path points to a .kicad_sch file, output_dir is an output directory, and format is a netlist format with spice/spicemodel clarified as simulator input. This adds meaning beyond the raw schema defaults and enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Export a schematic netlist' and the title specifies 'for one schematic', clearly identifying the verb, resource, and scope. This distinguishes it from related export tools like export_bom, export_pcb, and especially export_hierarchical_netlist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the 'one schematic' scope and optional parameters with configured defaults, but it does not explicitly state when to use this tool versus alternatives. It never names export_hierarchical_netlist as the alternative for hierarchical designs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_pcbA
Idempotent

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)
NameRequiredDescriptionDefault
formatNopdf
layersNo
pcb_pathNo
output_dirNo
output_unitsNoin
use_contoursNo
exclude_valueNo
exclude_refdesNo
include_border_titleNo

Output Schema

NameRequiredDescription
noteNo
pathYes
formatYes
layersYes
size_bytesYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations (idempotentHint=true) indicate repeated exports are safe, and the description does not contradict this. It adds useful details such as DXF-specific options (units, contours, etc.) and that layers are required for DXF, which helps the agent understand parameter dependencies. However, it does not disclose things like naming conventions for output files or overwrite behavior, but the annotations cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear summary line and a parameter list, making it easy to scan. It is slightly long due to the parameter listing, but each line adds value. It is front-loaded with the main purpose, and the parameter documentation is organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and no required parameters, the description covers the essential context, especially the DXF-specific requirements. It provides enough information for an agent to use the tool correctly, though it could mention output directory handling and default file naming. The presence of an output schema reduces the need for return value documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all 9 parameters. The description provides brief explanations for most parameters, but many are minimal (e.g., 'Optional; omit to use the configured default') and do not explain format constraints or default values beyond what the schema shows. It adds clarity on DXF-only options, but lacks deeper semantics like allowed layer names or how output paths are constructed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports a PCB to PDF, SVG, or DXF format, distinguishing it from other export tools like export_schematic or export_gerbers. It identifies the key resource (PCB) and the supported output formats, though it does not explicitly differentiate from all sibling export tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: specifies that layers are required for DXF, and that output units and certain options are DXF-only. It implies when to use this tool (for PCB exports in these formats) but does not explicitly state when not to use it or mention alternatives like export_gerbers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_positionsA
Idempotent

Export 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.
NameRequiredDescriptionDefault
pcb_pathNo
output_dirNo

Output Schema

NameRequiredDescription
noteNo
pathYes
formatYes
size_bytesYes
component_countYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false, idempotentHint=true, openWorldHint=false, so the safety profile is covered; the description adds real value by documenting coordinate units, the negated Y axis and per-column semantics. The notable gap is file behavior: it never says what filename is produced, whether an existing file in output_dir is overwritten, or what happens if the directory doesn't exist — significant for a tool with readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then format details, then args — a sensible order with no filler. The per-column gloss (PosX/PosY/Rot/Side) is slightly repetitive after the column list but earns its place by defining the negated-Y convention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described, and both parameters plus the CSV semantics are covered. What remains missing for a file-writing export is the destination filename and overwrite/error behavior, which an agent would need to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% — the schema only has titles and empty-string defaults — so the description must compensate, and it does: it identifies pcb_path as a path to a .kicad_pcb file and output_dir as an output directory, and marks both optional with 'omit to use the configured default'. It stops short of explaining what the configured default actually resolves to or how the output filename is derived from output_dir.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact ('Export component position file (pick and place) as CSV, in millimetres'), and the column list makes the output format unambiguous. This is clearly distinguishable from siblings like export_bom, export_netlist, export_ipc2581 and export_gerbers without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the artifact produced: an agent knows to call it when it wants a pick-and-place file. However, it never states when to prefer this over export_ipc2581 or export_pcb, and offers no exclusions or preconditions (e.g. board must be loaded/validated). The only guidance is the 'omit to use the configured default' note on both params.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_schematicA
Idempotent

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.
NameRequiredDescriptionDefault
formatNopdf
output_dirNo
schematic_pathNo

Output Schema

NameRequiredDescription
pathYes
countYes
filesYes
formatYes
size_bytesNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains format-specific output behavior: single vs multiple files, path semantics, and filled fields (size_bytes, files, count). It also clarifies optional parameters and defaults. This adds context beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence, followed by format-specific behavioral notes, and an Args section. It is somewhat verbose but all content is relevant to invoking the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behaviors and parameter semantics, and the presence of an output schema likely documents return values. It misses potential error scenarios and prerequisites, but for an export tool this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema parameters have no descriptions (0% coverage), so this description carries the full burden. It explains the meaning of each parameter: format enum values, optional schematic_path and output_dir with defaults. It also explains the impact of format on output structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Export schematic to PDF, SVG, or DXF format' with a specific verb, resource, and output formats. This clearly distinguishes it from sibling export tools like export_netlist, export_pcb, and export_gerbers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for use, mentioning that pdf/dxf produce a single file while svg produces one per sheet, which helps the agent set expectations. However, it does not explicitly compare with alternative tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_symbol_svgA
Idempotent

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.
NameRequiredDescriptionDefault
output_dirNo
symbol_lib_pathNo

Output Schema

NameRequiredDescription
pathYes
countYes
filesYes
formatYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false. The description adds no additional behavioral context beyond mentioning optional defaults for parameters. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the purpose, followed by a compact Args list. Every sentence earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool, the description covers purpose and parameters. An output schema exists, so return values need not be explained. It lacks usage guidance but is otherwise complete for a basic export function.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description compensates by explaining each parameter (symbol_lib_path as path to .kicad_sym file, output_dir as output directory) and noting they are optional with configured defaults. This adds meaningful semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Export symbol library to SVG images.' which is a specific verb+resource and distinguishes it from sibling export tools like export_footprint_svg.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose, but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or context for when it should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
pcb_pathNo

Output Schema

NameRequiredDescription
statusYes
warningsNo
zones_filledYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the all-false annotations by disclosing a critical guarantee: 'the file that reaches the disk is the original with its zones' fills replaced and every other byte untouched,' explicitly listing what is preserved ('not its format version, not its layer names, not the constructs pcbnew does not model'). It also surfaces the pcbnew bindings dependency. No annotation contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is model-like in structure: a crisp front-loaded subject-verb-object opening followed by a tight three-sentence behavioral paragraph, a one-line dependency note, and a labeled Args section. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter tool with an output schema present, the description thoroughly covers what the tool does, how its side effects are bounded, what environment it requires, and how the parameter works. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description compensates by documenting pcb_path with its purpose ('Path to .kicad_pcb file'), optionality, and fallback semantics ('omit to use the configured default'). It adds meaning beyond the bare schema but does not go into extended detail beyond the single param.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line, "Fill all copper zones on the board using pcbnew's zone filler," uses a specific verb+resource+mechanism structure. It clearly differentiates this tool from sibling read-only/analysis tools and from zone creation tools like add_copper_zone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about the operation and its non-destructive nature via the explanation that 'pcbnew computes the fill; this server writes it.' However, it never explicitly enumerates when-not-to-use scenarios or names alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flatten_hierarchyA
Destructive

Flatten 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 those
labels. A label whose own sheet has a global label, a power symbol or a hidden power input
pin of its text keeps that text, so it keeps joining it. Text variables that name the
sheet are not rewritten.

The tool refuses, writing nothing, where the flat file could not keep the netlist: a
sheet pin or sub-sheet label that may be a bus, a file older than format 20221002, a
local power symbol, a bus_alias in a sub-sheet, a root label named like a global net
that only another sheet has, a library symbol whose pins differ between two files, a
sheet marked DNP, out of the BOM, off the board or out of simulation,
two sheets of one name, more than 4096 sheet instances, or a sheet file that cannot be
read. A sheet file that is missing is flattened as an empty sheet, as KiCad loads it.

Creates a new file and does not modify the 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)
NameRequiredDescriptionDefault
output_pathNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far beyond the annotations: it spells out exactly what is copied (one cell per sheet use, references/units preserved), how labels and net names are rewritten, which conditions cause a refusal with nothing written, and that missing sheet files flatten as empty. It also clarifies the write footprint ('Creates a new file and does not modify the hierarchy'), reconciling the destructiveHint=true annotation with a safe-on-source behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation and the output contract; the failure conditions are grouped into one scannable paragraph. It runs long for a two-parameter tool and the middle paragraph on label/global-net preservation is heavy detail an agent can rarely act on, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Inputs, transformation semantics, refusal cases, and write behavior are all covered, and an output schema exists so return values need not be described. Nothing an agent needs in order to succeed or predict failure is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage and bare 'title'-only properties, the Args block carries the full burden and does so: schematic_path is a root .kicad_sch, optional with a configured default; output_path defaults to *_flat.kicad_sch. Minor gap: it does not say what the configured default is or whether an existing output_path is overwritten.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource plus a definition of the output: flatten a hierarchical schematic into a single sheet preserving the netlist. No sibling performs this operation, and the phrase 'whose netlist is the hierarchy's' makes the contract unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer you call this when you need one flat sheet, but the description never contrasts it with siblings like export_hierarchical_netlist, list_hierarchy, or duplicate_sheet, nor does it state prerequisites (e.g., root schematic must be identified, format requirements beyond a refusal condition).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_board_infoA
Read-onlyIdempotent

Get 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.
NameRequiredDescriptionDefault
pcb_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context by explaining that the net count includes the unconnected net to match KiCad's counting and that omitting pcb_path falls back to a configured default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The summary is front-loaded and compact. The metric list is direct, the KiCad counting note is brief but relevant, and the parameter note is efficient without unnecessary padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only board-summary tool with rich annotations and an output schema, the description gives enough detail to call it correctly. It covers the metrics returned, the optional path behavior, and the one non-obvious counting convention.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter explanation. It does: pcb_path is documented as the path to a .kicad_pcb file and as optional, with omission using the configured default, which adds meaning beyond the bare schema default of an empty string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource, 'Get board summary,' and enumerates exactly what is included: footprint count, trace count, net count, and thickness. The board framing also distinguishes it from the sibling get_schematic_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied by 'board summary,' but the description does not explicitly say when to prefer this over siblings such as list_pcb_footprints, list_pcb_nets, get_footprint_info, or get_schematic_summary. The only concrete usage guidance is that pcb_path may be omitted to use the configured default.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_footprint_boundsOutline bounds of a footprint placed on the boardA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
pcb_pathNo
referenceYes

Output Schema

NameRequiredDescription
layerYes
positionYes
rotationYes
courtyardYes
referenceYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds that coordinates are in board space and that pcb_path is optional with a default config, giving useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct with a front-loaded purpose statement and an Args block. No extraneous information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema available, the description does not need to explain return values. It adequately covers the tool's purpose, parameters, and key behavioral details, making it complete for this simple read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description documents both parameters clearly: reference is a footprint designator, and pcb_path is an optional file path with a default behavior. This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear action ('Get') and a precise resource ('board-coordinate bounding box of a placed footprint'), distinguishing it from related tools like get_footprint_pads or list_pcb_footprints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for obtaining a footprint's bounding box, but it does not explicitly mention when to prefer this tool over alternatives or provide exclusions. No sibling tool comparisons are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_footprint_infoFootprint details from a .kicad_mod fileB
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
footprint_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds the behavioral note that footprint_path is optional and falls back to a configured default. However, it does not elaborate on error handling or other runtime behaviors, so it neither fully leverages nor contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the purpose, followed by a structured Args section. Every sentence serves a role. The misleading 'Optional' label, though, detracts from overall quality and prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema and annotations covers return values and safety, reducing the burden on the description. Still, the description misses usage context and contains a param requiredness contradiction, making it only minimally complete for a one-parameter read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning by identifying footprint_path as a path to a .kicad_mod file and mentioning an optional default. However, it directly contradicts the input schema, which marks footprint_path as required. This inconsistency is a significant flaw, especially since schema coverage is 0% and the description was expected to fully compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Get') and resource ('pad and outline details for a footprint .kicad_mod file'). This distinguishes it from sibling tools like get_footprint_pads or get_footprint_bounds, which focus on specific subsets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It only states what it does and describes the argument, leaving the agent to infer usage from context. No explicit exclusions or alternative recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_footprint_padsPads of a footprint placed on the boardA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
pcb_pathNo
referenceYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the default pcb_path behavior, which is useful context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief, with a clear opening sentence and a structured Args section. Every sentence adds value, and it is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with two parameters and an output schema, the description covers invocation details well, including parameter meanings and defaults. It does not describe the return format, but the output schema presumably covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully compensates by explaining each parameter: reference with examples ('R1', 'U1') and pcb_path as an optional file path with default behavior. This exceeds what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets pad info for a placed footprint on the PCB, using a specific verb and resource. It implies distinction from library footprint tools, though it does not explicitly name alternatives like get_footprint_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context (placed footprint, reference-based) and explains the optional pcb_path with default behavior, but it does not mention when to use this tool versus alternatives or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_net_connectionsA
Read-onlyIdempotent

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. 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.
NameRequiredDescriptionDefault
label_textYes
schematic_pathNo

Output Schema

NameRequiredDescription
netYes
connectionsYes
label_countYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a safe, idempotent, closed-world read, so the description is free to add value — which it does by explaining the scan/trace pipeline and the non-obvious multi-unit handling rule (a sibling gate's input is not reported on this net). This is genuine behavioral context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then mechanism, then a caveat, then parameters. Every sentence earns its place; the only minor bloat is the explicit 'Args:' block duplicating schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description supplies mechanism, the multi-unit nuance, and both parameter meanings, leaving little an agent would need before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and mostly does: label_text is defined as the net name with concrete examples ('VCC', 'GND'), and schematic_path is described as a .kicad_sch path that is optional and falls back to a configured default. This compensates well, though format specifics (e.g. whether label_text is matched exactly or as a substring) remain unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — 'Find all component pins connected to a net label' — and the follow-on sentence clarifies the mechanism (scan labels, trace wires, identify pins). It is clear what the tool does, though it does not explicitly distinguish itself from related siblings like trace_hierarchical_net or wire_pins_to_net.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose (use it to discover pins on a given net), but there is no explicit when-to-use statement, no exclusions, and no named alternatives among the many net/label siblings. An agent can infer the context but is not routed actively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pin_positionsA
Read-onlyIdempotent

Get 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.
NameRequiredDescriptionDefault
referenceYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: a multi-unit part is placed as one symbol per unit sharing a reference, and each placed unit is returned with its own pins plus the shared unit-0 pins.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, and the multi-unit explanation is one focused paragraph that earns its space by describing a real return-structure quirk. The Args block is compact and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return formatting need not be restated, yet the description still covers the one structural subtlety an agent would otherwise get wrong (per-unit vs shared unit-0 pins). Combined with the optional-parameter behavior, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It documents both parameters: reference with concrete examples ("U1", "R1") and schematic_path as optional with the default-resolution behavior when omitted, which meaningfully compensates for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get absolute pin positions for a placed component') and immediately narrows scope with the rotation/mirror qualifier, which separates it from library-level tools like get_symbol_pins and get_footprint_pads. It never names a sibling explicitly, so the differentiation is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'placed component' and it clarifies the optional schematic_path behavior (omit to use the configured default). However, it gives no when-to-use/when-not guidance and never points to alternatives such as get_symbol_pins for library pins or get_footprint_pads for PCB pads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schematic_summaryA
Read-onlyIdempotent

Get schematic page info and item counts.

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

Output Schema

NameRequiredDescription
wiresYes
labelsYes
sheetsYes
junctionsYes
page_sizeYes
componentsYes
no_connectsYes
global_labelsYes
page_width_mmYes
page_height_mmYes
hierarchical_labelsYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds minimal behavioral context beyond the summary nature (page info and item counts), but does not disclose return format, pagination, or edge cases. Given the annotations, this is adequate but not enriched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single sentence for the tool purpose and a short Args section for the parameter. Every sentence adds value, and the key information is front-loaded. There is no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, read-only annotations, and an output schema indicated in context), the description covers all necessary aspects: what it does and how to invoke it. It is complete enough for an agent to select and call this tool correctly without additional clarification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines schematic_path as a string with a default, and the schema description coverage is 0% because the description adds the semantic meaning: 'Path to .kicad_sch file. Optional; omit to use the configured default.' This explains the parameter's purpose and optionality, going beyond the schema's bare type definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a clear resource ('schematic page info and item counts'), which conveys what the tool does. However, it does not explicitly differentiate from sibling tools like get_sheet_info or list_schematic_components, though the focus on 'summary' and 'item counts' provides some distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the schematic_path is optional and explains the default behavior ('omit to use the configured default'), which is useful. It does not, however, state when to use this tool relative to alternatives such as list_schematic_components or get_sheet_info, leaving usage context implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sheet_infoA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
sheet_uuidYes
schematic_pathNo

Output Schema

NameRequiredDescription
xYes
yYes
pinsYes
uuidYes
widthYes
heightYes
file_nameYes
sheet_nameYes
label_countNo
component_countNo
hierarchical_label_countNo

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about the schematic_path default behavior and the pin/label matching feature, but does not disclose additional behavioral traits like return format or error conditions. This aligns with the calibration example where annotations carry the safety burden and the description adds modest context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with a one-sentence purpose and a clean parameter list. It front-loads the main action and provides exactly the necessary details without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool with two parameters, a read-only annotation, and an existing output schema, the description is adequate. It clearly states what the tool does and explains both parameters. The only gap is the lack of explicit usage exclusions, but the presence of an output schema and annotations reduces the burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each parameter: 'sheet_uuid: UUID of the sheet' and 'schematic_path: Path to parent .kicad_sch. Optional; omit to use the configured default.' This adds meaning beyond the schema's titles and default value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get detailed info' with a clear resource 'hierarchical sheet' and adds the distinctive feature 'including pin/label matching'. This distinguishes it from sibling tools like get_schematic_summary or list_schematic_sheets, which have different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (when detailed hierarchical sheet info with pin/label matching is needed) but does not explicitly name alternatives or exclusions. Since the context is clear and the tool's unique purpose is stated, it earns a 4 rather than a 3.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_symbol_infoSymbol details from a library fileA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
symbol_nameYes
symbol_lib_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the default library path behavior and the fact that it returns detailed pin/property info, but it does not disclose additional behavioral traits such as error handling, performance characteristics, or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main purpose, followed by a structured Args section. Every sentence adds value, and the example helps grounding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, the presence of an output schema, and rich annotations, the description covers the essential invoke-time information. It does not describe return fields, but the output schema handles that. The only minor gap is not explicitly distinguishing this from the similar get_symbol_pins tool, but the wording is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining each argument with examples and clarifying that symbol_lib_path is optional and defaults to the configured library. This adds meaning beyond the bare schema property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' with a clear resource: 'detailed pin and property info for a symbol in a library.' This distinguishes it from siblings like get_symbol_pins and list_lib_symbols by emphasizing both pin data and property data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by listing required and optional arguments, including an example symbol name and the behavior of omitting symbol_lib_path (uses default). It gives no explicit exclusions or references to alternatives, but the purpose statement implies when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_symbol_instancesA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
schematic_pathNo

Output Schema

NameRequiredDescription
countYes
instancesYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond this: the schematic_path is optional and omitting it uses a configured default, and the tool specifically operates on the root schematic. However, it does not describe edge cases or return format, though an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a single purpose sentence followed by a focused Args section. It is front-loaded with the main verb and resource, and every sentence earns its place without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, read-only annotations, and an output schema), the description covers all essential aspects: purpose, parameter semantics, and root-schematic scope. There is no notable gap for the intended complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides no description for schematic_path (0% coverage). The description's Args section fully compensates by explaining the path format (.kicad_sch), its optionality, and the behavior when omitted (uses configured default). This gives clear meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('List all symbol instances') and the specific resource ('root schematic's symbolInstances table'). This distinguishes it from sibling tools like list_schematic_components by pinpointing the exact data table and root scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly mention when to use this tool versus alternatives, nor does it state any exclusions (e.g., 'only works on root schematic; for sub-sheets use X'). Usage is implied by the purpose, but no comparative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_symbol_pinsSymbol pins from the schematic's embedded libraryA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
symbol_nameYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, covering the safety profile. The description adds the context that it reads from lib_symbols and that schematic_path has a default, but it doesn't disclose behavior for missing symbols or the exact structure of returned pin info. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences and a focused Args list. Every sentence adds value, information is front-loaded, no emptiness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the risk profile, the description adequately covers the simple two-parameter operation. It lacks guidance on interacting with sibling tools, but the core invocation is documented well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates by explaining both parameters with an example for symbol_name and optional/default behavior for schematic_path. It gives useful semantics beyond the raw schema but doesn't specify the exact string format for symbol_name or path resolution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly uses verb 'Get' and specifies resource 'pin info for a symbol in the schematic's lib_symbols', distinguishing it from other schematic queries. However, it doesn't explicitly differentiate from sibling tool get_pin_positions or clarify what 'pin info' includes (names/numbers vs. positions). Slight vagueness prevents a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this vs alternatives like get_pin_positions or get_symbol_info. The description only states the operation and doesn't mention exclusions or prerequisites. The optional schematic_path hint implies a context but doesn't provide explicit use-case guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_versionA
Read-onlyIdempotent

Get KiCad version information including build details and library versions.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
version_infoYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds value by specifying the exact content returned ('build details and library versions'), which is behavioral context beyond the annotations. No contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is immediately informative and front-loaded with the verb and resource. Every word contributes meaning; there is no fluff or redundancy. It is appropriately sized for a simple no-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, read-only, idempotent) and the presence of an output schema, the description is fully adequate. It explains the purpose and scope of the returned information without needing to document parameters or side effects. The annotations and output schema cover the remaining context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema description coverage is trivially 100%. The baseline for 0 parameters is 4, and the description properly focuses on what the tool does rather than needing to explain parameter inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and clearly identifies the resource as 'KiCad version information'. It further specifies the scope with 'build details and library versions', distinguishing it from all sibling tools which perform other actions. There is no ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: to retrieve version information from KiCad. It does not explicitly state when NOT to use it, but the absence of parameters and the read-only nature make it self-evident that this is a safe, general-purpose query tool. Clear context, though no explicit exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

is_root_schematicA
Read-onlyIdempotent

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

Output Schema

NameRequiredDescription
is_rootYes
root_pathYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely new behavioral semantics — the rule that rootness is determined by whether any sheet of the project references the file, and that root_path resolves to the project's top-level sheet — which an agent cannot get from structured fields. Return shape details are legitimately omitted because an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by the definitional rule and then the argument note, which is the right order. The middle paragraph is slightly long for a one-parameter read tool, but every clause contributes real meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one optional string parameter) and an output schema exists, so return values need no explanation. The description supplies the domain rule needed to interpret the result; only the resolution of relative paths and the meaning of 'configured default' are left open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and largely succeeds: it identifies schematic_path as a path to a .kicad_sch file and states it is optional, with omission falling back to the configured default. The reference to a 'configured default' is not explained (where it is configured, what it points to), leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check if a schematic is the root or a sub-sheet') and then defines what root/sub-sheet mean, which makes the domain concept unambiguous. It doesn't name the closest siblings (list_hierarchy, get_sheet_info, validate_hierarchy) that an agent might confuse it with, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by defining the root/sub-sheet concepts, and it gives one concrete operational rule (omit schematic_path to use the configured default). It never says when to prefer this over list_hierarchy or get_sheet_info, nor what happens on a path that isn't in a project, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cross_sheet_netsA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
schematic_pathNo

Output Schema

NameRequiredDescription
global_netsYes
hierarchical_netsYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a minor clarification about the default schematic path behavior, but this is also implied by the schema default. No other behavioral details (e.g., return format, performance) are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: a clear one-line purpose followed by a structured Args section. It is front-loaded, avoids redundancy, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and strong annotations, the description is adequate for a read-only list operation. It clearly defines the scope of 'cross-sheet nets' and the optional path. A slight gap is that the distinction between 'hierarchical pins' and 'global labels' may be ambiguous to newcomers, but this is acceptable for the target audience.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so effectively by explaining the sole parameter's purpose ('Path to root .kicad_sch file'), optionality, and fallback behavior ('omit to use the configured default'). This fully clarifies the parameter beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List all nets that cross sheet boundaries' with the qualifier '(hierarchical pins and global labels)'. This clearly distinguishes it from siblings like list_schematic_global_labels (labels, not nets) and trace_hierarchical_net (single-net tracing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention related tools such as trace_hierarchical_net or get_net_connections, nor does it state any exclusions or preferred contexts. The description only restates the purpose and parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_hierarchyA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
schematic_pathNo

Output Schema

NameRequiredDescription
rootYes
sheetsYes
sheet_countYes
component_countYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the root-schematic starting point and the optionality of the path, but does not disclose other behavioral traits like traversal depth or response structure. This is acceptable given the annotations and the presence of an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first defines the purpose, the second documents the single parameter. It is concise, front-loaded, and every sentence provides necessary value. The use of an 'Args' block is a clean way to structure parameter documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and an output schema, the description is largely complete. It could explicitly mention that the hierarchy includes nested sheets recursively, but the phrase 'full sheet hierarchy' implies this. The output schema presumably describes the return structure, so no further detail is required. Annotations handle safety and idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only a title and default for schematic_path with no description (0% coverage). The description compensates fully by explaining it is a path to a root .kicad_sch file, that it is optional, and that omitting it uses the configured default. This gives the agent complete information needed to use the parameter correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('full sheet hierarchy') with a clear scope ('starting from a root schematic'). This distinguishes it from sibling tools like list_schematic_sheets, which likely lists immediate sheets only, and get_sheet_info, which likely fetches a single sheet's details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the phrase 'full sheet hierarchy', but it does not explicitly state when to use this tool over alternatives such as list_schematic_sheets or validate_hierarchy. No exclusions or alternative tool names are mentioned. The parameter guidance about using the configured default is helpful but does not address tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_lib_footprintsA
Read-onlyIdempotent

List all footprints in a .pretty library directory.

Args:
    pretty_dir: Path to .pretty directory containing .kicad_mod files
NameRequiredDescriptionDefault
pretty_dirNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating safe read-only behavior. The description adds that it lists .kicad_mod files, which is consistent but does not disclose additional behavioral traits beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with two lines: a clear summary and an Args section. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with an output schema, the description is complete. It explains the tool's purpose and its single parameter adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning for the single parameter 'pretty_dir' by specifying it is a path to a .pretty directory containing .kicad_mod files. Schema coverage is 0%, so the description compensates well, though it could be more precise about path format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'footprints', and the context 'in a .pretty library directory'. It distinguishes from siblings like list_pcb_footprints by specifying the library scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for library footprints versus PCB footprints (list_pcb_footprints) but does not explicitly state when to use this tool over alternatives or provide any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_lib_symbolsA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
symbol_lib_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey the safe, read-only, idempotent nature. The description adds minimal behavioral context by specifying the target file type and that the parameter is optional with a configured default, but it does not disclose error handling or edge cases. Given the strong annotations, the description contributes some additional value but is not rich in behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence followed by a concise parameter definition, with the main action front-loaded. There is no redundancy or extraneous information, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with one optional parameter, strong annotations, and an output schema, the description covers essential usage. However, it could enhance completeness by briefly noting when to choose this tool over related ones like list_lib_footprints, though this is not critical given the clear purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining symbol_lib_path as a path to a .kicad_sym file and its optionality with a default behavior. This goes beyond the bare schema property, which only has a title and default, providing meaningful guidance for the single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and resource 'all symbols in a .kicad_sym library file', which clearly states the operation and distinguishes it from sibling tools like list_lib_footprints. The scope is unambiguous and immediately understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing symbols in a .kicad_sym file and notes the optional path with a configured default, but it does not explicitly state when to use this tool versus alternatives. There is no mention of alternatives like list_lib_footprints, so the guidance is inferred rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pcb_footprintsA
Read-onlyIdempotent

List all footprints on the PCB.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context by documenting that pcb_path is optional and that omitting it uses a configured default, which is beyond the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is minimal and front-loaded: a one-sentence purpose followed by a single parameter arg block. Zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool, the description covers purpose, parameter semantics, and the safety profile is covered by annotations. An output schema exists to describe return values, so no further explanation is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides type and default for pcb_path with no description. The description compensates fully by explaining it is a path to a .kicad_pcb file, optional, and that omission uses a configured default. This is critical for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all footprints on the PCB', with a specific verb (list) and resource (footprints on the PCB). This distinguishes it from sibling tools like list_lib_footprints that list library footprints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this tool operates on PCB footprints rather than library footprints, but it does not explicitly mention alternatives or exclusions. The distinction is implicit via the phrase 'on the PCB' and the sibling tool list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pcb_graphic_itemsA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
pcb_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds the scope of operation (all graphic items) and the optional pcb_path behavior, but does not disclose return format or error handling. This is adequate given the simple read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences: the first states the purpose, and the second documents the sole parameter. Every word contributes value, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with an output schema and comprehensive annotations, the description covers both purpose and parameter semantics. No additional information about return values is needed since an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero description coverage for pcb_path, so the description carries the full burden. It clearly explains that the parameter is a path to a .kicad_pcb file, is optional, and omitting it uses the configured default. This fully compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'list' and identifies the resource as 'graphic items (lines, text, etc.) on the PCB'. This clearly distinguishes it from sibling tools like list_pcb_traces and list_pcb_footprints by focusing on a distinct category of PCB elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description simply states what it does without mentioning any exclusions or specific use cases, leaving the agent to infer applicability from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pcb_layersA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
pcb_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, and non-destructive. The description adds useful context beyond those annotations: the actual layer set is board-dependent and layer names may be renamed. This contextualizes the tool's behavior without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two functional sentences plus a clear Args line. Every sentence contributes either purpose, usage guidance, or parameter meaning with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only tool with a corresponding output schema and strong annotations, the description is fully sufficient. It covers purpose, behavior variability, prerequisite usage, and parameter semantics, leaving no material gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides a default string for pcb_path, but the description fully explains the parameter semantics: it is a path to a .kicad_pcb file, optional, and can be omitted to use the configured default. This adds meaning well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly starts with 'List all layers defined in the PCB stackup' and enumerates the layer categories, making the resource and action unambiguous. It also distinguishes itself from sibling list tools such as list_pcb_traces and list_pcb_nets by targeting the stackup layer set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs the agent to call this tool before any tool that takes a layer name, and justifies this with per-board valid sets and common layer renames. This gives concrete when-to-use guidance and explains the dependency relationship.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pcb_netsA
Read-onlyIdempotent

List all named nets on the PCB.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the read-only behavior is established. The description adds useful context by specifying that it lists only 'named' nets and that pcb_path can be omitted to use a configured default. It does not disclose return format or error handling, which is acceptable for a simple read-only tool with an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loaded with the primary action, and contains no filler. The parameter explanation is compact and directly informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, annotations, and the presence of an output schema, the description sufficiently covers the purpose and the optional parameter. It could add minor details about default path resolution or error cases, but these are not critical for a straightforward list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only a default of '' with no description, while the description explains pcb_path is a path to a .kicad_pcb file and that omitting it uses a configured default. This meaningfully goes beyond the schema and fully compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List all named nets on the PCB.' The verb 'List' and resource 'named nets' are specific, and the phrase 'named nets' adds scope that distinguishes it from other net-related tools like get_net_connections or list_pcb_traces. However, it does not explicitly name alternative tools, so it stops short of a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description only explains the purpose and the optional parameter, but does not mention any conditions, exclusions, or alternative tools for different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pcb_tracesA
Read-onlyIdempotent

List all trace segments and vias on the PCB.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no further behavioral context, such as side effects or exclusions, beyond restating the listing scope. This matches the baseline for a tool where annotations carry the transparency burden and the description adds no extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one declarative sentence plus a short arg explanation. Every word adds value, and the structure cleanly separates the purpose from parameter details. This is appropriate for a simple list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter, the description is complete. It states exactly what is returned (traces and vias), explains the default behavior for the missing argument, and an output schema exists to define the return structure. No missing context prevents correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides a title and default for pcb_path, with 0% description coverage. The description compensates fully: it explains that pcb_path is 'Path to .kicad_pcb file' and clarifies it is optional, with behavior when omitted: 'omit to use the configured default.' This adds meaningful semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'List all trace segments and vias on the PCB.' This uses a specific verb ('List') and resource ('trace segments and vias'), and the tool name 'list_pcb_traces' directly corresponds. It is distinct from sibling tools like list_pcb_footprints or list_pcb_nets, which list other PCB elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by specifying what is listed ('all trace segments and vias') and the optional pcb_path parameter. It does not explicitly mention alternatives or situations where a different list tool should be used, but for a simple read-only list operation, the intended usage is obvious. A 5 would require explicit alternatives or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pcb_zonesA
Read-onlyIdempotent

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

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and idempotentHint, and the description aligns by using 'List.' The description adds behavioral detail about the optional pcb_path and the fallback to a configured default, which supplements the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: a clear one-line purpose and a parameter explanation. No filler or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, read-only listing tool, the description covers purpose, scope, parameter semantics, and default behavior. An output schema exists, so return details need not be in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully explains the single parameter: 'pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.' This compensates completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and a specific resource 'zones (copper and keepout) on the PCB,' clearly distinguishing it from sibling tools like add_copper_zone or fill_zones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes a clear context: it lists all zones on the PCB. It does not explicitly name alternatives or when-not-to-use conditions, but the scope is unambiguous. The read-only nature and sibling lineage further clarify appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_bus_entriesA
Read-onlyIdempotent

List all bus entries in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds that schematic_path is optional and falls back to a configured default, which is useful context. However, it does not discuss error conditions or return format, though an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the primary purpose, the second explains the only parameter. It is front-loaded, and every phrase adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool, the description is sufficient: it explains what it does and the parameter. The output schema handles return values, and annotations cover safety. It could be improved by describing what constitutes a 'bus entry', but that is domain knowledge likely known to KiCad users. Overall, complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a title and default for schematic_path, with no description (0% coverage). The description compensates fully by specifying it's a path to a .kicad_sch file, optional, and defaults to a configured path. This gives complete semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and resource 'bus entries in the schematic', clearly distinguishing it from sibling list tools like list_schematic_wires or list_schematic_labels. It concisely states the operation without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use for retrieving bus entries but does not provide explicit guidance on when to choose this tool over alternatives or any prerequisites. The optional schematic_path hint is parameter guidance, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_componentsA
Read-onlyIdempotent

List all placed components in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is clear. The description adds a minor behavioral detail with 'all placed components', implying unplaced or library components are not included, but it does not elaborate on filtering, ordering, or output structure beyond what the output schema likely covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one opening sentence plus a single parameter definition. It is front-loaded with the core purpose and includes only essential information. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional parameter and an output schema, the description provides sufficient context: the operation type, scope ('all placed components'), and parameter semantics. It does not mention edge cases like empty schematics or invalid paths, but these are not critical given the tool's simplicity and existing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It explains schematic_path as 'Path to .kicad_sch file. Optional; omit to use the configured default.' This adds file-format context, optionality, and fallback behavior beyond the schema field alone, fully compensating for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all placed components in the schematic' with a specific verb and resource. It differentiates from sibling list tools (e.g., list_schematic_labels, list_schematic_wires) by focusing on 'components', though it doesn't explicitly contrast with those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives is provided. The only usage context is the parameter description ('Optional; omit to use the configured default'), which explains the path argument but does not help select among the many list_schematic_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_global_labelsA
Read-onlyIdempotent

List all global labels in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that the operation is read-only, idempotent, and non-destructive. The description adds minimal extra behavioral context beyond the operation itself (e.g., the optional path resolution). It does not contradict annotations, but it doesn't significantly deepen the behavioral model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences: the first states the core action, and the second explains the only parameter. Every word earns its place, with no redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and an existing output schema, the description covers the operation, the parameter semantics, and the default behavior. It doesn't need to explain return values since an output schema is present, making it fully sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining the schematic_path parameter: its file type (.kicad_sch), its optionality, and the configured-default fallback behavior. This adds meaningful value beyond the schema's default-value field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the specific resource ('global labels in the schematic'), which precisely distinguishes it from sibling tools like list_schematic_labels and list_schematic_hierarchical_labels. The use of 'global' narrows the scope unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (to list global labels) and explains the optional path parameter with its default behavior. However, it does not explicitly mention alternatives or exclusions, leaving the comparison to siblings implicit in the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_hierarchical_labelsA
Read-onlyIdempotent

List all hierarchical labels in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly and idempotent, and the description aligns with them. It adds useful context about listing 'all' labels and that schematic_path can be omitted to use a configured default, without any contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one action sentence plus a minimal Args block. No wasted words; it is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one optional parameter, an output schema, and safety annotations, the description provides all needed context. It clarifies the scope and the optional path behavior without unnecessary detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides an empty default and no property description, but the description thoroughly explains schematic_path's purpose, optionality, and default behavior. This fully compensates for the 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact action ('List') and resource ('all hierarchical labels in the schematic'), which clearly distinguishes it from sibling tools like list_schematic_labels or list_schematic_global_labels. The scope 'all' adds precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool when you need hierarchical labels. It does not explicitly mention alternatives or exclusions, but the domain-specific term 'hierarchical' and sibling names provide enough disambiguation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_junctionsA
Read-onlyIdempotent

List all junctions in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=True, idempotent=True, and destructive=False. The description adds behavioral context by specifying the result scope ('all junctions') and explaining that omitting schematic_path uses a configured default, which goes beyond the schema's empty default string.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one main sentence plus a compact Args block. Every word adds value, no fluff, and the primary action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list tool, the description fully explains the operation and the parameter. With annotations covering safety and an output schema present, no further context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates by documenting the only parameter: it is the path to a .kicad_sch file, is optional, and omitting it uses a configured default. This provides meaningful semantics beyond the bare schema property.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('all junctions in the schematic'), clearly distinguishing it from mutation siblings like add_junctions and remove_junction. The scope ('all junctions') and file reference (schematic_path) make the operation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a read-only listing operation but does not explicitly state when to use it versus alternatives. No exclusions, alternatives, or conditions are mentioned, so guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_labelsA
Read-onlyIdempotent

List all net labels in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the scoping to 'net labels' and the optionality of schematic_path, but does not disclose additional behavioral traits such as output format or edge cases, so it provides limited extra value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one purpose sentence and a compact Args block. Every word earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with an output schema and thorough annotations, the description is mostly complete. It covers the action, scope, and parameter semantics. However, it could explicitly mention that this tool is for regular net labels, not global or hierarchical labels, to remove minor ambiguity given the sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully compensates for the single parameter: it explains schematic_path as 'Path to .kicad_sch file' and notes that it is optional with a configured default. This adds clear meaning beyond the raw schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'List all net labels in the schematic' with a specific verb and resource. The phrase 'all net labels' clearly distinguishes this from sibling tools like list_schematic_global_labels and list_schematic_hierarchical_labels, which cover other label types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. Sibling tools for global and hierarchical labels exist, but the description does not mention them or any exclusions, leaving the user to infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_no_connectsA
Read-onlyIdempotent

List all no-connect flags in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that it lists 'all' no-connect flags and notes the optional path behavior, but discloses no further behavioral traits or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a concise two-sentence structure: the first sentence states the purpose, the second documents the argument. Every sentence earns its place with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only list operation with an output schema present, so return values are likely documented elsewhere. The description covers the purpose and parameter adequately for this level of complexity, and the annotations cover safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema property for schematic_path has no description (coverage 0%), so the description compensates by explaining it is a path to a .kicad_sch file, is optional, and omitting it uses a configured default. This adds meaningful information beyond the schema's bare title and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'List all no-connect flags in the schematic.' It uses a specific verb and resource, and the phrase 'no-connect flags' distinguishes it from sibling tools like list_unconnected_pins or list_schematic_wires.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus alternatives. The purpose implies usage (e.g., to inspect existing no-connect flags), but there is no mention of related tools such as no_connect_pin or remove_no_connect, and no exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_sheetsA
Read-onlyIdempotent

List all hierarchical sheets in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety. The description adds the scope ('all hierarchical sheets') and the optional default path behavior, which is useful context, but does not disclose return format or potential errors. Since annotations handle the safety profile, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the purpose, the second covers the parameter. All information is front-loaded and every sentence earns its place. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with an output schema, the description covers the essential aspects: what it does and what the parameter means. It lacks explicit usage guidance or prerequisites, but given the straightforward nature and good annotations, it is nearly complete. A minor gap is not clarifying whether 'all hierarchical sheets' includes nested sheets recursively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly explains the single parameter: 'Path to .kicad_sch file. Optional; omit to use the configured default.' This provides meaning beyond the input schema, which only has a default empty string and no description. It clearly conveys the parameter's purpose, optionality, and default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all hierarchical sheets in the schematic, using the specific verb 'List' and a specific resource. This distinguishes it from other list_* tools that target different entity types (components, labels, wires, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating what it does, but does not explicitly provide when-to-use context or alternatives. Sibling tools like list_hierarchy and get_sheet_info exist, but no guidance is given on when to prefer this tool over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schematic_wiresA
Read-onlyIdempotent

List all wire segments in the schematic.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to justify safety. It does add context about the optional path and configured default, but doesn't disclose return format or behavior across nested sheets. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short sentences and an Args section. Every word earns its place, front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, read-only, output schema exists), the description is adequately complete. It could mention whether wires from sub-sheets are included, but for a straightforward list operation, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description's Args section fully explains schematic_path: its purpose, file type (.kicad_sch), optionality, and default behavior. This compensates well for the lack of schema descriptions, though it could specify what the 'configured default' is.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all wire segments in the schematic' with a specific verb and resource. It distinguishes this tool from sibling list tools (e.g., list_schematic_components) by explicitly targeting wires.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (to list wires) and even explains the optional schematic_path parameter and default behavior. It lacks explicit alternative comparisons or exclusions, but the context is straightforward and unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_unconnected_pinsA
Idempotent

List 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: 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; the project whose hierarchy to look in.
        Refused when no sheet of it uses the file.
NameRequiredDescriptionDefault
output_dirNo
project_pathNo
schematic_pathNo

Output Schema

NameRequiredDescription
noteNo
pinsYes
unconnected_countYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses substantial behavior beyond the annotations: it runs ERC, filters pin_not_connected violations, checks sub-sheets from the project root, refuses certain non-root hierarchy cases, and raises without changing output_dir if no report is produced. These details give the agent clear expectations for a tool whose annotations already mark it as non-destructive but not read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then moves into necessary hierarchy and parameter details. It is dense but mostly earns its length; the hierarchy caveats are technical and useful, though some phrasing could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers requirements, hierarchy edge cases, failure behavior, coordinate units, and all three optional parameters. With an output schema present, it does not need to explain return fields, and the remaining context is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter semantics, and it does: it names the .kicad_sch path, the ERC report output directory, and the .kicad_pro project path with its hierarchy purpose and refusal condition. It also states defaults for the optional parameters, adding meaning well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list unconnected pins by running ERC and filtering for KiCad's pin_not_connected violations. It also distinguishes this from plain ERC by explaining the filtering and hierarchy behavior, so an agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical preconditions and refusal cases, such as requiring kicad-cli and how sub-sheets are handled. However, it does not explicitly say when to choose this tool over the sibling run_erc or validate_hierarchy, so the usage guidance is implied rather than comparative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_hierarchical_labelA
Destructive

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
NameRequiredDescriptionDefault
textYes
uuidNo
new_xNo
new_yNo
new_textNo
new_shapeNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive behavior, so the description adds value by explaining sentinel semantics: empty strings for new_text/new_shape and None for new_x/new_y mean 'keep current'. It also discloses that schematic_path can be omitted to use a default. This is beyond the annotations and helps predict tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a single-purpose sentence followed by an Args block. Each line adds unique meaning with no redundancy, and the most important use-case information appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters and an output schema present, the description adequately covers all parameter behaviors including defaults and lookup mechanics. It does not need to explain return values due to the output schema, and no major operational aspects (like matching, disambiguation, or optionality) are omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates by explaining every parameter's purpose: text is used for lookup, new_text/new_shape use empty string as 'keep current', new_x/new_y use None as 'keep current', and uuid is for disambiguation. These are critical semantics not inferable from the schema types alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Modify an existing hierarchical label', specifying the verb (modify) and the resource (existing hierarchical label). This distinguishes it from siblings like add_hierarchical_label or remove_hierarchical_label, and clarifies the scope as an existing entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by specifying the operation is for existing labels and includes parameter-level instructions such as 'Current label text to find' and 'empty = keep current'. It does not explicitly list alternative tools or exclusions, but the guidance on prerequisite input (text) and optional overrides is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_hierarchical_sheetA
Destructive

Modify 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.
    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)
NameRequiredDescriptionDefault
widthNo
heightNo
file_nameNo
sheet_nameNo
sheet_uuidYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing side effects: pins stay anchored to resized edges, autoplaced name/file fields are re-placed, and wires, buses and no-connects riding a moved pin are dragged along so connectivity survives. It also documents the failure mode (sizes below the pin minimum are refused, naming the minimum) and the no-op case where the new size equals the current one, all of which the annotations could not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then behavior, then an Args block, which is the right order for a mutation tool. The behavioral paragraph is dense and slightly awkwardly phrased ('places the name and file fields of an autoplaced sheet again') but every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no prose. With all six parameters explained, side effects enumerated, and the error condition stated, an agent has everything needed to call a destructive sheet mutation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does: every one of the six parameters is explained along with its sentinel value (empty string = keep for sheet_name/file_name, None = keep for width/height), units in mm, and optionality of schematic_path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: modify properties of an existing hierarchical sheet block. The verb distinguishes it from add/remove/move_hierarchical_sheet by naming the operation, though it never explicitly says it edits metadata (name, file, size) rather than position.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Points at list_schematic_sheets as the source of sheet_uuid and explains that omitting schematic_path uses the configured default, which is useful routing context. However, it never addresses the closest alternative, move_hierarchical_sheet, so an agent may not know that repositioning a sheet is out of scope here, and no when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_componentA

Move 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 snap to the 1.27 mm grid when the symbol moves, and the grid point must lie on the
page. Passing the symbol's own position (as list_schematic_components reports it) turns it in
place without snapping, wherever it stands, off the page included. Nothing is written when
nothing would change.

Args:
    reference: Reference designator (e.g. "R1")
    x: New X position
    y: New Y position
    rotation: The absolute angle in degrees (None = keep current); a mirrored symbol keeps
        its mirror. It is written as KiCad writes it, so it also repairs an angle KiCad
        cannot load, such as 45, +90 or none; a call without it refuses one this tool
        cannot read as 0, 90, 180 or 270.
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
NameRequiredDescriptionDefault
xYes
yYes
rotationNo
referenceYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses behavior well beyond the annotations: fields move and rotate with the symbol, KiCad GUI autoplace is not replicated, wires/labels/junctions/no-connects stay put, and the result lists every pin whose connections changed. It also explains snapping rules, in-place rotation without snapping, and that nothing is written when nothing would change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the tool's purpose, then organized into behavior paragraphs followed by an Args section. Despite its length, every sentence carries useful behavioral or parameter detail warranted by the complexity and the lack of schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a mutation tool with annotations, five parameters, and an output schema, the description supplies all the missing context an agent needs: scope, side effects, snapping rules, rotation semantics, and follow-up actions. Nothing essential for correct invocation is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, and it does: reference is a designator, x/y are new positions with detailed grid-snapping rules, rotation is absolute and None keeps the current angle, and schematic_path is optional with a configured default. The rotation explanation also covers mirrored symbols and invalid stored angles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: move or turn a placed component. The word 'placed' distinguishes this from siblings that add, remove, or place components, and the turn behavior is included up front.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is for moving/turning an existing component and tells the agent to reconnect changed pins with wire_pins_to_net or connect_pins. It does not explicitly compare against place_component or name when not to use this tool, so it stops short of a full when/when-not/alternatives guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_footprintA

Move 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 down is turned half a turn with its
justification mirrored, so it stays readable on the same side of its anchor.
Angles are written as KiCad writes them: the footprint's between -180 and 180
and left out at 0. Off the quarter turns the result reads as KiCad's turn
without matching pcbnew's save byte for byte: footprint-relative coordinates
stay as written where pcbnew re-derives them through two RotatePoint roundings,
an fp_rect stays where pcbnew writes an fp_poly, and arc mid points stay as
written. A footprint carrying what this tool does not move with it
(a dimension, image, table or barcode, or a child no KiCad it knows reads) is
refused and nothing is written. The keep-out warning reads keepouts as
check_placement does.

Args:
    reference: Reference designator (e.g. "R1")
    x: New X position
    y: New Y position
    rotation: The footprint's angle after the move, in degrees (None keeps the
        current one). An angle the footprint already has (270 for one at -90,
        360 for one at 0) changes nothing and leaves the file byte-identical,
        where KiCad's footprint properties dialog would still re-run its
        rotate by a full turn. inf and nan are refused and nothing is written.
    layer: F.Cu or B.Cu (empty keeps the side; anything else is refused). The
        other side flips the footprint as KiCad's own flip does (FOOTPRINT::Flip,
        pcbnew/footprint.cpp:2491-2550 at 9.0.8): pads, texts and graphics
        mirror, their layers go to their opposites on this board (user layers it
        pairs included), a text's mirror toggles on side-specific layers only,
        zones and points mirror about the footprint with their layers, and 3D
        models stay as they are. With a rotation the flip comes first, so
        rotation names the angle the footprint ends at. Refused, with nothing
        written: a text box, a pad's own padstack, KiCad 10's back drills, and on
        a board of four or more copper layers an item (a zone included) on inner
        copper that does not name every inner layer, which KiCad 9 and 10 flip
        apart.
    pcb_path: Path to .kicad_pcb file. Optional; omit to use the configured default.
NameRequiredDescriptionDefault
xYes
yYes
layerNo
pcb_pathNo
rotationNo
referenceYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply coarse booleans (readOnly=false, destructive=false, non-idempotent); the description carries everything else. It discloses atomicity ("Refused, with nothing written"), exact rotation/flip semantics, no-op cases that leave the file byte-identical, parse-level nuances (fp_rect vs fp_poly, arc midpoints), and the full list of refused item types. That is far beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is strong: a one-line purpose, then behavior, then a per-argument block, with the most important facts front-loaded. It is unusually long, however, and some detail (pcbnew file:line citations, byte-for-byte save trivia) exceeds what an agent needs to select and invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description fills the remaining gaps for a complex mutation: rollback guarantees, refusal conditions, default resolution, and interaction between rotation and layer flip ordering. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it documents every parameter: reference's format, x/y meaning, rotation's null-vs-value and angle normalization behavior, layer's accepted values and flip consequences, and pcb_path's default. inf/nan rejection for rotation and refusal of invalid layer values are spelled out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ("Move a footprint to a new position"), and the body pins down exactly what is rewritten versus what follows the move. It never explicitly distinguishes itself from near-siblings like move_component or place_footprint, so the agent must infer the footprint/schematic split from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: it tells the agent the pcb_path is optional and defaults to the configured file, and cross-references check_placement for keep-out warnings, but gives no when-to-use-this-versus-alternative guidance against place_footprint or move_component.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_hierarchical_sheetA
Destructive

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.
NameRequiredDescriptionDefault
new_xYes
new_yYes
sheet_uuidYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the modification nature is known. The description adds 'including all pins' which clarifies the scope of the move, but it does not disclose side effects like connectivity changes or undo behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action sentence, followed by a structured Args list. It is concise, though the Args section could be tightened; overall it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers the move operation, all pins, and all parameters. An output schema exists, so return values need not be described. It lacks mention of potential side effects, but the core invocation context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides zero descriptions (0% coverage), but the 'Args' section fully explains each parameter: UUID purpose, X/Y in mm, and schematic_path optional semantics with default behavior. This greatly exceeds the schema by adding units, context, and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Move') and resource ('a hierarchical sheet block') with a notable scope ('including all pins'). This distinguishes it from siblings like move_component or move_footprint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by naming the operation but does not explicitly state when to choose this over alternatives, nor does it mention any exclusions or prerequisites. Sibling tools like add_hierarchical_sheet and remove_hierarchical_sheet exist, but no comparison is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
pin_nameYes
referenceYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'Idempotent: calling again for a pin that already has one is a no-op', but the annotations set idempotentHint to false. This is a direct contradiction. Additionally, no other behavioral traits such as file modification or error cases are disclosed beyond the basic annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact with a clear one-line purpose, an idempotency note, and a structured Args list. No redundant or filler content. It is well-front-loaded and each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with an output schema, the description covers the operation, all parameters, and idempotency. However, it lacks usage guidance and contradicts its idempotency annotation, which slightly reduces completeness. Overall, it is mostly complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for any parameter (0% coverage), so the description fully compensates. It provides examples for reference ('U2'), pin_name formats ('NC' or '3'), and clarifies schematic_path as optional with a default. Every parameter is meaningfully explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Place a no-connect flag on a component pin', using a specific verb and resource. It differentiates from siblings like remove_no_connect by indicating the action of placing. The arg examples further clarify the intended use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives such as remove_no_connect or connect_pins. It only describes the operation and idempotency, with no explicit context or exclusions. Given the many sibling tools, this lack of distinction is a significant gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 a .kicad_sym file that defines the symbol, for a
        library outside KiCad's stock set. Optional; omit to load the symbol
        from the stock library named by the lib_id prefix.
    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)
NameRequiredDescriptionDefault
xYes
yYes
valueYes
lib_idYes
mirrorNo
rotationNo
referenceYes
project_pathNo
schematic_pathNo
symbol_lib_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write/no-destroy/non-idempotent/openWorld=false, so the safety profile is covered. The description adds useful context on the optional path arguments (stock vs external symbol loading, default schematic) but never mentions that repeated calls create duplicate symbols or how errors surface, leaving behavioral gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose sentence, then a clean per-argument list. The Args block re-enumerates all schema fields, which is somewhat duplicative, but each line carries an example or default explanation and the overall size is reasonable for a 10-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description plus annotations cover the input contract for a 10-param tool well. Missing only edge-case behavior (duplicate symbols, invalid lib_id handling) to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: every parameter gets a concrete example and format (e.g. "Device:R", "10K", mm units, degrees, mirror axis, path semantics for external libraries). The only shortfall is that the coordinate origin/reference frame for x/y is not defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Place) and resource (schematic symbol) and enumerates concrete component kinds plus the general rule that any lib_id works. This cleanly separates it from PCB-side siblings like place_footprint and from add_symbol/remove_component.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly signals usage through detailed argument documentation and the note that any lib_id is valid, but never states when to choose this over alternatives (e.g. place_footprint vs place_component) or any preconditions. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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, 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_lib_footprints to see what a library holds.

The footprint is turned to its rotation as KiCad's own rotate turns it: every
pad and text turns with it (a pad's angle is its library angle plus the
footprint's), and a keep-upright text that would read upside down is turned
half a turn with its justification mirrored, so it stays readable on the same
side of its anchor. Angles are written as KiCad writes them: the footprint's
between -180 and 180 and left out at 0, each pad's and text's absolute. Off the
quarter turns the result reads as KiCad's placement without matching pcbnew's
save byte for byte: footprint-relative coordinates stay as the library writes
them where pcbnew re-derives them through two RotatePoint roundings, an fp_rect
stays where pcbnew writes an fp_poly, and arc mid points stay as written. A
library footprint without a Datasheet or Description field is placed without
it, so KiCad reads that hidden field at its default on F.Fab, whereas pcbnew
writes it, on B.Fab for a placement on the back.

Zones the footprint owns (keepouts, say) and a KiCad 10 footprint's points are
stored in board coordinates (format( ZONE ), pcb_io_kicad_sexpr.cpp:2628-2637 at
9.0.8), so they land where KiCad's placement puts them: moved with the footprint,
turned about it and, on the back, mirrored with it.

A footprint carrying what this tool does not move with it (a dimension, image,
table or barcode, or a child no KiCad it knows reads), or on the back what it does
not flip (see move_footprint), is refused and nothing is written.

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: The footprint's angle in degrees, counter-clockwise as seen on
        screen; any finite value (270 is stored as -90, 360 as 0). inf and nan
        are refused and nothing is written.
    layer: F.Cu or B.Cu; any other layer is refused. B.Cu places the footprint
        flipped as KiCad's own flip does, then turns it to rotation
        (FOOTPRINT::Flip, pcbnew/footprint.cpp:2491-2550 at 9.0.8).
    library: Footprint library nickname (e.g. "Resistor_SMD"), or a path to a
        .pretty directory. A nickname is resolved as update_pcb_from_schematic
        resolves it: the project's fp-lib-table beside the board, .pretty
        directories beside the board, KICAD_FP_LIB, the user's global
        fp-lib-table (with the libraries the Plugin and Content Manager
        installed), then KiCad's stock footprints. 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.
NameRequiredDescriptionDefault
xYes
yYes
layerNoF.Cu
valueYes
libraryNo
pcb_pathNo
rotationNo
footprintNo
referenceYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are thin (non-readonly, non-destructive, non-idempotent), so the description carries the burden and does so thoroughly: refusal conditions and their atomicity ('nothing is written'), layer flipping via FOOTPRINT::Flip, text variable-refusal on %V/%R, back-layer Datasheet/Description defaults on B.Fab, and zone coordinate handling. This is unusually rich behavioral disclosure, well beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded, but the middle paragraphs are extremely dense KiCad-internals prose (pcbnew roundings, format() line references, fp_rect vs fp_poly) that a calling agent rarely needs and that pushes the actionable content (refusal conditions, layer/rotation rules) far down.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists and annotations cover mutation flags, the description need not explain return values, and it does cover the critical caller-facing rules. However, for a 9-param tool with 0% schema coverage, more of the earlier prose should have been spent on the parameters themselves and less on internal serialization details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and largely does: it defines rotation semantics (CCW as seen on screen, 270 stored as -90, inf/nan refused), layer (F.Cu/B.Cu only, B.Cu flips then rotates), library resolution order, and pcb_path default. It does not spell out x/y units beyond 'mm' (which it does state) or fully disambiguate footprint/librar as required pairs beyond the library-implies-footprint rule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (place) and resource (footprint on PCB) and immediately differentiates the two modes: a real library footprint versus a pad-less marker. Siblings move_footprint and remove_footprint operate on existing footprints, and the description makes clear this creates a new one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to list_lib_footprints to discover library contents, and clearly states the condition for omitting library/footprint (pad-less placeholder for callers wanting only reference and value). Does not explicitly contrast with place_component or move_footprint, but the create-vs-move distinction is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_componentA
Destructive

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.
NameRequiredDescriptionDefault
referenceYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the destructive nature is known. The description adds no additional behavioral context (e.g., irreversibility, side effects on connected nets, or behavior if the reference doesn't exist). It is consistent with annotations, so no contradiction, but it does not go beyond what annotations and the verb 'Remove' imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences plus a neatly formatted Args list. Every sentence is purposeful, information is front-loaded, and there is no fluff. It earns a perfect score for conciseness and structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, 1 required) and the existence of an output schema, the description fully covers the purpose, parameters, and file context. The optional schematic_path behavior is clearly noted. No meaningful gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameter descriptions, but the description's Args section explains both parameters clearly: 'reference' with an example ('U2') and 'schematic_path' with its purpose and optional behavior. This fully compensates for the schema's lack of descriptions and adds practical detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Remove a component') and the specific method ('by reference designator'), which distinguishes it from sibling tools like remove_footprint (PCB) or remove_hierarchical_label. The resource and action are immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by specifying the schematic file path and the reference designator, implying it is for schematic components. It doesn't explicitly mention alternatives, but the naming and parameters make the appropriate use case evident. No exclusion criteria are given, so a 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_dangling_tracksA
Destructive

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.
NameRequiredDescriptionDefault
pcb_pathNo

Output Schema

NameRequiredDescription
iterationsYes
tracks_removedYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive behavior (destructiveHint=true), and the description adds valuable context: the iterative removal process and the precise definition of a dangling segment (endpoint not connecting to pad, via, or another trace). It does not contradict annotations and goes beyond what structured metadata conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It front-loads the main purpose, then explains the algorithm, and ends with parameter documentation. Every sentence adds value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (one optional parameter, output schema exists, annotations cover destructive behavior), the description is complete. It explains what, why, how (iterative), and the argument meaning. No gaps remain for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for the single parameter. It fully explains pcb_path: a path to a .kicad_pcb file, optional, with a default behavior ('omit to use the configured default'). This is clear and sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Detect and remove trace segments with unconnected endpoints.' It uses a specific verb ('remove') and resource ('dangling tracks'), and distinguishes itself from sibling tools like remove_traces by focusing on unconnected endpoints. The iterative behavior and dangling criterion add precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (to clean up dangling segments) but does not explicitly mention alternatives or exclusions. It says what the tool does, which implies its use case, but lacks direct comparison to other trace-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_footprintA
Destructive

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.
NameRequiredDescriptionDefault
pcb_pathNo
referenceYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The destructiveHint annotation already indicates this operation is destructive. The description adds minor behavioral context by noting pcb_path is optional, but does not elaborate on side effects or error conditions (e.g., footprint not found). Given the annotation covers the main safety concern, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and well-structured, with a one-sentence summary followed by an Args section. Every sentence adds value without extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool with only two parameters and an output schema present, the description is adequately complete. It covers the essential usage and arguments, though it omits potential edge-case behavior like error handling for missing footprints. Given the low complexity, this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides concrete semantics beyond the schema for both parameters: 'reference' is explained with an example ('R1'), and 'pcb_path' is described as an optional path with a default behavior. This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Remove a footprint by reference designator', specifying the action (remove), the resource (footprint), and the key parameter (reference designator). This distinguishes it from sibling operations like remove_component or remove_label.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: it targets PCB footprints with a reference designator, and mentions the optional pcb_path for specifying the file. It does not explicitly contrast with alternatives like remove_component, but the context is sufficiently clear for a single-purpose tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_hierarchical_labelA
Destructive

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
NameRequiredDescriptionDefault
textYes
uuidNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the destructive nature is covered. The description adds useful context about default schematic_path and UUID disambiguation, but does not disclose what happens on lookup failure or whether the file is modified, though output schema may cover return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient: a single-sentence purpose followed by a minimal bulleted list for parameters. Every line adds value, no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-object removal tool with annotations and an output schema, the description is largely complete. It covers target identification and optional path handling. Minor gaps like error behavior when not found are acceptable given existing structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions are absent (0% coverage), so the description carries the full burden. It provides clear definitions for text, schematic_path (including default behavior), and uuid (including disambiguation purpose), adding meaningful guidance beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Remove') and resource ('hierarchical label'), and differentiates from siblings like remove_label by specifying 'hierarchical'. It also clarifies matching by name or UUID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for hierarchical labels and explains how to specify the target, but does not explicitly distinguish from alternatives like remove_label or mention when not to use it. The context of sibling tools and the name make the primary use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_hierarchical_sheetA
Destructive

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)
NameRequiredDescriptionDefault
nameNo
uuidNo
delete_child_fileNo
parent_schematic_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses destructive nature (delete_child_file behavior) and error handling, adding context beyond annotations. It explains conditions for file deletion and outputs UUIDs on ambiguity, providing full behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two clear paragraphs. The overview front-loads the purpose, and the Args section is structured. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, identification, error handling, and file deletion. It does not explicitly state what happens if the sheet does not exist, but the output schema covers return values. Minor gap but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description's Args block fully explains each parameter's purpose and behavior. It adds meaning beyond the schema, especially for 'delete_child_file' with its conditional deletion note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it removes a hierarchical sheet block from a parent schematic, with a specific verb and resource. It distinguishes itself from siblings like 'add_hierarchical_sheet' and 'modify_hierarchical_sheet' by the action type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains identification methods (name, uuid) and disambiguation behavior when multiple sheets match. It does not explicitly state when not to use or suggest alternatives, but the context is clear enough for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_junctionA
Destructive

Remove 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 entry
end inside it. The result names each merge.

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

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes far beyond: it details exactly what is destroyed (parallel pairs merged, T loses its stem, a crossing becomes two disconnected wires), what survives (angled meetings stay joined), and the bus-entry exception. This is unusually rich disclosure of consequence and reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and consequence, and each sentence earns its place by adding behavioral detail. The embedded source reference (bus-wire-junction.cpp:115-185 at 9.0.8) is precise but slightly niche overhead for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still notes 'The result names each merge'. Combined with annotations covering the safety profile, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and documents all three parameters. It clarifies schematic_path is optional and defaults to the configured file, which adds genuine meaning; x/y are described only as positions, which is acceptable but minimal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a junction at the given coordinates') and sandboxes it against KiCad semantics. An agent can distinguish it from siblings like remove_wire, remove_label, or remove_no_connect without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The behavior narrative implies when the operation matches KiCad's delete, but there is no explicit when-to-use/when-not or routing to alternatives such as remove_wire for actual wires. Usage is inferable from the described effects rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_labelA
Destructive

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.
NameRequiredDescriptionDefault
xNo
yNo
textYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond destructiveHint=true by specifying that without positional filters ALL matching labels are removed and that matching uses 0.1mm tolerance. This discloses the actual destructive scope and avoids surprises. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and logically structured: behavior first, then conditional rules, then a usage hint, then parameter definitions. No redundant sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive filter/removal tool, it covers the action, positional edge cases, an alternative for moving labels, and all parameter meanings. The output schema handles return values, so no additional return documentation is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the Args section defines every parameter: text as match string, x/y as optional position filters, and schematic_path with default behavior. It adds semantics such as 'within 0.1mm tolerance' that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove') and names the exact resource ('net label(s) or global label(s) by text'), clearly differentiating it from sibling tools like remove_hierarchical_label. It also mentions optional position filtering, giving a precise scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly describes conditional behavior: when x/y are provided, only matching labels within tolerance are removed; otherwise all matching-text labels are removed. It provides an alternative workflow for moving global labels via add_global_label, and the scope (net/global vs hierarchical) is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_no_connectA
Destructive

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.
NameRequiredDescriptionDefault
pin_nameYes
referenceYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint=true), so the mutation is understood. The description adds valuable behavior: it removes every no-connect at the pin's position, not just one, which is important for users who may have stacked duplicates. This goes beyond what annotations or schema convey, and no contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five lines: a front-loaded action sentence, a clarifying sentence about duplicate behavior, then a clean Args section. Every sentence earns its place with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 params, destructive nature, 0% schema coverage), the description is complete: it states the action, duplicate semantics, parameter details, and default path behavior. An output schema exists, so return values are already defined; no further explanation is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by explaining each argument: reference examples 'U2', pin_name examples 'NC' or '3', and schematic_path default behavior when omitted. This provides meaning that the schema's bare property titles lack.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description begins with 'Remove no-connect flag(s) from a component pin' – a specific verb and resource. It clearly distinguishes from siblings like no_connect_pin (adds flags) and list_schematic_no_connects (lists flags) by focusing on removal. Additional detail about stacked duplicates clarifies the exact scope of removal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool to remove no-connect flags from a pin, and notes that repeated no_connect_pin calls stack duplicates, which this clears in one go. It does not explicitly name alternatives or when-not cases, but the implied usage compared to sibling tools is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_sheet_pinA
Destructive

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.
NameRequiredDescriptionDefault
pin_nameYes
sheet_uuidYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true. The description adds the context that schematic_path is optional and falls back to a configured default. However, it does not disclose side effects or failure behavior, so beyond annotations it offers only minimal extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: one purpose sentence followed by a concise Args list. Every sentence adds value, and the structure is front-loaded with the primary action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the output schema exists, so return values are likely covered. The description explains all parameters and the default path behavior. Missing are potential failure conditions or idempotency notes, but these are not critical given the simplicity and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description's Args section clearly explains each parameter: sheet_uuid is the sheet's UUID, pin_name is the pin to remove, and schematic_path is the optional path to the parent .kicad_sch file with a default when omitted. This fully compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Remove a pin from a hierarchical sheet block' – a clear verb+object. It distinguishes from sibling removal tools like remove_hierarchical_label or remove_component by specifying 'sheet pin'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. It only mentions the optional schematic_path parameter and its default behavior. No exclusions or alternative tool references are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_textA
Destructive

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.
NameRequiredDescriptionDefault
xNo
yNo
textYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses critical behavioral details: it warns that without filters it removes ALL texts with matching content, and specifies the 0.1mm positional tolerance. This is exactly the kind of context that helps an agent understand the tool's destructiveness and matching logic.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-sentence purpose, a behavior explanation with conditional logic, and a concise Args list. Every sentence adds value, and the most important information (remove all vs filtered) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters and conditional behavior, the description covers all parameters, the positional filtering logic, and the optional default for schematic_path. An output schema exists, so return values need not be described, and the description is sufficient for an agent to invoke the tool safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description's Args section explains each parameter: text is the content to match, x/y are optional position filters, and schematic_path is the path with a default. It also adds the positional tolerance in the prose, providing meaning beyond the schema's bare types and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Remove text annotation(s) by content, optionally filtered by position.' This uses a specific verb and resource, and distinguishes it from sibling tools like remove_label by targeting 'text annotations' specifically. It also explains the conditional filtering behavior, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: it can either remove all texts with matching content or only those matching both content and position. However, it does not explicitly mention alternatives or when not to use it (e.g., for labels use remove_label), so it falls short of a 5 but is still well above minimal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_tracesA
Destructive

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.
NameRequiredDescriptionDefault
layerNo
x_maxNo
x_minNo
y_maxNo
y_minNo
net_nameNo
pcb_pathNo

Output Schema

NameRequiredDescription
netYes
layerYes
traces_removedYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds important behavioral context: it does not remove vias, and it requires at least one filter. It also specifies units (mm) for the bounding box parameters. However, it does not discuss irreversibility or file saving implications, which the destructive annotation partially covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It opens with a clear one-sentence purpose, states the filter requirement, then presents a compact Args list. There is no redundant or unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters and a schema coverage of 0%, the description covers all inputs thoroughly. It also includes a constraint and notes about vias. The presence of an output schema handles return value documentation. Minor omissions include edge-case behavior (e.g., no matching traces), but overall it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides zero descriptions for parameters (0% coverage). The description compensates fully with an Args section that explains each parameter: net_name, layer (with examples like 'F.Cu'), bounding box edges (in mm), and pcb_path (optional with default behavior). This completely addresses parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's function with a specific verb and resource: 'Remove trace segments matching the given filters.' It also explicitly notes 'Does not remove vias,' which differentiates it from other removal tools like remove_label, remove_wire, and remove_footprint that operate on different PCB elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by explaining the filters and stating 'At least one filter (net_name, layer, or bounding box) is required.' It also gives an exclusion ('Does not remove vias'), but it does not explicitly name alternative tools for handling vias or other objects, so it lacks explicit alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_wireA
Destructive

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.
NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint=true), and the description adds valuable behavior: 'Matches wires with endpoints within 0.1mm tolerance (in either order)'. This discloses the matching logic, which is beyond the annotations and helps predict tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-line purpose, a matching rule, a usage pointer, and a clear Args block. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (not shown), return format need not be described. The description covers the matching tolerance, the prerequisite listing, and the optional path parameter. It omits potential edge cases like no-match behavior, but for a targeted removal tool it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no parameter descriptions in schema), so the description fully compensates. The Args block provides meaningful definitions for all parameters: x1/y1 as Start X/Y, x2/y2 as End X/Y, and schematic_path with its default behavior. This goes well beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Remove a wire segment by its endpoint coordinates' with a specific verb and resource, clearly distinguishing it from other remove_* tools (component, label, junction). It also adds matching tolerance and order flexibility, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'Use list_schematic_wires to get wire coordinates first', providing a clear prerequisite and workflow. It does not explicitly name alternatives or exclusions, but the specificity of the tool and the prerequisite make when-to-use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_sheet_pagesA
Destructive

Put 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 positive whole number no other sheet holds. A sheet whose instance entry
was written at its own path, as earlier versions of the tools did, has it moved to the path
KiCad reads. A root older than format 20221110, which keeps every page in its own
sheet_instances table, is refused.

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.
NameRequiredDescriptionDefault
page_orderYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, but the description earns real credit beyond them: it explains that page numbers are rewritten while blocks stay put, that existing custom labels like 'Intro' are preserved, and that conflicting/duplicate labels trigger renumbering from the lowest unused positive integer. It also discloses a silent migration of mis-pathed instance entries, which is exactly the kind of side effect an agent needs warned about before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary action and ordering rule, then progressively narrower caveats. The third sentence is dense and slightly run-on, packing label preservation, renumbering fallback, and instance-path migration together, but every sentence still carries operational content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with an output schema, the description covers preconditions, side effects, refusal cases, and ordering semantics; the returned numbers need not be described since the output schema exists. An agent has enough to decide and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the Args block carries the burden — it identifies page_order as sheet UUIDs in desired order and schematic_path as the root .kicad_sch with an optional default. The body additionally explains partial-list behavior (unlisted sheets keep current order), which the schema cannot convey. Minor gap: no guidance on invalid or duplicate UUIDs, which matters given destructiveHint=true.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Put hierarchical sheets in the page order given' — and immediately defines the resulting ordering semantics (listed sheets first, then the rest unchanged). This is clearly distinct from siblings like move_hierarchical_sheet or modify_hierarchical_sheet, which an agent could otherwise confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit calling context: 'Call it on the root schematic', notes that sub-sheet blocks are refused, and lists two refusal conditions (own-path instance entries handled via migration, root older than format 20221110 refused). It stops short of naming a sibling alternative for reordering within a non-root sheet, so it is strong but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_drcA
Idempotent

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.
NameRequiredDescriptionDefault
pcb_pathNo
output_dirNo

Output Schema

NameRequiredDescription
noteNo
sourceYes
violationsYes
kicad_versionYes
violation_countYes
unconnected_countYes
unconnected_itemsYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and readOnlyHint=false, but the description safely adds that it returns a structural report with violation lists and coordinates, and mentions it writes a report file to output_dir. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded, with a clear purpose statement and parameter explanation. No redundant content, though the return value mention is somewhat vague.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists rings, the description sufficiently covers the output nature, but it omits any prerequisites (e.g., PCB must exist, valid path) and does not specify what happens when violations are found vs. none. It could also mention the default output directory resolution more precisely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are explained in the description (path to .kicad_pcb file and directory for report), adding meaning beyond the schema which has only defaults. The description clarifies the file type and default behavior, though it could specify output file naming.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a Design Rules Check (DRC) on a PCB, which is specific and unambiguous. It distinguishes from similar tools like run_erc (electrical rules check) by explicitly naming DRC, and from other PCB-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes both arguments are optional and explains their defaults, but provides no guidance on when to use this tool versus alternatives like run_erc or check_placement. No conditions or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_ercA
Idempotent

Run 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 item's position is in
millimetres (mm) in sheet coordinates, the numbers get_pin_positions prints.
The report file saved in output_dir is kicad-cli's own.

Args:
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
    output_dir: Directory for report file (default: beside the file ERC runs on).
        Optional; omit to use the configured default.
    project_path: Path to .kicad_pro file; the project whose hierarchy to look in.
        Refused when no sheet of it uses the file.
NameRequiredDescriptionDefault
output_dirNo
project_pathNo
schematic_pathNo

Output Schema

NameRequiredDescription
noteNo
sourceYes
violationsYes
kicad_versionYes
violation_countYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that a run with no report raises and leaves output_dir unchanged, that certain sheets are refused, and that the report file in output_dir is kicad-cli's own format. Those are non-obvious behaviors the annotations do not cover. Return-format detail is somewhat redundant with the output schema but not contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and key constraints are front-loaded, but the hierarchy paragraph is dense and awkwardly worded ("those of every use of it under every top-level sheet the project lists"), forcing re-reading. The Args block duplicates some of the body's hierarchy content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with an output schema, the description need not restate return values, and it still adds useful context (positions in mm matching get_pin_positions). The combination of annotations, output schema, and the hierarchy/refusal rules leaves little an agent needs that is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does: each of the three optional params is explained, including defaults ("omit to use the configured default", "beside the file ERC runs on") and the refusal condition for project_path. Format/syntax details for paths are implied rather than spelled out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a specific verb and resource ("Run Electrical Rules Check (ERC) on a schematic"), which is distinguishable from the PCB counterpart run_drc. It never explicitly names the alternative tools, but the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives real operational guidance: sub-sheets are checked from the project root, a sheet below a non-root top-level sheet is refused, and the caller is told to instead run_erc on that top-level sheet. That is a concrete when-to-use/when-refused rule. It stops short of contrasting with validate_hierarchy or run_drc.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_jobsetA
Idempotent

Run 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
NameRequiredDescriptionDefault
jobset_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses a genuinely non-obvious behavior: kicad-cli receives a copy of the jobset, never the original, because it rewrites or deletes a jobset it cannot parse — which is exactly why destructiveHint=false is safe. It also defines failure semantics (error when nothing ran or a job failed) and says the error carries kicad-cli's counts. That is real behavioral context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then scoping and safety behavior, then args. Every sentence carries information; the only slight redundancy is restating the copy behavior twice ('never the file' after explaining the copy).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers scoping, mutation safety, and error behavior. The remaining gap is edge-case handles (what happens if the folder contains zero or multiple .kicad_pro files), which an agent might want before invoking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the schema only types jobset_path as a string, so the description must carry the meaning — and it does, identifying it as a path to a .kicad_jobset file. That is the key disambiguation an agent needs, though no format or validation detail is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — run a KiCad jobset file, executing every output it defines — which is clearly distinct from the single-artifact export_* siblings. It does not explicitly name those alternatives, but the scope (all outputs defined by a jobset) makes the boundary inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies useful operating context (the jobset runs against the one .kicad_pro in its own folder, and relative output folders resolve against that folder), but never states when to pick this over the individual export_* tools or what prerequisites (project layout, kicad-cli availability) must hold. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
keyYes
valueYes
referenceYes
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With all annotation hints false, the description carries the full burden and does well. It discloses that missing properties are created, that Reference/Value/Footprint are mirrored into symbol instances and the root symbol_instances table, and that renaming happens by setting key='Reference'. It also warns about the .kicad_pro dependency for root-table updates, which is valuable behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: the core action is front-loaded, followed by the important side-effect paragraph, then a compact Args list. Every sentence adds information relevant to correct invocation, and the length is justified by the mirrored-table behavior it explains.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter property setter with an output schema, the description covers the operation, creation semantics, cross-table effects, project-file dependency, and parameter meanings. It does not need to describe return values because an output schema exists, and it provides enough detail for an agent to select and invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The Args block adds concrete semantics for all four parameters with examples ('R1', 'MPN', 'Tolerance', 'Value') and notes that schematic_path is optional. It does not enumerate every possible property key or value-formatting rule, but for an open-ended property setter that is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource action: 'Set any property on a placed component, or rename it.' It also clarifies that missing properties are created, and the reference to renaming via key='Reference' distinguishes it from generic setters. The tool is clearly differentiated from sibling placement/label/PCB tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: it modifies placed component properties and explains the difference between working with a .kicad_pro versus a loose .kicad_sch. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
nameYes
netsYes
pcb_pathNo
via_sizeNo
clearanceNo
via_drillNo
track_widthNo

Output Schema

NameRequiredDescription
net_classYes
clearance_mmYes
nets_assignedYes
track_width_mmYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that it edits the .kicad_pro project file alongside the board, a key side effect, and explicitly states that pcbnew is not required. It also explains that None parameters use defaults. These details add significant context beyond the sparse annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a well-organized docstring that front-loads purpose, then provides behavior and an Args breakdown. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, behavior, file modifications, prerequisites (no pcbnew), and all parameters. Since an output schema exists, return values are already covered. This is complete for a tool with moderate complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden. The Args section explains all 7 parameters, including units (mm), the meaning of None (use default), and the pcb_path default behavior. This adds clear semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Create or update a net class with design rules and assign nets,' which clearly states the verb and resource. It uniquely identifies the tool's purpose among siblings by focusing on net class management, which no other sibling tool handles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (to create/update net classes and assign nets) and notes that pcbnew is not required, which is a practical guideline. However, it does not explicitly mention alternatives or when not to use, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
sizeYes
widthNo
heightNo
portraitNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no safety profile (all flags false), so the description carries the full burden. It explains parameter effects (portrait swap, custom size) and the optional schematic_path default, but does not disclose that the tool modifies the schematic file, what happens if the file doesn't exist, or whether the change is persistent. This leaves key behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single purpose sentence followed by a structured Args list. Each line adds necessary information without redundancy, making it easy to scan and parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters, conditional requirements, and an output schema present, the description covers parameter semantics well. However, it omits broader context such as file modification behavior, error conditions, and relationship to other schematic operations. It is adequate for calling the tool correctly but not fully complete for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameter descriptions (0% coverage), so the description fully compensates. It lists valid size values, specifies units (mm), marks width/height as conditionally required, explains portrait behavior, and clarifies the optional schematic_path. This is far richer than the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states "Set the schematic page/sheet size" with a specific verb and resource, making the tool's purpose unambiguous. It clearly distinguishes from sibling tools like set_trace_width and set_net_class.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed parameter-level usage instructions (e.g., width/height required when size='User', portrait swaps dimensions), but it does not explicitly state when to use this tool versus alternatives or mention prerequisites like file existence. Usage is implied by the name and description, but not explicitly contextualized.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.
NameRequiredDescriptionDefault
layerNo
widthYes
x_maxNo
x_minNo
y_maxNo
y_minNo
net_nameNo
pcb_pathNo

Output Schema

NameRequiredDescription
netYes
new_width_mmYes
traces_modifiedYes

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide minimal guidance (all hints false), so the description carries the burden. It states the action (change width) and filters but does not disclose what happens when no traces match, whether the operation is reversible, or any side effects on the board. It only mentions optional pcb_path. This leaves significant behavioral ambiguity for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact docstring with a clear opening sentence and a structured Args list. Every line provides necessary information without fluff, and the required filter constraint is highlighted. This is well organized and appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core operation, prerequisites, and all parameter meanings, and the output schema likely handles return values. However, it omits edge-case behavior such as when no filters match or multiple traces are affected, and lacks any note about the operation's scope within the PCB context. Given the number of parameters and mutation nature, it is reasonably complete but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions cover 0% of parameters, so the description must fully document them. It does, explaining width units (mm), filter semantics for net_name, layer, and bounding box coordinates, and pcb_path optional behavior. Each parameter receives a concise yet meaningful explanation, making this a strong compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool changes the width of existing traces, using a specific verb and resource. It distinguishes from sibling tools like add_trace, remove_traces, and list_pcb_traces by focusing on width modification, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes that at least one filter is required, providing a key usage constraint. It does not explicitly compare to sibling tools or list when to prefer this tool over alternatives, such as using add_trace for new traces or remove_traces for deletion. This is a moderate gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trace_hierarchical_netA
Read-onlyIdempotent

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.
NameRequiredDescriptionDefault
net_nameYes
schematic_pathNo

Output Schema

NameRequiredDescription
net_nameYes
connectionsYes
sheets_touchedYes
connection_countYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it traverses hierarchical pins/labels and supports an optional path, but it does not disclose behaviors for missing nets, partial matches, or output shape beyond schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence for purpose and a short Args list. It front-loads the key action and resource, with no redundant phrasing or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, an output schema exists, and annotations cover safety, the description adequately covers purpose and parameters. It could add more context on expected use cases or limitations, but the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% coverage (no property descriptions), but the description's Args section fully explains both parameters: net_name as the net/label name to trace, and schematic_path as the root .kicad_sch file path with a default fallback. This completely compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb 'trace' with resource 'net across the hierarchy' and explicitly mentions 'following hierarchical pins and labels', which clearly distinguishes it from sibling list functions like list_cross_sheet_nets or validate_hierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for tracing a net's path through hierarchy but does not provide explicit when-to-use guidance or contrasts with alternatives (e.g., list_hierarchy, list_cross_sheet_nets). It's clear enough for basic use but lacks exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 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 reference and value
in its (fp_text reference|value ...), and the update is refused when one holds %V or
%R, which KiCad reads there as a variable. A changed
footprint assignment swaps the footprint as KiCad's exchange does
(pcbnew/pcb_edit_frame.cpp:2346-2587 at 9.0.8): it keeps its position,
angle and side, its texts turned with it as the exchange turns them
(SetOrientation, then on a KiCad 10 board KeepUpright on those it pairs
with old ones), and its uuid, its pads' (by number; on a KiCad 10 board
only a number each footprint holds once) and its fields' (by name), so a
group still finds it. Off the quarter turns a swapped footprint reads as
KiCad's exchange leaves it without matching pcbnew's save byte for byte:
footprint-relative coordinates stay as the library writes them where
pcbnew re-derives them through two RotatePoint roundings, an fp_rect stays
where pcbnew writes an fp_poly, and arc mid points stay as written. A
locked footprint is not swapped
(skipped: footprint_locked), nor is one whose new footprint carries what
this tool cannot move or flip (skipped: footprint_unsupported); either
still takes the symbol's value, fields and nets. A new footprint carrying
what this tool cannot move is not added (skipped: footprint_unsupported).
Stale board footprints are reported, and removed only with delete_stale
(a locked one, in any spelling KiCad reads, never is, and neither is one
marked board only: KiCad's update keeps both). 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.
A pad whose net did not change is left as it is, and one that gains a net
gets it where KiCad's writer puts it. A net that left the schematic goes to
no net with everything on it, written as the board's format writes no net,
unless a pad of a footprint that stays on the board is still on it (a stale
footprint that is kept: delete_stale off, or locked, or board only); such a
net keeps its row and everything on it. Segments, arcs and vias sent to no
net are counted in orphaned_tracks, zones in orphaned_zones, and copper
shapes are named in warnings. Nothing on a renamed net is moved to its new
name: it goes to no net with the rest, or stays on the old net while a kept
pad holds it.

What KiCad's own update copies from the symbol follows it here, with
two exceptions named below. The Value. Every other symbol field, as hidden
text on the fabrication layer of the footprint's side: Datasheet and
Description are updated where the library footprint put them, a new field
is added at the footprint's origin at the footprint's own angle (mirrored
on the back), and a field that left the symbol stays on the footprint
(KiCad keeps a footprint's library fields the same way, and text the
user may have placed is not an import's to remove). The symbol's
footprint filters, as KiCad's (property ki_fp_filters ...). The DNP and
"In BOM" boxes, set and cleared on the footprint's attributes; on a
KiCad 10 netlist "Exclude from position files" too, while on KiCad 9,
whose netlist has no such marker, that flag stays the board's own, as
the mounting type, board_only and the courtyard choice always do. The
sheet name and file, and the path that links the footprint to its
symbol. A symbol with "On board" unticked is never placed and is listed
in excluded_from_board; a footprint it left behind is reported stale like
any other. Not copied: the Component Class field, which KiCad assigns as
a component class rather than a field (dropped here), and KiCad 10's
variant overrides, which are not applied. Existing footprints whose
fields, filters, flags or sheet linkage moved are listed in
fields_updated; a second run that changes nothing writes nothing.

A footprint's library nickname is resolved the way KiCad resolves it:
the project's own fp-lib-table first (beside the .kicad_pro, or beside
the board or the schematic when none is named), then .pretty directories
beside the board and the schematic, then KICAD_FP_LIB, then the user's
global fp-lib-table together with the libraries the Plugin and Content
Manager installed, then KiCad's stock footprints. ${KIPRJMOD}, the
variables of Preferences > Configure Paths (kicad_common.json), the
${KICAD*_3RD_PARTY} and ${KICAD*_FOOTPRINT_DIR} families and the other
KiCad path variables expand as KiCad expands them: the environment
first, then the configured value, then KiCad's own default. A nickname
none of those know is reported in skipped as footprint_lib_not_found.
place_footprint resolves through the same code, so a hand-placed part
and an imported one resolve to the same file.

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, except
        those marked board only
    project_path: Path to .kicad_pro for explicit root resolution (sub-sheets)
NameRequiredDescriptionDefault
pcb_pathNo
delete_staleNo
project_pathNo
schematic_pathNo

Output Schema

NameRequiredDescription
addedYes
statusYes
skippedYes
warningsYes
nets_addedYes
pads_boundYes
fpid_changedYes
nets_removedYes
stale_removedYes
value_updatedYes
fields_updatedYes
orphaned_zonesYes
orphaned_tracksYes
stale_footprintsYes
excluded_from_boardYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, openWorldHint=false), it discloses skipped reasons (footprint_locked, footprint_unsupported, footprint_lib_not_found), the byte-preserving write, that a no-op second run writes nothing, that locked and board-only footprints are never deleted, and that zones require a follow-up fill. This is substantial context; the delete_stale removal capability is fully disclosed, though destructiveHint=false is a loose fit for a tool that can remove footprints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded, but the body then runs hundreds of words into implementation trivia (RotatePoint roundings, fp_rect vs fp_poly, arc midpoint handling, source-file line references) that an agent does not need to select or invoke the tool. The Args section is buried at the very end, so the essential invocation data is hard to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A separate output schema exists, so the description need not explain return fields, yet it still names diagnostics such as skipped, fields_updated, excluded_from_board, orphaned_tracks, orphaned_zones, and warnings. Prerequisites, follow-up steps, and failure modes are all covered; only invalid-path/error behavior is left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and the Args block does so for all four parameters: schematic_path and pcb_path explain defaults and creation-if-missing, delete_stale explains stale removal and its exclusions, and project_path explains root resolution for sub-sheets. project_path remains terse, but the other three are well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states an exact verb and resource and names the KiCad command it mirrors, making it immediately distinguishable from siblings such as place_footprint, move_footprint, and fill_zones. The body reinforces the scope by naming companion tools (fill_zones, list_pcb_nets), so an agent can tell what this tool is for without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly situates the operation in a workflow: zones are NOT refilled so fill_zones must run afterward, net names are read with list_pcb_nets, and kicad-cli is required. It does not explicitly state when not to use it or name an alternative sync tool, but the context for invocation is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upgrade_footprint_libA
Destructive

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. 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 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.
NameRequiredDescriptionDefault
footprint_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the `<name>.pretty.bak` backup, that the backup is singular and overwritten every run, that only content-changed files are written, that each file is atomic but the library is not a transaction, and what a mid-run interruption leaves behind. That is exactly the mutation-risk context the agent needs and the annotations only gesture at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first line and nearly every following sentence carries operative detail (backup semantics, atomicity, partial failure). It is still prose-heavy for a one-parameter tool, with some editorializing ('as it should') that could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation; the description instead covers durability, rollback (the .bak file), granularity of writes, and non-transactional failure modes. For a destructive one-parameter migration tool, nothing an agent needs to call it safely is missing except the required/optional conflict noted above.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it partly does: it states the parameter is a '.pretty library directory' and that a single .kicad_mod path is rejected. However it says the arg is 'Optional; omit to use the configured default', while the schema lists footprint_path as required — a direct conflict that leaves the agent unsure whether it may omit the path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Upgrade') plus specific resource ('a footprint library') to current KiCad format, and 'Rewrites every footprint in the library' pins down the exact effect. The 'footprint' qualifier cleanly separates it from the sibling upgrade_symbol_lib even though that tool is never named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real when-not conditions: a single .kicad_mod path is rejected, and so is a library that is or holds a link. It also steers the agent to an alternative ('Version control is still the better answer for a library you care about'), though it never names a sibling tool as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upgrade_symbol_libA
Destructive

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.
NameRequiredDescriptionDefault
symbol_lib_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the destructiveHint annotation by explaining atomicity, the backup file behavior, that exactly one backup exists, and that every run overwrites it. This gives the agent a clear picture of the upgrade's side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose and uses a structured Args section. Though somewhat narrative, the extra details about atomicity and backup behavior are valuable and earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers key operational concerns: destructive behavior, atomic replacement, backup semantics, and the parameter's default. Since an output schema exists, it need not describe return values, and the missing guidance around when to use this tool is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning by identifying symbol_lib_path as a .kicad_sym file and mentioning a configured default. However, it states the parameter is optional while the input schema marks it required, creating a direct contradiction that could mislead an agent into omitting it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence clearly states the tool's action and target: 'Upgrade a symbol library to current KiCad format.' This is specific and distinguishes it from the sibling upgrade_footprint_lib, which targets a different resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose statement implies when the tool should be used, but there is no explicit guidance about when to use it versus alternatives, nor any exclusions. The description focuses on behavior rather than usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_boardCheck every footprint already on the boardA
Read-onlyIdempotent

Validate 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.
NameRequiredDescriptionDefault
pcb_pathNo

Output Schema

NameRequiredDescription
statusYes
violationsYes
total_footprintsYes
board_edge_checkedYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful behavioral context beyond that: how keep-outs are interpreted (KiCad semantics, board coordinates, *.Cu layer sets) and the non-obvious rule that a footprint is never flagged by its own keep-outs, backed by a source citation. This is real disclosure the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in one sentence, followed by a focused semantics paragraph and an Args block. The code citation is dense but earns its place by justifying the self-keep-out rule. Slightly heavy for a one-parameter tool, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. The description covers the one parameter and the validation semantics it needs. It is nearly complete for a read-only validation tool, with only the exact invocation alternative to check_placement left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It documents the sole parameter's meaning, accepted file type (.kicad_pcb) and, importantly, that it is optional and defaults to a configured value — semantics the bare schema ('default: ""') does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource: 'Validate all footprint placements against keep-out zones and board edge.' The word 'all' and 'board' distinguish it from the single-placement sibling check_placement, which it explicitly references. It could state the board-wide scope even more sharply, but an agent can tell the two apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'all footprint placements' and the reference to check_placement, but there is no explicit when-to-use/when-not statement or a direct alternative routing. An agent must infer that this is the board-wide validation pass rather than a per-footprint check.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_hierarchyA
Read-onlyIdempotent

Validate 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 the entry KiCad reads at that instance, the root's
symbol_instances table on a root in KiCad 6's form, else the symbol's own (the units of
one multi-unit part share theirs); an instance with no entry reads the symbol's first
entry, else its Reference property. Past 4096 instances a "references_unchecked" note says
the rest went unchecked. Per file: the points where kicad-cli 9 drops part of a line that
KiCad's editor keeps.

Those are a junction strictly inside a wire or bus ("junction_inside_wire") and, in a file
kicad-cli 9 loads, a bus entry end strictly inside one ("bus_entry_inside_wire"); KiCad's
editor never saves either, and earlier versions of this package wrote both. kicad-cli 9
(ERC, netlist export, PCB update) cuts the line there: per line, "kept" is the stretch it
keeps and "dropped" the stretch it loses, cutting off whatever joins the line only along
that. "editor" says what KiCad 9's editor makes of it: it splits the line, keeping a
junction where three or more directions meet ("keeps_junction"), deleting it elsewhere
("deletes_junction"), and at a bus entry end placing none ("splits_wire"). A file stamped
past KiCad 9's format gets neither reading. The readings follow KiCad's source; whether
kicad-cli 9 loads the sheet at all is not checked. To fix one, make the call in its
"repair" as given: add_junctions at the point, which splits the line, or remove_junction.
Such an issue carries a "note" in place of a repair in two cases only: its sheet is one the
connectivity model refuses (a symbol or pin at an angle KiCad cannot load; no reading
either), or it is a bus entry end where KiCad allows no junction.

Per file too: the no-connect flags ("no_connect_off_pin") and wire ends
("wire_end_off_pin") at the point releases 0.5.8 to 0.20.1 gave a pin of a symbol at
rotation 90 or 270 with a mirror. They mirrored before rotating, so that point is the
pin's end reflected through the symbol's origin, and 0.20.1's no_connect_pin,
wire_pins_to_net and connect_pins wrote there (measured). Only a point where KiCad draws
no pin is checked. Each issue names the symbol ("reference"), the "pin", the point ("x",
"y") and where KiCad draws the pin ("pin_x", "pin_y"), and a wire end its "wire". Where
the old transform put several pins at the point, the issue lists them under "pins" in
place of those four, with a note and no repair, since which pin the flag or wire was
written for is not known. A flag is not reported where a sheet pin or a hierarchical label
is too; a wire end is not where an end of another item but a bus's lies on it, a flag and
the Net-(<ref>-<pin>) label connect_pins wrote there apart; neither is where any reader
may join it to a pin KiCad draws for the point already. A flag carries a note: no tool
removes one by its position, so delete it in KiCad's editor, then no_connect_pin flags the
pin. A wire end's "repair" is wire_pins_to_net with the one local label name on its net
that the tool accepts, planned first; else a note, with the plan's refusal or, where the
net has no single such name, the pin the wire reaches. Nothing is written.

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

Output Schema

NameRequiredDescription
issuesYes
statusYes
issue_countYes

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds a great deal beyond that: per-sheet versus per-instance versus per-file scoping, the 4096-instance cutoff producing 'references_unchecked', 'unreadable_file' handling that skips only that sheet, note-versus-repair semantics, and the explicit 'Nothing is written.' No contradiction with readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the body is roughly 500 words of dense run-on implementation detail: KiCad 6 symbol_instances table quirks, package versions 0.5.8 through 0.20.1, mirror-before-rotate transform math, and line-splitting semantics. Much of this belongs in output-schema documentation or a separate reference; for a one-parameter read-only check it buries the actionable content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is not required, yet the description still covers the full behavioral surface: every issue category, note-versus-repair conditions, and the no-write guarantee. Nothing an agent needs in order to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — the single property has no description — but the prose 'Args' block compensates: schematic_path is the root .kicad_sch, optional, defaulting to the configured default. That is exactly the missing meaning the schema lacks, though it adds no format/validation detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource: 'Validate a hierarchical schematic for common issues,' and the following paragraphs enumerate exactly what is checked (orphaned labels, direction mismatches, missing files, junction-inside-wire, no-connect off pin, etc.). It does not differentiate itself from nearby siblings such as run_erc or validate_board, so an agent must infer the boundary, but the purpose itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus alternatives: run_erc, validate_board, list_unconnected_pins and run_drc all overlap in the validation space, and none is mentioned. The description only describes what the tool inspects internally. 'Nothing is written' implies a read-only audit, but that is a behavioral fact, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wire_pins_to_netA

Put 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 bus, a sheet pin, a text variable, a copy of the pad on another sheet),
another part shares its reference, or every position is blocked. The
refusal lists every refused pin with a bracketed reason code such as
[names] or [touch], the obstacle, and a remedy. add_label and add_wires
check none of this, so they are no way around a refusal.

It places no PWR_FLAG: whether a net needs one depends on every driver on
the net, not on the pins in one call. Use add_power_symbol for that.

Args:
    pins: List of {"reference": "R1", "pin": "1"} dicts
    label_text: Net name (e.g. "GND", "VCC"), exactly as it should read: no surrounding
        spaces, no leading "/", no text variable ("${...}"), no bus syntax, not a KiCad
        auto name such as "Net-(R1-1)"
    direction: Stub direction: "auto" (away from the symbol), "left", "right", "up", "down"
    stub_length: Stub length in mm, a multiple of 1.27 up to 1000 (default 2.54)
    schematic_path: Path to .kicad_sch file. Optional; omit to use the configured default.
NameRequiredDescriptionDefault
pinsYes
directionNoauto
label_textYes
stub_lengthNo
schematic_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the annotations (which only carry generic safety hints): it discloses no junction is ever written, pins already on the net are left alone, the file is written once or not at all, and the exact refusal conditions with bracketed reason codes like [names]/[touch]. This is precisely the mutation/atomicity/auth context an agent needs beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary followed by tightly organized behavior, refusal, and Args sections; virtually no filler. It is long, but the length is largely justified by the tool's complexity, with only marginal redundancy in the refusal enumeration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity atomic wiring operation it covers the happy path, the branch behavior (label at stub end vs pin end), atomicity, and the full refusal contract. Since an output schema exists, it correctly does not need to describe return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description fully compensates: it spells out the pin dict shape, the strict label_text rules (no spaces, no leading '/', no '${...}', no bus syntax, not KiCad auto names), direction semantics ('auto' = away from symbol), and stub_length's multiple-of-1.27 / max-1000 constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a concrete verb+resource+scope: 'Put each listed pin on the net named label_text, or refuse and write nothing.' It is immediately distinguishable from siblings like add_wires, connect_pins, and add_label because it wires a whole pin list atomically to a named net.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes away from alternatives ('add_label and add_wires check none of this, so they are no way around a refusal') and defers one concern to a sibling ('Use add_power_symbol for that'). Clear context, but it never states a positive 'use this when' condition and gives no explicit exclusions beyond the refusal list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.21.1
    • Changedadd_sheet_pin1 field changed
      • addedInput schema / properties / side / enum
        Added value: +[
        +  "left",
        +  "right"
        +]
    • Changedcreate_sym_lib_table1 field changed
      • changedInput schema / $defs / LibTableEntry / description
        Previous value: -"One library row in a sym-lib-table."New value: +"One library row in a sym-lib-table: a nickname (not empty, none of a character below\nU+0020, a backslash, a colon or a double quote, and not one an earlier row has) and the\nlibrary's path."
  2. 2 tool updatesv0.21.0
    • Changedupdate_pcb_from_schematic3 fields changed
      • addedOutput schema / properties / excluded_from_board
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Excluded From Board",
        +  "type": "array"
        +}
      • addedOutput schema / properties / fields_updated
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Fields Updated",
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "added",
        -  "value_updated",
        -  "fpid_changed",
        -  "stale_footprints",
        -  "stale_removed",
        -  "nets_added",
        -  "nets_removed",
        -  "pads_bound",
        -  "orphaned_tracks",
        -  "orphaned_zones",
        -  "skipped",
        -  "warnings"
        -]New value: +[
        +  "status",
        +  "added",
        +  "value_updated",
        +  "fpid_changed",
        +  "fields_updated",
        +  "excluded_from_board",
        +  "stale_footprints",
        +  "stale_removed",
        +  "nets_added",
        +  "nets_removed",
        +  "pads_bound",
        +  "orphaned_tracks",
        +  "orphaned_zones",
        +  "skipped",
        +  "warnings"
        +]
    • Changedwire_pins_to_net2 fields changed
      • removedInput schema / properties / auto_pwr_flag
        Removed value: -{
        -  "default": true,
        -  "title": "Auto Pwr Flag",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / direction / enum
        Added value: +[
        +  "auto",
        +  "left",
        +  "right",
        +  "up",
        +  "down"
        +]
  3. 10 tool updatesv0.20.1
    • Changedautoroute_pcb1 field changed
      • changedInput schema / properties / num_threads / default
        Previous value: -4New value: +1
    • Changedexport_bom1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
    • Changedexport_gerbers1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
    • Changedexport_ipc25811 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
    • Changedexport_netlist1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
    • Changedexport_pcb1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
    • Changedexport_positions1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
    • Changedfill_zones1 field changed
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedplace_footprint2 fields changed
      • addedInput schema / properties / footprint
        Added value: +{
        +  "default": "",
        +  "title": "Footprint",
        +  "type": "string"
        +}
      • addedInput schema / properties / library
        Added value: +{
        +  "default": "",
        +  "title": "Library",
        +  "type": "string"
        +}
    • Changedrun_drc1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Note"
        +}
  4. 14 tool updatesv0.17.1
    • Changedadd_global_label2 fields changed
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedadd_hierarchical_label2 fields changed
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedadd_label2 fields changed
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedadd_power_symbol2 fields changed
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedadd_text2 fields changed
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedauto_place_decoupling_cap2 fields changed
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedcheck_placement1 field changed
      • removedInput schema / properties / rotation
        Removed value: -{
        -  "default": 0,
        -  "title": "Rotation",
        -  "type": "number"
        -}
    • Changedexport_3d1 field changed
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "step",
        +  "stl",
        +  "glb",
        +  "render"
        +]
    • Changedexport_netlist1 field changed
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "kicadxml",
        +  "kicadsexpr",
        +  "cadstar",
        +  "orcadpcb2",
        +  "spice",
        +  "spicemodel",
        +  "pads",
        +  "allegro"
        +]
    • Changedexport_pcb2 fields changed
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "pdf",
        +  "svg",
        +  "dxf"
        +]
      • addedInput schema / properties / output_units / enum
        Added value: +[
        +  "in",
        +  "mm"
        +]
    • Changedexport_schematic1 field changed
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "pdf",
        +  "svg",
        +  "dxf"
        +]
    • Changedmove_component1 field changed
      • changedInput schema / properties / rotation / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      0,
        +      90,
        +      180,
        +      270
        +    ],
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedplace_component3 fields changed
      • addedInput schema / properties / mirror / enum
        Added value: +[
        +  "",
        +  "x",
        +  "y"
        +]
      • addedInput schema / properties / rotation / enum
        Added value: +[
        +  0,
        +  90,
        +  180,
        +  270
        +]
      • changedInput schema / properties / rotation / type
        Previous value: -"number"New value: +"integer"
    • Changedrun_erc1 field changed
      • addedOutput schema / description
        Added value: +"ERC report. ``note`` carries any remarks, space-joined.\n\nIt is deliberately not single-purpose: it began as \"ERC was redirected to\nthe root sheet\" and now also explains a missing sym-lib-table. Test for the\nremark you care about rather than for the field being empty."
  5. 12 tool updatesv0.11.0
    • Changedadd_copper_zone4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "PointSpec": {
        +    "description": "A bare coordinate: junction positions and zone polygon corners.",
        +    "properties": {
        +      "x": {
        +        "title": "X",
        +        "type": "number"
        +      },
        +      "y": {
        +        "title": "Y",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "x",
        +      "y"
        +    ],
        +    "title": "PointSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / corners / items / $ref
        Added value: +"#/$defs/PointSpec"
      • removedInput schema / properties / corners / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / corners / items / type
        Removed value: -"object"
    • Changedadd_hierarchical_sheet4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "SheetPinSpec": {
        +    "description": "A hierarchical sheet pin and its direction.",
        +    "properties": {
        +      "direction": {
        +        "title": "Direction",
        +        "type": "string"
        +      },
        +      "name": {
        +        "title": "Name",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "direction"
        +    ],
        +    "title": "SheetPinSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / pins / items / $ref
        Added value: +"#/$defs/SheetPinSpec"
      • removedInput schema / properties / pins / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / pins / items / type
        Removed value: -"object"
    • Changedadd_junctions4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "PointSpec": {
        +    "description": "A bare coordinate: junction positions and zone polygon corners.",
        +    "properties": {
        +      "x": {
        +        "title": "X",
        +        "type": "number"
        +      },
        +      "y": {
        +        "title": "Y",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "x",
        +      "y"
        +    ],
        +    "title": "PointSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / points / items / $ref
        Added value: +"#/$defs/PointSpec"
      • removedInput schema / properties / points / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / points / items / type
        Removed value: -"object"
    • Changedadd_keepout_zone4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "PointSpec": {
        +    "description": "A bare coordinate: junction positions and zone polygon corners.",
        +    "properties": {
        +      "x": {
        +        "title": "X",
        +        "type": "number"
        +      },
        +      "y": {
        +        "title": "Y",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "x",
        +      "y"
        +    ],
        +    "title": "PointSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / corners / items / $ref
        Added value: +"#/$defs/PointSpec"
      • removedInput schema / properties / corners / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / corners / items / type
        Removed value: -"object"
    • Changedadd_symbol5 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "RectangleSpec": {
        +    "description": "A symbol body rectangle. ``fill`` defaults to \"background\".",
        +    "properties": {
        +      "fill": {
        +        "title": "Fill",
        +        "type": "string"
        +      },
        +      "x1": {
        +        "title": "X1",
        +        "type": "number"
        +      },
        +      "x2": {
        +        "title": "X2",
        +        "type": "number"
        +      },
        +      "y1": {
        +        "title": "Y1",
        +        "type": "number"
        +      },
        +      "y2": {
        +        "title": "Y2",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "x1",
        +      "y1",
        +      "x2",
        +      "y2"
        +    ],
        +    "title": "RectangleSpec",
        +    "type": "object"
        +  },
        +  "SymbolPinSpec": {
        +    "description": "One pin on a new symbol. ``type`` is str, not Literal, so add_symbol's\nown error still names the offending pin index and lists the valid values.",
        +    "properties": {
        +      "length": {
        +        "title": "Length",
        +        "type": "number"
        +      },
        +      "name": {
        +        "title": "Name",
        +        "type": "string"
        +      },
        +      "number": {
        +        "title": "Number",
        +        "type": "string"
        +      },
        +      "rotation": {
        +        "title": "Rotation",
        +        "type": "number"
        +      },
        +      "type": {
        +        "title": "Type",
        +        "type": "string"
        +      },
        +      "x": {
        +        "title": "X",
        +        "type": "number"
        +      },
        +      "y": {
        +        "title": "Y",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "number",
        +      "name",
        +      "type"
        +    ],
        +    "title": "SymbolPinSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / pins / items / $ref
        Added value: +"#/$defs/SymbolPinSpec"
      • removedInput schema / properties / pins / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / pins / items / type
        Removed value: -"object"
      • changedInput schema / properties / rectangles / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "$ref": "#/$defs/RectangleSpec"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedadd_wires4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "WireSpec": {
        +    "description": "One wire segment's two endpoints.",
        +    "properties": {
        +      "x1": {
        +        "title": "X1",
        +        "type": "number"
        +      },
        +      "x2": {
        +        "title": "X2",
        +        "type": "number"
        +      },
        +      "y1": {
        +        "title": "Y1",
        +        "type": "number"
        +      },
        +      "y2": {
        +        "title": "Y2",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "x1",
        +      "y1",
        +      "x2",
        +      "y2"
        +    ],
        +    "title": "WireSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / wires / items / $ref
        Added value: +"#/$defs/WireSpec"
      • removedInput schema / properties / wires / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / wires / items / type
        Removed value: -"object"
    • Changedautoroute_pcb1 field changed
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedcreate_sym_lib_table4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "LibTableEntry": {
        +    "description": "One library row in a sym-lib-table.",
        +    "properties": {
        +      "name": {
        +        "title": "Name",
        +        "type": "string"
        +      },
        +      "uri": {
        +        "title": "Uri",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "uri"
        +    ],
        +    "title": "LibTableEntry",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / entries / items / $ref
        Added value: +"#/$defs/LibTableEntry"
      • removedInput schema / properties / entries / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / entries / items / type
        Removed value: -"object"
    • Changedexport_3d11 fields changed
      • removedOutput schema / $defs
        Removed value: -{
        -  "ExportResult": {
        -    "properties": {
        -      "format": {
        -        "title": "Format",
        -        "type": "string"
        -      },
        -      "path": {
        -        "title": "Path",
        -        "type": "string"
        -      },
        -      "size_bytes": {
        -        "title": "Size Bytes",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "path",
        -      "size_bytes",
        -      "format"
        -    ],
        -    "title": "ExportResult",
        -    "type": "object"
        -  },
        -  "RenderExportResult": {
        -    "properties": {
        -      "format": {
        -        "title": "Format",
        -        "type": "string"
        -      },
        -      "height": {
        -        "title": "Height",
        -        "type": "integer"
        -      },
        -      "path": {
        -        "title": "Path",
        -        "type": "string"
        -      },
        -      "side": {
        -        "title": "Side",
        -        "type": "string"
        -      },
        -      "size_bytes": {
        -        "title": "Size Bytes",
        -        "type": "integer"
        -      },
        -      "width": {
        -        "title": "Width",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "path",
        -      "size_bytes",
        -      "format",
        -      "width",
        -      "height",
        -      "side"
        -    ],
        -    "title": "RenderExportResult",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / description
        Added value: +"`render` fills width, height and side; step, stl and glb do not."
      • addedOutput schema / properties / format
        Added value: +{
        +  "title": "Format",
        +  "type": "string"
        +}
      • addedOutput schema / properties / height
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Height"
        +}
      • addedOutput schema / properties / path
        Added value: +{
        +  "title": "Path",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/$defs/RenderExportResult"
        -    },
        -    {
        -      "$ref": "#/$defs/ExportResult"
        -    }
        -  ],
        -  "title": "Result"
        -}
      • addedOutput schema / properties / side
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Side"
        +}
      • addedOutput schema / properties / size_bytes
        Added value: +{
        +  "title": "Size Bytes",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / width
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Width"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "path",
        +  "format",
        +  "size_bytes"
        +]
      • changedOutput schema / title
        Previous value: -"export_3dOutput"New value: +"Model3dExportResult"
    • Changedexport_gerbers13 fields changed
      • removedOutput schema / $defs
        Removed value: -{
        -  "GerberExportResult": {
        -    "properties": {
        -      "count": {
        -        "title": "Count",
        -        "type": "integer"
        -      },
        -      "drill_count": {
        -        "default": 0,
        -        "title": "Drill Count",
        -        "type": "integer"
        -      },
        -      "drill_files": {
        -        "default": [],
        -        "items": {
        -          "type": "string"
        -        },
        -        "title": "Drill Files",
        -        "type": "array"
        -      },
        -      "files": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "title": "Files",
        -        "type": "array"
        -      },
        -      "format": {
        -        "title": "Format",
        -        "type": "string"
        -      },
        -      "path": {
        -        "title": "Path",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "path",
        -      "format",
        -      "files",
        -      "count"
        -    ],
        -    "title": "GerberExportResult",
        -    "type": "object"
        -  },
        -  "SingleGerberExportResult": {
        -    "properties": {
        -      "format": {
        -        "title": "Format",
        -        "type": "string"
        -      },
        -      "layer": {
        -        "title": "Layer",
        -        "type": "string"
        -      },
        -      "path": {
        -        "title": "Path",
        -        "type": "string"
        -      },
        -      "size_bytes": {
        -        "title": "Size Bytes",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "path",
        -      "size_bytes",
        -      "format",
        -      "layer"
        -    ],
        -    "title": "SingleGerberExportResult",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / description
        Added value: +"Single-layer mode names one file and fills size_bytes and layer.\n\nMulti-layer mode names the output directory and fills the drill fields."
      • addedOutput schema / properties / count
        Added value: +{
        +  "title": "Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / drill_count
        Added value: +{
        +  "default": 0,
        +  "title": "Drill Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / drill_files
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Drill Files",
        +  "type": "array"
        +}
      • addedOutput schema / properties / files
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Files",
        +  "type": "array"
        +}
      • addedOutput schema / properties / format
        Added value: +{
        +  "title": "Format",
        +  "type": "string"
        +}
      • addedOutput schema / properties / layer
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Layer"
        +}
      • addedOutput schema / properties / path
        Added value: +{
        +  "title": "Path",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/$defs/SingleGerberExportResult"
        -    },
        -    {
        -      "$ref": "#/$defs/GerberExportResult"
        -    }
        -  ],
        -  "title": "Result"
        -}
      • addedOutput schema / properties / size_bytes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Size Bytes"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "path",
        +  "format",
        +  "files",
        +  "count"
        +]
      • changedOutput schema / title
        Previous value: -"export_gerbersOutput"New value: +"GerberExportResult"
    • Changedexport_schematic10 fields changed
      • removedOutput schema / $defs
        Removed value: -{
        -  "ExportResult": {
        -    "properties": {
        -      "format": {
        -        "title": "Format",
        -        "type": "string"
        -      },
        -      "path": {
        -        "title": "Path",
        -        "type": "string"
        -      },
        -      "size_bytes": {
        -        "title": "Size Bytes",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "path",
        -      "size_bytes",
        -      "format"
        -    ],
        -    "title": "ExportResult",
        -    "type": "object"
        -  },
        -  "MultiFileExportResult": {
        -    "properties": {
        -      "count": {
        -        "title": "Count",
        -        "type": "integer"
        -      },
        -      "files": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "title": "Files",
        -        "type": "array"
        -      },
        -      "format": {
        -        "title": "Format",
        -        "type": "string"
        -      },
        -      "path": {
        -        "title": "Path",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "path",
        -      "format",
        -      "files",
        -      "count"
        -    ],
        -    "title": "MultiFileExportResult",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / description
        Added value: +"pdf and dxf name one file and fill size_bytes; svg names a directory."
      • addedOutput schema / properties / count
        Added value: +{
        +  "title": "Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / files
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Files",
        +  "type": "array"
        +}
      • addedOutput schema / properties / format
        Added value: +{
        +  "title": "Format",
        +  "type": "string"
        +}
      • addedOutput schema / properties / path
        Added value: +{
        +  "title": "Path",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/$defs/ExportResult"
        -    },
        -    {
        -      "$ref": "#/$defs/MultiFileExportResult"
        -    }
        -  ],
        -  "title": "Result"
        -}
      • addedOutput schema / properties / size_bytes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Size Bytes"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "path",
        +  "format",
        +  "files",
        +  "count"
        +]
      • changedOutput schema / title
        Previous value: -"export_schematicOutput"New value: +"SchematicExportResult"
    • Changedwire_pins_to_net4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "PinRefSpec": {
        +    "description": "A reference to a pin on a placed component.",
        +    "properties": {
        +      "pin": {
        +        "title": "Pin",
        +        "type": "string"
        +      },
        +      "reference": {
        +        "title": "Reference",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "reference",
        +      "pin"
        +    ],
        +    "title": "PinRefSpec",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / pins / items / $ref
        Added value: +"#/$defs/PinRefSpec"
      • removedInput schema / properties / pins / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / pins / items / type
        Removed value: -"object"
  6. 20 tool updatesv0.10.1
    • Addedexport_3d
    • Addedexport_bom
    • Addedexport_footprint_svg
    • Addedexport_gerbers
    • Addedexport_hierarchical_netlist
    • Addedexport_ipc2581
    • Addedexport_netlist
    • Addedexport_pcb
    • Addedexport_positions
    • Addedexport_schematic
    • Addedexport_symbol_svg
    • Addedget_version
    • Addedlist_unconnected_pins
    • Addedremove_no_connect
    • Addedrun_drc
    • Addedrun_erc
    • Addedrun_jobset
    • Addedupdate_pcb_from_schematic
    • Addedupgrade_footprint_lib
    • Addedupgrade_symbol_lib
  7. 89 tool updatesv0.9.1
    • First observedadd_copper_zone
    • First observedadd_global_label
    • First observedadd_hierarchical_label
    • First observedadd_hierarchical_sheet
    • First observedadd_junctions
    • First observedadd_keepout_zone
    • First observedadd_label
    • First observedadd_lib_symbol
    • First observedadd_pcb_line
    • First observedadd_pcb_text
    • First observedadd_power_symbol
    • First observedadd_sheet_pin
    • First observedadd_symbol
    • First observedadd_text
    • First observedadd_thermal_vias
    • First observedadd_trace
    • First observedadd_via
    • First observedadd_wires
    • First observedannotate_schematic
    • First observedauto_place_decoupling_cap
    • First observedautoroute_pcb
    • First observedcheck_placement
    • First observedconnect_pins
    • First observedcreate_project
    • First observedcreate_schematic
    • First observedcreate_sym_lib_table
    • First observedcreate_symbol_library
    • First observedduplicate_sheet
    • First observedfill_zones
    • First observedflatten_hierarchy
    • First observedget_board_info
    • First observedget_footprint_bounds
    • First observedget_footprint_info
    • First observedget_footprint_pads
    • First observedget_net_connections
    • First observedget_pin_positions
    • First observedget_schematic_summary
    • First observedget_sheet_info
    • First observedget_symbol_info
    • First observedget_symbol_instances
    • First observedget_symbol_pins
    • First observedis_root_schematic
    • First observedlist_cross_sheet_nets
    • First observedlist_hierarchy
    • First observedlist_lib_footprints
    • First observedlist_lib_symbols
    • First observedlist_pcb_footprints
    • First observedlist_pcb_graphic_items
    • First observedlist_pcb_layers
    • First observedlist_pcb_nets
    • First observedlist_pcb_traces
    • First observedlist_pcb_zones
    • First observedlist_schematic_bus_entries
    • First observedlist_schematic_components
    • First observedlist_schematic_global_labels
    • First observedlist_schematic_hierarchical_labels
    • First observedlist_schematic_junctions
    • First observedlist_schematic_labels
    • First observedlist_schematic_no_connects
    • First observedlist_schematic_sheets
    • First observedlist_schematic_wires
    • First observedmodify_hierarchical_label
    • First observedmodify_hierarchical_sheet
    • First observedmove_component
    • First observedmove_footprint
    • First observedmove_hierarchical_sheet
    • First observedno_connect_pin
    • First observedplace_component
    • First observedplace_footprint
    • First observedremove_component
    • First observedremove_dangling_tracks
    • First observedremove_footprint
    • First observedremove_hierarchical_label
    • First observedremove_hierarchical_sheet
    • First observedremove_junction
    • First observedremove_label
    • First observedremove_sheet_pin
    • First observedremove_text
    • First observedremove_traces
    • First observedremove_wire
    • First observedreorder_sheet_pages
    • First observedset_component_property
    • First observedset_net_class
    • First observedset_page_size
    • First observedset_trace_width
    • First observedtrace_hierarchical_net
    • First observedvalidate_board
    • First observedvalidate_hierarchy
    • First observedwire_pins_to_net

TDQS

A3.5/5.0

Scored across 109 tools

Disambiguation3/5

Most tools target distinct KiCad objects or actions, but several clusters overlap: export_netlist vs export_hierarchical_netlist, add_symbol vs add_lib_symbol, add_wires vs connect_pins vs wire_pins_to_net, and the footprint info/pad/bounds tools. The detailed descriptions help, but with 109 tools an agent still has to choose carefully among similar-sounding operations.

Naming Consistency4/5

Almost all tools use snake_case with a recognizable verb_noun pattern and clear domain prefixes such as schematic, pcb, and lib. Minor exceptions like no_connect_pin, is_root_schematic, and wire_pins_to_net are still readable and do not break the overall convention.

Tool Count1/5

109 tools is far beyond the practical 3-15 range; although KiCad is a broad domain, many tools are highly granular variants such as separate list_* calls for every schematic item type and separate export helpers. This creates a large discoverability and selection burden.

Completeness4/5

The surface covers most lifecycle workflows: schematic and PCB editing, ERC/DRC, hierarchy management, libraries, exports, and manufacturing outputs. However, there are dead ends such as adding PCB text, lines, zones, or vias without corresponding remove/modify tools, and no explicit footprint-library creation tool.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    An MCP server that enables AI assistants to analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code for KiCad projects.
    39
    174
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    KiCad MCP Pro is an MCP server for KiCad EDA workflows. It lets AI agents automate schematic and PCB tasks, ERC/DRC validation, DFM review, and manufacturing export.
    2,568 PyPI
    155
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI agents end-to-end control of KiCad 9+ for rule checks, manufacturing exports, production-readiness certification, and live PCB editor control.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for KiCad 10 that provides live PCB access, file-based schematic handling, symbol search, schematic generation from pinouts, and a Python scripting escape hatch.
    23
    2
    MIT