Skip to main content
Glama
ShamanAndrey

kicad-mcp-layer

by ShamanAndrey

kicad-mcp-layer

An AI layer for KiCad 10: a Model Context Protocol server that lets Claude Code, or any MCP client, work on KiCad designs.

It drives KiCad through three channels and says which one it is using:

Channel

Mechanism

Used for

cli

kicad-cli subprocess

ERC, DRC, netlists, BOM, renders, fabrication exports. Works with KiCad open or closed.

ipc

KiCad's official IPC API via kicad-python

The board open in the PCB editor. Edits land as undo steps.

file

Lossless edits of .kicad_sch and .kicad_pro

Schematics, which KiCad 10 exposes no API for.

The legacy SWIG pcbnew module is never used; a test enforces it.

This is the library half of kicad-ai-stack, the workspace it was built in. The stack adds the one-command setup (bootstrap.py, which clones this repository, builds its environment and registers the server with Claude Code) and the working rules for a session. Start there if you want the whole thing set up; start here if you want the server or the design package on their own.

What this is

Two layers on one core.

  • kicad_layer.design is the product. A board is Python data: parts from a catalogue, a signal table, circuits as pin-to-net statements, placement, saved copper. The KiCad files are build outputs, and KiCad's own ERC and DRC are the tests. Two boards live on it.

  • The MCP server is its check-and-view layer for Claude Code: checks, exports, renders, reviews, documentation and library search. That is the core tool tier, registered by default. The full tier adds the schematic and board edit tools and the routers.

A project holds only its data: sheets as circuits, placement, a Project, a routing plan for the pipeline in kicad_layer.routers, and the fabrication package from kicad_layer.design.fab. The whole authoring API is on one generated sheet, docs/design-api.md, so a session reads that instead of the source; python -m kicad_layer.design.inspect answers questions about a built board.

The routers (kicad_layer.routers) are frozen: fixes, not features. The intended loop routes by hand in KiCad and keeps the copper as data. tests/test_layers.py enforces the layering.

Related MCP server: KiCad MCP Pro

Status

Pre-alpha, built in the open. Done so far:

  • Rung 0: environment diagnostics, the capability matrix, project discovery, workspace confinement, read-only default mode.

  • Rung 1: every kicad-cli tool (ERC, DRC, netlist, trace, BOM, fabrication export, board render, schematic render).

  • Rung 2: reading the board open in KiCad's PCB Editor over the IPC API (summary, items, per-net statistics), with every failure classified as unreachable or rejected.

  • Writers: a lossless S-expression engine, a library loader, and schematic and board writers that generated a complete 89-LED board which passed ERC and DRC with zero findings (examples/hello_world).

  • Milestone 1: a full-text index of every library KiCad can see, including a project's own, with lib_search, sym_info, fp_info and lib_index.

  • Milestone 2: editing existing schematics losslessly. A concrete syntax tree keeps every untouched byte; edits are atomic, snapshotted, refused while KiCad holds the lock, and validated by ERC and a netlist comparison. Tools: sch_list_components, sch_get_symbol, sch_set_property, sch_add_component, sch_wire, sch_label, sch_mark, sch_delete, sch_annotate.

  • Milestone 3: editing boards. Live through KiCad's API as one undo step per operation, read back from KiCad; or losslessly in the file when the board is closed. A board seen live is never edited on disk. Tools: pcb_place_footprint, pcb_move_footprint, pcb_add_track, pcb_add_via, pcb_add_zone, pcb_refill_zones, pcb_delete_items, pcb_save. KiCad 10's own "create items from text" call is a stub, so live placement builds the footprint from the library file pad by pad.

  • Milestone 4: design review beyond DRC. review_board, review_schematic and review_project produce one report where every check says PASS, WARN, FAIL, INFO or UNVERIFIED with its evidence and the source of its limits: DRC and unrouted connections, zone fill state, parts outside the outline, manufacturability against JLCPCB's published limits, track widths on power nets, zone stitching, decoupling distance, footprints and values and annotation, power-net sources, and the honest state of SPICE. The first run on the Hello World found its vias below the fab's minimum annular ring, which is why the layer's default via is now 0.8 mm. The first run on a real project then caught the review itself: PWR_FLAGs never appear in the exported netlist, so the power-source check now follows KiCad's ERC rule instead. Checks are documented in docs/review-checks.md.

  • Writers, second round, for the first real product (a Compute Module 5 carrier): hierarchical schematics (sheet symbols with pins, hierarchical labels, per-sheet instance paths, multi-unit symbols), boards with any even number of copper layers, and project-local symbol and footprint libraries. A seven-sheet, four-layer project generated this way passes ERC with no findings; KiCad's own ERC and DRC are the tests.

  • Documentation layer: doc_fetch, doc_import, doc_list, doc_text and doc_page keep datasheets and reference designs in an indexed library under research/references with their source URL, date and hash, extract text per page, and render pages to images so pinouts, package drawings and tables can be read. When a site answers with a scripted download portal or refuses the plain client, an optional headless-Chromium tier (pip install "kicad-mcp-layer[browser]") loads the page and takes the download it offers; what still fails gets a classified error that says to save the file in a browser and import it.

  • Routing checks and parts: route_check measures every differential pair on a board (lengths, skew against the interface's limit, coupled share, class gap and width, layer changes) and the review carries it as diff_pairs; impedance_calc and stackup_info give closed-form estimates next to the fab's published geometries for JLCPCB's 4-layer stack-up; parts_search checks JLCPCB's assembly catalogue for LCSC codes and stock. The first real board's 28 pairs and 30 special parts went through them before routing started.

  • Routing: route_pairs routes differential pairs as coupled pairs (escapes planned and reserved for every pair first, a heading-aware search that never folds a pair back on itself, mitred offsets, a two-via crossover where P would land on the wrong side, tuning bumps for skew); stitch_planes drops a stub and via from every surface-mount pad on a plane net; autoroute hands the rest to FreeRouting through a Specctra DSN with the earlier copper protected and merges the session back. All three write a routes JSON next to the board rather than touching the board, so a design-as-code project re-applies it on every build. The first real board's 21 routed pairs came out with zero clearance errors; the residual skew sits on the pairs that needed a crossover.

  • Manufacturing package (milestone 5, PCBWay): kicad_layer.design.fab writes the Gerber and drill archive, the position file and a BOM in PCBWay's assembly layout from a finished build, and refuses a BOM line without a part number. The first real product ordered from it.

  • The design package became the product: kicad_layer.design holds a board as data (sheets described as circuits with a layout plan, a signal table that drives the module sheet and the root, a project with its rule set, placements, blocks) and the KiCad files are build outputs. A build writes the schematic, the project file with its constraints and net classes, the design rules, runs ERC, exports the netlist and checks every sheet against its own description and against a reference netlist, pin group for pin group. Fab rule sets for JLCPCB and AISLER (constraints, classes on the fab's published pair geometries, its own .kicad_dru rules), and review_board takes a fab name for its limits.

  • Hand layout on a generated schematic: for a board placed and routed by a person in KiCad, the build never writes the board. build.py --seed writes its first import instead of KiCad's F8, every footprint in rows and linked to its symbol; blocks (an anchor footprint, members with offsets, one KiCad group) keep parts that belong together, applied by --blocks. The routers are frozen: fixes, not features.

  • Parts and documents: doc_sections and doc_facts read a document's index and a part's fact sheet (written once from the datasheet, every number with its page); lib_fetch brings a symbol, footprint and 3D model for an LCSC code from EasyEDA's data, upgraded to KiCad's current format, for the pad-for-pad check against the drawing that follows.

Next: bring-up (milestone 6) and per-fab export profiles, driven by the first real product. See docs/tools.md for the tool list.

Requirements

  • KiCad 10.0.x (built against 10.0.6, Windows 11). kicad-cli ships with it. Upgrade KiCad deliberately: the file formats and the API move with each major, kicad_doctor reports the drift, and the full test suite is the check.

  • Python 3.12 or newer.

  • kicad-python for the IPC channel (the board open in KiCad), as the ipc extra. Without it the doctor says so and every kicad-cli and file tool still works. Other extras: parts (easyeda2kicad behind lib_fetch), preview (PyMuPDF for sheet previews), browser (headless Chromium for datasheet portals), dev (pytest).

  • Developed and tested on Windows 11; kicad-cli discovery also knows the macOS bundle and the Linux paths. One convenience is Windows-only: build.py --open starts KiCad through a scheduled task.

Install

The quick way is the stack's bootstrap: clone kicad-ai-stack and run python bootstrap.py; it clones this repository next to it, creates the environment, installs the extras and writes the Claude Code registration. On its own:

With uv:

uv sync --extra dev --extra ipc
uv run pytest

With pip:

python -m venv .venv
.venv\Scripts\python -m pip install -e ".[dev,ipc]"
.venv\Scripts\python -m pytest

The default run is the fast loop: in parallel, without the slow tests (a full library index, a whole review, a headless browser) and without the live ones. pytest -m "not gui" adds the slow tests; pytest -m "" runs everything and needs KiCad open with its API on. Tests that need kicad-cli skip themselves when it is not installed.

Register with Claude Code

Put a .mcp.json in the directory that holds your KiCad projects:

{
  "mcpServers": {
    "kicad-mcp-layer": {
      "command": "C:\\path\\to\\kicad-mcp-layer\\.venv\\Scripts\\python.exe",
      "args": ["-m", "kicad_layer"],
      "env": {
        "KICAD_LAYER_WORKSPACE": "C:\\path\\to\\your\\kicad\\projects",
        "KICAD_LAYER_MODE": "readonly"
      }
    }
  }
}

Register it in one place only. If Claude Code runs inside the Claude desktop app, quit and relaunch the app after changing MCP configuration; a new session is not enough.

Configuration

Variable

Default

Meaning

KICAD_LAYER_WORKSPACE

current directory

Every path must resolve under it

KICAD_LAYER_MODE

readonly

write allows design edits

KICAD_CLI

auto-detected

Explicit path to kicad-cli; if set and wrong, that is an error

KICAD_API_SOCKET

ipc://%TEMP%\kicad\api.sock

IPC address, honoured by kicad-python

KICAD_LAYER_CACHE_DIR

%LOCALAPPDATA%\kicad-mcp-layer\cache

Netlist and report cache

KICAD_LAYER_LOG

INFO

stderr log level

KICAD_LAYER_TOOLS

core

core registers checks, exports, renders, reviews, libraries, documents and board reads; full adds the design-edit tools and the routers

To use the board tools, enable the API in KiCad: Preferences, Plugins, "Enable KiCad API". It takes effect immediately.

Design

The architecture decisions and the research behind them live in a companion research/ folder (not part of this package): a survey of every existing KiCad MCP server, KiCad 10's file formats and API surface, and the tests that showed why no existing schematic parser could be reused. Short version:

  • Connectivity comes from kicad-cli sch export netlist, never from home-grown wire tracing.

  • Every IPC failure is classified as unreachable or rejected; file edits are allowed only when unreachable, and never for a board this process has seen live.

  • Schematic writes refuse while KiCad holds the editor lock file.

  • Verdicts can say UNVERIFIED. A missing report is never a pass.

  • Two tool tiers: core reads, checks, exports, renders, reviews and documents; full adds design edits and the frozen routers.

Acknowledgements

Ideas and, where MIT-licensed, code from kicad-mcp-pro, kicad-happy, lamaalrajih/kicad-mcp and KiCAD-MCP-Server; lessons from Konnect. Test fixtures are KiCad's own demo projects.

License

MIT. See LICENSE.

Available Tools

35 tools
capabilitiesA
Read-onlyIdempotent

What this server can do, through which channel (cli, ipc, file), and what KiCad 10 makes impossible. Consult it before promising the user something.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFilter rows by substring.
statusNoFilter by status.

Output Schema

ParametersJSON Schema
NameRequiredDescription
gapYes
rowsYes
coveredYes
plannedYes
gui_onlyYes

TDQS

A4/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 safety is covered. The description adds genuinely new behavioral context beyond the annotations: that results are organized by execution channel and that it reports negative knowledge (what KiCad 10 makes impossible). The only gap is that it doesn't explain the filter/status semantics of the returned rows.

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 tight sentences that front-load the tool's scope and end with the operative instruction. Every clause earns its place; nothing is redundant.

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-value documentation is not required, and the description covers purpose, channel breakdown, and preconditions. It is nearly complete for such a simple, zero-required-parameter read tool; only the meaning of the status categories is left implicit.

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 100%, so both parameters (a substring query and a status enum) are fully documented in the schema itself, establishing the baseline of 3. The description adds no syntax, matching behavior, or format detail for query or status beyond what the schema already 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?

States a clear intent: enumerate what the server can do, through which channel (cli, ipc, file), and what KiCad 10 makes impossible. This is a specific meta-resource that is easy to distinguish from all domain siblings (pcb_summary, run_erc, lib_search, etc.). It stops just short of a 5 because it never frames itself as a capability-discovery/status tool versus any conceptually adjacent sibling.

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?

"Consult it before promising the user something" gives an explicit trigger condition, which is unusual and useful guidance. It does not name an alternative or state when *not* to call it, 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.

doc_factsA
Read-onlyIdempotent

A part's fact sheet: pins, limits, the values a design is built on, the recommended circuit and the package, every row with its datasheet page, written once from the datasheet and checked against the rendered pages. The cheapest answer to a datasheet question. Without a sheet the answer says how to write one (a subagent with doc_sections, doc_text and doc_page, into research/parts/).

ParametersJSON Schema
NameRequiredDescriptionDefault
findNoRegular expression: only the sheet's lines that match come back, each with its section, e.g. 'trip|B0'.
partYesManufacturer part number or a name that starts its fact sheet's file name, e.g. MAX98357A.
sectionNoOne heading of the sheet, by prefix: Pins, Limits, Values, Recommended circuit, Package, Notes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
partYes
pathNoThe fact sheet, relative to the workspace.
textNoThe sheet, or the one section asked for.
foundYes
adviceNoWhen there is no sheet: how to write one, with the template.
sectionNo
sectionsNoThe sheet's headings, for a narrower question next time.

TDQS

A3.8/5.0
Behavior4/5

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

With readOnly/idempotent/non-destructive already in annotations, the description adds real behavioral context: the sheet is written once from the datasheet and verified against rendered pages (data provenance), and it discloses the no-sheet fallback path via a subagent. No pagination or size limits are mentioned, 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.

Conciseness3/5

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

Three sentences, but the first is a dense run-on packing the row-by-row/page-number provenance into a long clause. The routing benefit ('cheapest answer') is buried in the middle rather than front-loaded, costing scannability.

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 carry the safety profile. The description still covers what the sheet contains, its trustworthiness, and the no-sheet fallback, leaving little an agent must infer to call it correctly.

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 100%, so the schema already documents 'part', 'find' and 'section' (including the regex example and the heading list). The description only indirectly echoes sections ('pins, limits, the values...'), adding no syntax or format detail beyond the schema. Baseline 3.

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?

Names a specific resource (a part's fact sheet) and enumerates its contents: pins, limits, values, recommended circuit, package. It also differentiates from siblings by naming doc_sections, doc_text and doc_page in the no-sheet fallback. It lacks a clean action verb (it reads as a noun phrase rather than 'returns the fact sheet'), which keeps it just shy 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 Guidelines4/5

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

'The cheapest answer to a datasheet question' gives clear selection guidance for choosing this over the raw doc_* tools, and the fallback sentence explains what happens when no sheet exists. It stops short of an explicit when-not (e.g., when to prefer doc_text or doc_page directly for non-fact-sheet questions).

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

doc_fetchA
Idempotent

Download a technical document into the project's documentation library (research/references by default) and index it with its source URL, date, size and hash. A plain fetch with browser-grade headers comes first; it follows redirects and a single PDF link on a viewer page. When a site answers with a scripted download portal or refuses the plain client, headless Chromium loads the page and takes the download it offers. If that fails too (login walls, bot checks), the error says so: open the URL in a browser, save the file, and use doc_import. Find URLs with web search first; manufacturer sites and distributor mirrors usually both work.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesDirect URL of the document, usually a PDF datasheet, application note or reference-design archive.
tagsNoKeywords for later lookup, e.g. ['poe', 'silvertel', 'ag5405'].
notesNo
titleNoHuman title, e.g. 'Silvertel Ag5400 PoE module datasheet'.
expectNopdf
subdirNoFolder inside the documentation library, e.g. datasheets, reference-designs, standards.datasheets
browserNoauto: try a plain fetch, then headless Chromium when the site answers with a page or refuses; always: start in the browser; never: plain fetch only.auto
filenameNoFile name to store under; default derived from the URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesStable id: first 12 hex digits of the file's SHA-256.
fileYesPath relative to the documentation library.
pathYesPath relative to the workspace.
sizeYes
tagsNo
notesNo
pagesNo
titleYes
sha256Yes
fetchedYesDate the file entered the library (YYYY-MM-DD).
source_urlNo
content_typeYes

TDQS

A3.8/5.0
Behavior1/5

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

The annotations declare openWorldHint=false, yet the entire description is about interacting with an open world of external websites (manufacturer sites, distributor mirrors, scripted download portals, login walls, bot checks). That is a direct contradiction of the annotation, so per the rubric this scores 1 even though the description otherwise discloses rich fallback/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.

Conciseness4/5

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

Five tight sentences that front-load the core action before describing the fetch/browser/fallback ladder. Each sentence carries load-bearing information about mechanics or failure handling, with only minor redundancy around the browser-vs-plain-fetch decision.

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. For a network tool with 8 parameters, 1 required, and complex browser-fallback behavior, the description covers the operational flow, failure routing to doc_import, and where to source URLs adequately.

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 75%, so the schema already documents url, tags, title, subdir, browser and filename, and this is the baseline case. The description adds library-location context but leaves expect and notes unexplained and does not reconcile its stated default ('research/references') with the schema's subdir default ('datasheets').

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 ('Download a technical document into the project's documentation library') and clarifies scope (research/references by default, indexed with URL, date, size, hash). It clearly distinguishes itself from the sibling doc_import, which is named as the redirect target when fetching fails.

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?

Gives explicit when-to-use guidance for each mode: plain fetch first, headless Chromium when the site serves a scripted portal or refuses the client, and doc_import when login walls/bot checks defeat both. It also says where to find URLs ('web search first; manufacturer sites and distributor mirrors usually both work').

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

doc_importB
Idempotent

Bring a document that is already on disk into the documentation library and index it.

ParametersJSON Schema
NameRequiredDescriptionDefault
moveNoMove instead of copy.
pathYesA file already on disk, e.g. one saved from a browser.
tagsNo
notesNo
titleNo
subdirNodatasheets
source_urlNoWhere it came from, for provenance.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesStable id: first 12 hex digits of the file's SHA-256.
fileYesPath relative to the documentation library.
pathYesPath relative to the workspace.
sizeYes
tagsNo
notesNo
pagesNo
titleYes
sha256Yes
fetchedYesDate the file entered the library (YYYY-MM-DD).
source_urlNo
content_typeYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the mutation/idempotency profile is covered. The description adds only that the document is indexed; it says nothing about where it lands (the subdir default) or what side effects indexing triggers, so it adds limited value 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.

Conciseness5/5

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

A single front-loaded sentence stating the action and its result, with zero 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?

An output schema exists, so return values need no explanation, and annotations carry the safety profile. However, for a 7-parameter import tool with only 43% schema coverage, the description leaves too many behavioral and parameter details unstated to be fully complete.

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?

Schema description coverage is only 43%, and the description mentions no parameters at all. Key fields such as tags, notes, title, and subdir (default 'datasheets') are undocumented in both places, so the description fails to compensate for the coverage gap it inherited.

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 (import a document into the documentation library) and adds the outcome that it is indexed. This distinguishes it from read-oriented siblings like doc_list/doc_text/doc_fetch, but it does not explicitly name which sibling it is not.

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 phrase 'already on disk' implies the condition for use (a locally stored file, e.g. one saved from a browser), but there is no explicit when-to-use guidance or pointer to alternatives such as doc_fetch. Usage is only implied.

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

doc_listA
Read-onlyIdempotent

List or search the documentation library. Text hits include the page number, so a following doc_text or doc_page call can go straight to the right place.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoWords to look for in titles, file names, tags, notes and the documents' text; omit to list everything.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNo
totalYes
libraryYesThe documentation library directory, relative to the workspace.
documentsYes

TDQS

A3.5/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, so the safety profile is covered. The description adds one behavioral detail — that text hits include page numbers — which helps the agent chain calls. It says nothing about result volume, pagination, or truncation behavior for a limit-capped list.

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?

Two tight sentences with no filler, and the follow-up-call hint is front-loaded alongside the purpose. 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?

An output schema exists, so return values need no explanation, and annotations fully cover the safety profile. The description supplies the chaining hint that ties it to doc_text/doc_page. Remaining gaps (limit semantics, when to prefer sibling doc tools) are minor.

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 50%: the query parameter is richly documented in the schema, but limit is not. The description adds no parameter-level guidance (e.g., search scope, how query matches) beyond what the schema already states, so the baseline of 3 applies.

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 concrete verb pair and resource: 'List or search the documentation library.' An agent can tell this is the entry-point query tool. It does not explicitly contrast itself with doc_fetch or doc_sections, so it falls 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?

It implies the intended workflow by noting that text hits carry page numbers so a following doc_text or doc_page call can proceed directly — useful routing context. However, it never states when to prefer this over doc_fetch, doc_sections, or doc_facts, so usage is only implied.

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

doc_pageA
Idempotent

Render one page of a PDF to an image and return it, for pinout drawings, package dimensions, tables and anything else text extraction cannot carry.

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesDocument id, library file name, title, or a path inside the workspace.
pageYes
scaleNoRender scale; 2 is about 144 dpi.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description usefully adds that the return value is image data rather than text, but says nothing about output limits, page-range constraints, or why readOnlyHint is false for a render operation. 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?

A single sentence, front-loaded with the action and its result, then the use cases. No filler, no restatement of the tool name or schema.

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 no output schema, the description must signal the return type, and it does ('return it [an image]'). Combined with the annotation profile and a fairly well-described schema, an agent has enough to call it correctly; only edge details like resolution limits remain unstated.

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 67%: 'doc' enumerates its accepted forms (id, file name, title, path) and 'scale' documents the 144 dpi reference point. The description adds nothing about 'page' numbering or scale trade-offs, so the schema does the heavy lifting. Baseline 3 is appropriate.

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 ('Render one page of a PDF to an image and return it') and immediately carves out its niche by contrasting with the sibling doc_text: for content 'text extraction cannot carry.' An agent can distinguish it from doc_text, doc_fetch and doc_sections 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 Guidelines4/5

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

Gives clear usage context — pinout drawings, package dimensions, tables, anything text extraction misses — which effectively routes the agent away from doc_text toward this tool. It stops short of an explicit 'use X instead when Y' statement, but the selection condition is unambiguous.

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

doc_sectionsA
Read-onlyIdempotent

The document's index: its bookmarks, its contents page, the headings found in the text and every table and figure caption, each with its page. Ask this first, then doc_text with those pages or doc_page for the table: a datasheet lookup then costs the rows you need, not the pages around them.

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesDocument id, library file name, title, or a path inside the workspace.
findNoRegular expression on the titles, e.g. 'pin|package'; omit for the whole index.
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
docYes
findNo
totalYesHow many the document has before the filter and the cap.
sectionsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, and closed-world behavior, so the description's additional value is modest. It adds the scoping behavior that the output is an index with page references and that it should be called before text/table retrieval. It does not cover pagination or limit behavior, but with annotations present this is a reasonable 4.

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 sentences, front-loaded with the return contents, then the workflow and rationale. Every phrase contributes to understanding what to call and when; there is 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?

Output schema exists, so return format need not be fully restated, yet the description still tells the agent what the index contains. Annotations cover safety, and the description covers purpose and sequencing, leaving only minor parameter detail to the schema.

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?

Schema coverage is moderate at 67%, and the description contains no parameter-level guidance for `doc`, `find`, or `limit`. The schema itself documents `doc` and `find` with examples, but `limit` is only constrained by default/max and not described anywhere. The description fails to compensate for the remaining 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 exactly what the tool returns—an index of bookmarks, contents, headings, and table/figure captions with page numbers—rather than just restating the name. It distinguishes this from sibling tools by positioning it as the first step before doc_text or doc_page. An agent can identify its role 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 Guidelines5/5

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

It gives an explicit workflow: 'Ask this first,' then use doc_text with the returned pages or doc_page for a specific table. It names the alternatives and explains why this ordering is useful for datasheet lookups. This is clear when-to-use guidance.

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

doc_textA
Read-onlyIdempotent

Extract the text of a PDF (or read a text document), per page, or search it. With find, the answer is the matches alone: a page number and a short window per hit, so a lookup costs a few hundred tokens; add pages to read a page around a hit. Pages that are drawings or scanned images come back empty; use doc_page to look at those.

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesDocument id, library file name, title, or a path inside the workspace.
findNoRegular expression to locate in the text; matches come back with page numbers and one context window each (overlapping windows merged), and no page text unless pages is given.
pagesNoPages to return, e.g. '3-5,12'. Without find: default all, capped to keep the answer readable. With find: default none, only the matches come back.
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
docYes
textYesExtracted text per page; empty for image-only pages, which doc_page can render.
pagesYes
matchesNo
truncatedNo

TDQS

A4.3/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 the description adds non-obvious behavior: token cost of a find ('a few hundred tokens'), that scans/drawings return empty, and that find suppresses page text unless pages is given. It stops short of describing truncation behavior for max_chars or the exact response shape.

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 core purpose, then elaborates cost, modes, and the empty-page caveat in tightly packed sentences. No sentence is wasted, though the find-cost clause is dense and could be split.

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-shape explanation is unnecessary; the description supplies the mode logic, cost, and failure case needed to call it correctly. Only minor gaps remain around max_chars and behavior when the document is missing or unreadable.

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 75% schema coverage the schema documents doc/find/pages but not max_chars, and the description compensates by explaining the find-vs-pages interaction and defaults ('with find: default none', 'add pages to read a page around a hit'). max_chars remains only vaguely covered by 'capped to keep the answer readable'.

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 ('extract the text of a PDF / read a text document'), names the modes (per page or search), and explicitly routes image/scanned pages to the sibling doc_page. An agent can identify the tool and its boundary with doc_page 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 clear when-to guidance: use find for a cheap lookup, add pages to read around a hit, and use doc_page for pages that are drawings/scanned images. It does not address when to choose this over the other doc_* siblings (doc_facts, doc_sections, doc_fetch), so the alternative coverage is only partial.

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

export_bomB
Idempotent

Export a bill of materials as CSV with kicad-cli and return the parsed rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoColumns; default Reference, Value, Footprint, ${QUANTITY}, ${DNP}.
group_byNoGroup rows by these fields; default Value and Footprint. Pass [] for no grouping.
max_rowsNo
output_pathNoCSV path; default <name>-bom.csv next to the schematic.
schematic_pathYesA .kicad_sch file, absolute or relative to the workspace. Any sheet of the project works; the root sheet is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
columnsYes
commandYes
csv_pathYes
row_countYes
truncatedNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare idempotent=true, destructive=false, openWorld=false, and readOnly=false, so the agent knows this is a safe, repeatable operation. The description usefully adds that the work is done via kicad-cli and that parsed rows come back, but it omits the notable side effect (a CSV is written to disk) and any truncation behavior from max_rows. With annotations covering the safety profile, this is modest added value.

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?

A single front-loaded sentence with no filler; the action, format, engine, and return shape are all packed in efficiently. Nothing is padded and nothing needs to be cut.

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?

An output schema exists, so return values need not be described, and the schema covers most parameters. However, for a tool that writes a file and caps output at max_rows (default 500), the description never warns about the on-disk artifact or potential row truncation, leaving meaningful gaps.

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 80%, so the schema already documents fields, group_by, output_path, and schematic_path in detail. The description contributes nothing parameter-specific (no hint about max_rows truncation or grouping semantics), so the baseline of 3 applies.

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 (export a bill of materials as CSV), names the underlying mechanism (kicad-cli), and notes it returns parsed rows. It does not distinguish itself from the adjacent sibling export_fab, which an agent could plausibly 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 Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives such as export_fab, render_board, or sch_netlist. The only routing-relevant detail ('any sheet of the project works; the root sheet is used') lives in the schema, not the description.

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

export_fabA
Idempotent

Produce fabrication files with kicad-cli and list exactly what was written, with sizes and hashes. Reads the board file on disk: save in KiCad first if it has unsaved changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pdfNoMulti-page PDF of copper, silkscreen and edge layers.
stepNoSTEP 3D model; slow, needs resolvable 3D models.
drillNo
layersNoGerber layers, e.g. F.Cu,B.Cu,Edge.Cuts; default is the board's plot settings.
gerbersNo
positionNoPick-and-place CSV in mm, both sides.
board_pathYesA .kicad_pcb file, absolute or relative to the workspace.
output_dirNoOutput directory; default 'fab' next to the board.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesNo
skippedNo
commandsNo
warningsNo
duration_sYes
output_dirYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the write profile is partly covered. The description adds value beyond that: it explains that it writes to disk and enumerates outputs with sizes and hashes, and flags the staleness trap of unsaved in-editor changes. It stops short of covering concurrency or overwrite behavior for existing output files.

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 sentences, zero filler, with the core action front-loaded and the caveat placed second. Nothing restates the name or the schema.

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 spelled out, and the disk-write plus save-first caveat covers the main operational risk. It is nearly complete for an 8-parameter export tool; a note on where files land or overwrite behavior would close the remaining gap.

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 75% and the schema already documents formats, layer selection, and output directory defaults. The description itself adds no parameter-level meaning (e.g., it never mentions board_path, output_dir, or how layers interact with gerbers), so the baseline 3 applies.

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 concrete verb and resource ('Produce fabrication files with kicad-cli') plus the observable outcome (listing files with sizes and hashes). It is clear what the tool does, though it never names a sibling like export_bom or render_board, so the boundary against those adjacent export tools is left implicit.

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 one important prerequisite ('Reads the board file on disk: save in KiCad first if it has unsaved changes'), which is real usage guidance. However, it gives no when-to-use/when-not-to-use framing or routing toward alternative export tools, 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.

fp_infoA
Read-onlyIdempotent

Everything about one library footprint: description, tags, mount type, courtyard size, 3D model, and every pad with number, kind, shape, position, size, drill and layers, exactly as KiCad will place it.

ParametersJSON Schema
NameRequiredDescriptionDefault
lib_idYesLibrary footprint id such as Resistor_SMD:R_0603_1608Metric.
project_pathNoA project directory or any file in it; the project's own libraries (its sym-lib-table and fp-lib-table) are included and shadow global ones.

Output Schema

ParametersJSON Schema
NameRequiredDescription
attrNo
padsYes
pathYes
tagsNo
modelNo
lib_idYes
smd_padsYes
tht_padsYes
width_mmNo
height_mmNo
pad_countYes
descriptionNo

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, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is covered. The description adds useful content scope (it reports placement geometry 'exactly as KiCad will place it', including pad drill and layers), but says nothing about error behavior for a bad lib_id or how project shadowing affects results.

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?

A single tightly packed sentence with the resource front-loaded and no filler. The enumerated field list is dense but each item earns its place by telling the agent what data is available.

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, the description needn't explain return formatting, and the content enumeration plus full schema coverage make the tool callable without ambiguity. Only the routing relative to sibling lookup tools is left unstated.

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 100%; both lib_id and project_path are documented in the schema, including the shadowing behavior of project libraries. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

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 resource (one library footprint) and enumerates exactly what is returned: description, tags, mount type, courtyard size, 3D model, and every pad with its geometry, drill and layers. This is far more specific than the sibling names (sym_info, lib_fetch, lib_search) and lets an agent tell what it will get 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 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 and no named alternative. The agent is left to infer that this is the footprint-inspection counterpart to sym_info or a deeper alternative to lib_fetch/lib_search, but the description never says so.

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

impedance_calcA
Read-onlyIdempotent

Estimate the impedance of an outer-layer trace or pair on a stack-up preset with closed-form microstrip formulas, and report the fab's own published number when the geometry matches one of its table entries. Closed forms are about ten percent optimistic for tightly coupled pairs; the table entry is the one to design to.

ParametersJSON Schema
NameRequiredDescriptionDefault
gap_mmNoEdge-to-edge gap of a differential pair; omit for a single-ended line.
stackupNoStack-up preset, see stackup_info: jlc04161h-7628 (JLCPCB 4-layer), pcbway-4l-1.6mm (PCBWay standard 4-layer) or aisler-4l-1.6mm (AISLER 4-layer). Default: JLCPCB's JLC04161H-7628.jlc04161h-7628
width_mmYesTrace width in mm.

Output Schema

ParametersJSON Schema
NameRequiredDescription
erYes
layerYes
gap_mmNo
methodYes
sourceYes
stackupYes
width_mmYes
table_matchNoThe fab's own table entry when the geometry is one of its published ones.
uncertaintyYes
er_effectiveYes
dielectric_mmYes
differential_ohmNo
single_ended_ohmYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (read-only, idempotent, non-destructive), so the description's real contribution is accuracy disclosure: closed forms are ~10% optimistic for tightly coupled pairs, and the tool reports the fab's own published number when geometry matches a table entry. That is genuine behavioral context beyond the annotations, though it omits any formatting/units caveat for the returned value.

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 tightly written sentences, front-loaded with what it does, followed by the accuracy caveat and design recommendation. No filler, no repetition of schema or annotation 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?

With an output schema present, return values need no explanation, and the read-only annotations cover the safety profile. What remains for the agent to know — method, accuracy limits, which result to trust, and where presets are defined — is all supplied.

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 100%, so 3 is the baseline; the description exceeds it by scoping the computation to outer-layer geometry and framing "pair" vs. single-ended, which maps meaningfully onto the gap_mm distinction. It adds no syntax details beyond the schema, but the applicability constraint is real added meaning.

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 combo ("Estimate the impedance of an outer-layer trace or pair on a stack-up preset") that no sibling covers, and it names the two computation paths (closed-form microstrip formulas vs. the fab's published table entry). An agent can distinguish it from stackup_info, review_board, etc. without opening a 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?

The description gives decision guidance: use the closed-form result generally, but design to the table entry when the geometry matches. It also references stackup_info for preset definitions. It lacks an explicit "when not to use this" exclusion, but the context is clear enough to invoke correctly.

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

kicad_doctorA
Read-onlyIdempotent

Diagnose this server and its environment: which process is answering, which kicad-cli was found, whether KiCad's API is reachable and which documents are open, and what to do about any problem. Call this first whenever another tool fails unexpectedly.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
ipcYes
pidYes
modeYes
adviceNo
pythonYes
cache_dirYes
kicad_cliYes
executableYes
server_versionYes
workspace_rootYes
writer_formatsNoThe KiCad file format versions this layer's writers emit, by file kind.
kicad_processesYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: it discloses the diagnostic scope and that it returns remedial advice ('what to do about any problem'), which annotations do 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 the core purpose, followed by the enumerated checks and a single call-to-action sentence. The first sentence is somewhat list-heavy but every clause adds diagnostic scope; no 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-value detail is not required. The description covers what is inspected and when to invoke, which is sufficient context for a no-param diagnostic tool. It could note that the output is human/agent-readable guidance, but the gap is minor.

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 takes zero parameters, so there is nothing to disambiguate; baseline for a no-param tool is 4. Schema coverage is 100% and the empty schema matches the description's implication of a no-argument diagnostic call.

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 (diagnose) and resource (this server and its environment), then enumerates the concrete facets checked: answering process, kicad-cli binary, API reachability, open documents. No sibling tool overlaps with this role, so the purpose is 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?

Gives an explicit trigger condition: 'Call this first whenever another tool fails unexpectedly.' This is clear, actionable guidance for when to reach for this tool. It stops short of naming when-not to use it as a general health check vs. routine calls, so it falls just short of the 5 bar.

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

lib_fetchA
Idempotent

Symbol, footprint and 3D model (STEP and WRL) for one LCSC code, converted from EasyEDA's component data (EasyEDA is JLCPCB's own design tool; nearly every part in the assembly catalogue has a model there) by easyeda2kicad into a library next to the project. A part swap becomes: parts_search for the code and stock, lib_fetch for the files, then fp_info and the datasheet drawing (doc_page) for the pad-for-pad check. The models are drawn by users and JLCPCB staff: treat them as drafts, never as verified.

ParametersJSON Schema
NameRequiredDescriptionDefault
lcscYesLCSC code such as C520543, as parts_search or jlcpcb.com/parts give it.
partsNofull
lib_dirNoFolder for the library files instead of <project>/lib; must be inside the workspace.
lib_nameNoLibrary base name: <lib_name>.kicad_sym, <lib_name>.pretty and <lib_name>.3dshapes; several parts share one library.jlc
overwriteNoReplace a symbol, footprint or model of the same name already in the library.
project_pathNoThe project (.kicad_pro or its folder) whose lib/ receives the files. Register <lib_name> in its sym-lib-table and fp-lib-table afterwards.

Output Schema

ParametersJSON Schema
NameRequiredDescription
lcscYes
padsYes
pinsYes
filesYes
sourceYes
symbolYes
libraryYes
warningsYes
footprintYes
model_wrlYes
symbol_idYes
model_stepYes
library_dirYes
footprint_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds important context beyond annotations: the data comes from EasyEDA user/JLCPCB drafts, is converted by easyeda2kicad, and should be treated as 'drafts, never as verified'. It does not mention auth or rate limits, but for a local file-generation tool this is a strong addition.

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 what the tool produces, then the usage workflow, then the quality caveat. It is somewhat long, especially the first sentence with nested parentheticals, but every sentence contributes useful routing or trust context.

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, the description need not explain return values. It covers the tool's purpose, source of data, workflow placement, and a critical quality warning. It does not restate workspace or registration constraints already covered by the schema, but those are available in structured fields.

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 83%, so the schema already documents most parameters. The description mentions the LCSC code and that files go 'into a library next to the project', but it adds no syntax or behavioral detail for the parts enum, lib_dir, lib_name, overwrite, or project_path beyond what the schema provides. Baseline 3 is appropriate.

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: fetching/converting symbol, footprint, and 3D model for one LCSC code. It clearly distinguishes the tool from siblings by naming parts_search for stock lookup and fp_info/doc_page for validation, so an agent can route correctly without opening schemas.

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 gives an explicit workflow: 'A part swap becomes: parts_search for the code and stock, lib_fetch for the files, then fp_info and the datasheet drawing (doc_page) for the pad-for-pad check.' This names the alternatives and the sequence for using this tool, leaving little inference needed.

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

lib_indexA
Read-onlyIdempotent

Build or refresh the library index and report its size and age. Normally unnecessary: lib_search builds it on first use and refreshes changed libraries automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
rebuildNoRe-parse every library even if unchanged.
project_pathNoA project directory or any file in it; the project's own libraries (its sym-lib-table and fp-lib-table) are included and shadow global ones.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
secondsNo
symbolsYes
built_atNo
librariesYes
footprintsYes
rebuilt_librariesNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so credit goes for added context: the tool reports index size and age, and the description discloses that the index is self-maintaining elsewhere. It does not discuss cost on large libraries or failure behavior, so it stops short of 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?

Two sentences, zero filler: the action comes first, the crucial 'you probably don't need this' caveat second. Every clause 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 zero-required-parameter maintenance tool with fully documented params and an output schema covering the reported size/age, the description supplies everything an agent needs to decide whether to call it at all.

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 100%, so rebuild and project_path are already fully documented, including the shadowing behavior of project libraries. The description adds no parameter-level meaning beyond what the schema states, so the baseline 3 applies.

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 pair (build/refresh) on a named resource (library index), plus the side effect of reporting size and age. It explicitly names the sibling lib_search and clarifies the division of labor, so an agent can distinguish the two without opening either schema.

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?

Gives an explicit when-not to use it ('Normally unnecessary') and names the alternative (lib_search) plus the conditions under which that alternative supersedes it (build on first use, automatic refresh of changed libraries). Nothing 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.

pcb_list_itemsA
Read-onlyIdempotent

List items of one kind from the board open in KiCad, in millimetres and degrees with KiCad layer names and item ids. Page with limit and offset on large boards.

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoOnly items on this net name.
refNoOnly footprints or pads whose reference starts with this, e.g. R or U1.
kindYes
layerNoOnly items on this layer, canonical name such as F.Cu or B.SilkS.
limitNo
offsetNo
board_pathNoWhich open board, as a .kicad_pcb path. Omit to use the one board open in the PCB Editor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes
itemsYes
totalYes
offsetYes
returnedYes
truncatedYes
board_pathYes

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, non-destructive and closed-world, so the safety profile is covered. The description adds useful context beyond that: it reports units (mm and degrees), KiCad layer names, and item ids, plus a pagination cue. It stops at 3 because it never describes result shape semantics and the output schema already owns return values.

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?

Two sentences, no filler, with the core purpose front-loaded ahead of the pagination note. It is tight and appropriately sized for the tool's complexity.

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-value details are not required here, and annotations cover the safety profile. What remains is a passable orientation for a filtered list tool; adding a note about which filters combine or the board_path default would have closed the remaining gap.

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 57%, so the description should carry some of the load. It clarifies the 'kind' selector ('one kind') and page mechanics (limit/offset) but says nothing about the net, ref, layer, or board_path filters, leaving half the surface documented only in the schema. Baseline 3 fits.

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 clear verb (List) and resource (items of one kind from the board open in KiCad), adding scope detail (single kind) and output units (mm/degrees). It does not explicitly distinguish itself from nearby siblings such as pcb_net_stats or sch_list_components, 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 Guidelines3/5

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

The second sentence gives implied guidance for large boards ('page with limit and offset'), which tells the agent when pagination matters. However, there is no explicit when-to-use vs. alternatives routing, no mention of which sibling to prefer for aggregated stats, and no exclusions.

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

pcb_net_statsA
Read-onlyIdempotent

Per-net routing statistics from the open board: track count and total length, widths, layers, vias, pads, a hint when a net has pads but no tracks, and differential-pair candidates with their length mismatch.

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoOne net name; all nets when omitted.
limitNo
board_pathNoWhich open board, as a .kicad_pcb path. Omit to use the one board open in the PCB Editor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
netsYes
net_countYes
truncatedNo
board_pathYes
diff_pair_candidatesNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safe read-only/idempotent profile, so the bar is lower; the description adds real value by disclosing special output behaviors (a hint when a net has pads but no tracks, differential-pair candidate detection) and that it operates on the currently open board. It omits the default result cap (200) and any truncation behavior, which an agent should know.

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?

A single front-loaded sentence with no filler; every listed item corresponds to a returned metric. It is somewhat list-dense, 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 re-explained, and annotations cover the safety profile. The definition is nearly complete for a read-only stats query; the main gap is that truncation/default-limit behavior is never surfaced to the caller.

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 67%: the `net` and `board_path` params carry descriptions while `limit` is documented only by its default/min/max constraints. The description mentions no parameters at all, so it adds nothing beyond the schema — baseline 3 is appropriate.

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 resource ('per-net routing statistics from the open board') and enumerates the exact metrics returned: track count/length, widths, layers, vias, pads, pad-without-track hints, and differential-pair mismatch. The 'per-net' framing separates it from board-level siblings like pcb_summary and review_board.

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 never says when to reach for this tool versus alternatives such as pcb_summary, route_check, or impedance_calc, nor any preconditions beyond the implicit 'open board'. Usage must be inferred entirely from the purpose text.

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

pcb_summaryA
Read-onlyIdempotent

Describe the board open in KiCad's PCB Editor through the live API: title block, copper layer count, enabled layers, outline size, item counts, stackup and netclass rules. Needs KiCad running with the API enabled and the board open; kicad_doctor explains if it is not.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_pathNoWhich open board, as a .kicad_pcb path. Omit to use the one board open in the PCB Editor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sizeNox_mm, y_mm, width_mm, height_mm of the outline.
notesNo
countsYes
projectYes
stackupYes
board_pathYes
netclassesYes
title_blockYes
enabled_layersYes
outline_sourceYes
copper_layer_countYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the safe read profile (readOnly, idempotent, non-destructive, closed-world), so most of the safety burden is covered. The description adds non-annotation context: it operates on a live editor session, requires the API enabled and the board open, and explains the failure path via kicad_doctor.

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 sentences, front-loaded with the action and reported contents, followed by the prerequisite and remediation. 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?

With an output schema present, return values need no explanation, and the description still covers scope of reporting, environment prerequisites and the fallback path. Nothing needed 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.

Parameters3/5

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

There is a single optional parameter documented at 100% schema coverage, so the schema already explains board_path and the omit-to-use-open-board behavior. The description adds no additional parameter syntax or constraints, which is the baseline 3 for a fully-covered 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?

States a specific verb (Describe) and resource (the board open in KiCad's PCB Editor) and enumerates exactly what is reported: title block, copper layer count, enabled layers, outline size, item counts, stackup and netclass rules. This scope distinguishes it from narrower siblings like pcb_list_items, pcb_net_stats and stackup_info.

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 states the preconditions (KiCad running with the API enabled and the board open) and routes the agent to kicad_doctor when they are not met. It does not contrast against sibling summary tools, but the applied context is clear enough to decide when to call it.

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

project_openA
Read-onlyIdempotent

Locate a KiCad project and describe it: root schematic, board, all sheets, text variables, netclasses, file format versions, and any editor lock files that mean KiCad has a file open.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesA project directory, or any .kicad_pro, .kicad_sch or .kicad_pcb inside it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
boardYes
boardsYes
warningsNo
directoryYes
lock_filesNoKiCad editor lock files present. A lock means the GUI has the file open.
netclassesNo
schematicsYes
project_fileYes
root_schematicYes
text_variablesNo
board_format_versionNo
project_file_versionNo
schematic_format_versionNo

TDQS

A3.7/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 non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: it reports editor lock files, telling the agent whether KiCad currently has the project open – a behavioral fact 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?

One sentence, front-loaded with the verb and resource, followed by a tight enumeration of outputs. No waste; only the minor cost of a long comma list.

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 re-explained, and annotations carry the safety profile. Combined with the described scope, this is complete enough for an agent to call it correctly, missing only explicit sibling routing.

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 100% and the single 'path' parameter already documents that it accepts a project directory or any .kicad_pro/.kicad_sch/.kicad_pcb inside it. The description adds nothing to parameter semantics, so the baseline 3 is appropriate.

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 pair ('locate' and 'describe') applied to a concrete resource (a KiCad project) and enumerates exactly what it returns: root schematic, board, sheets, text variables, netclasses, format versions, lock files. This is far more specific than a sibling like review_project, though it never draws the boundary against that sibling explicitly.

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 – an agent can infer this is the entry-point inspection call before other project operations, but there is no explicit when-to-use or when-not-to-use guidance, and no mention of how it differs from the similarly-scoped review_project.

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

render_boardA
Idempotent

Render the board in 3D to a PNG with kicad-cli and return the image so you can look at it. Reads the board file on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideNotop
widthNo
heightNo
qualityNobasic
board_pathYesA .kicad_pcb file, absolute or relative to the workspace.
output_pathNoPNG path; default renders/<name>-<side>.png next to the board.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and the description adds context that it reads the board file from disk and returns the rendered image. However, it does not clarify that rendering writes a PNG file to disk (the reason readOnlyHint is false) or note the default output location, which the schema covers instead.

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?

Two compact sentences, front-loaded with the core action and output. "Reads the board file on disk" is slightly redundant given the schema's board_path description but still clarifies the input source.

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?

There is no output schema, and the description adequately conveys the return (the image itself). However, for a 6-parameter tool with only 33% schema coverage, it leaves the rendering options (side, quality, dimensions) unexplained, so it is not fully complete.

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?

Schema description coverage is only 33% — side, width, height, and quality are undocumented, and the description adds no semantics for any of these. With low coverage the description should compensate for the missing parameter meaning, but it does not.

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 (Render), resource (the board), output format (3D PNG via kicad-cli), and delivery method (returns the image). An agent can distinguish this from sch_render since it operates on the board rather than the 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?

"so you can look at it" implies a visual-inspection use case, but there is no explicit when-to-use guidance and no sibling named as an alternative (e.g., sch_render for schematics). Usage is only implied.

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

review_boardA
Read-onlyIdempotent

Review a board the way a fab and a layout reviewer would: DRC and unrouted connections, zone fill state, footprints outside the outline, manufacturability against the fab's published limits (tracks, vias, annular rings, hole spacing, edge clearance, silkscreen), track widths on power nets, zone stitching, and decoupling capacitor distance. Every check reports PASS, WARN, FAIL or UNVERIFIED with its evidence and the source of its limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
fabNoWhose manufacturing limits to check against. jlcpcb picks 2- or 4-layer limits from the board.jlcpcb
board_pathYesA .kicad_pcb file, absolute or relative to the workspace.
schematic_parityNoInclude DRC's schematic parity check when a schematic exists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fabNo
kindYes
checksYes
countsYes
targetYes
verdictYesWorst verdict of the checks that ran. Unverified checks are listed separately and never hidden.
duration_sYes
unverifiedNoChecks that could not run, with their reasons in the check summaries.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds real value by disclosing the result vocabulary (PASS/WARN/FAIL/UNVERIFIED) and that each finding carries evidence and a limit source, which goes beyond the annotation set.

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 a dense but purposeful enumeration of checks, closing with the output contract. The single long middle clause is heavy but every listed check earns its place; no filler sentences.

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 multi-check review tool with a full schema and an output schema present, the description covers the check surface and result semantics adequately. It does not explain how failures are grouped or whether it requires a schematic, but the output schema absorbs the return-value burden.

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 100%, so the schema already documents board_path, fab enum behavior, and schematic_parity. The description adds no parameter-level syntax or format detail, so the baseline 3 is correct.

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?

Specific verb+resource ('Review a board') followed by an explicit enumeration of the checks performed (DRC, zone fill, footprint-outline, manufacturability, power-net widths, stitching, decoupling). It reads as a superset of siblings like run_drc, but never names them, so an agent must infer the distinction rather than being told.

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 framing 'the way a fab and a layout reviewer would' implies a comprehensive multi-check review, which contrasts implicitly with the narrower run_drc/route_check siblings. However, there is no explicit when-to-use, no when-not-to-use, and no named alternative, so guidance is only implied.

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

review_projectA
Read-onlyIdempotent

The full review of a project: every schematic check followed by every board check, in one report with one verdict and the list of checks that could not run.

ParametersJSON Schema
NameRequiredDescriptionDefault
fabNoWhose manufacturing limits to check against. jlcpcb picks 2- or 4-layer limits from the board.jlcpcb
pathYesA project directory or any file in it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fabNo
kindYes
checksYes
countsYes
targetYes
verdictYesWorst verdict of the checks that ran. Unverified checks are listed separately and never hidden.
duration_sYes
unverifiedNoChecks that could not run, with their reasons in the check summaries.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context—it is a compound run producing one verdict plus a list of checks that could not run—but does not cover cost, runtime, or failure handling.

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?

A single sentence, front-loaded with the core action and scope, with zero filler. Every clause 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?

With an output schema present and annotations covering the safety profile, the definition needn't explain return values, and it still conveys the compound nature and the verdict+failed-checks output. Only the absence of any selection guidance keeps it from being fully complete.

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 100%, so both parameters (path and the fab enum) are already fully documented in the schema. The description adds nothing beyond that, making the baseline 3 appropriate.

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 ('full review of a project') with explicit scope: every schematic check plus every board check in one report. This scope contrast lets an agent distinguish it from the individual review_schematic and review_board siblings 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 compound scope implies 'use this for an all-in-one review rather than the per-layer review tools,' but no sibling is named and there is no explicit when-to-use/when-not guidance. Usage is inferable rather than stated.

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

review_schematicA
Read-onlyIdempotent

Review a schematic: ERC, footprints assigned, values set, annotation, power nets driven, decoupling present, bill-of-materials summary, and the honest state of SPICE simulation. Every check reports PASS, WARN, FAIL, INFO or UNVERIFIED with its evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
schematic_pathYesA .kicad_sch file, absolute or relative to the workspace. Any sheet of the project works; the root sheet is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fabNo
kindYes
checksYes
countsYes
targetYes
verdictYesWorst verdict of the checks that ran. Unverified checks are listed separately and never hidden.
duration_sYes
unverifiedNoChecks that could not run, with their reasons in the check summaries.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and non-open-world, so the safety profile is covered. The description adds genuine value beyond that by disclosing the result taxonomy (PASS/WARN/FAIL/INFO/UNVERIFIED) and that each check carries its evidence, which shapes how the agent should interpret the response.

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?

Two sentences, front-loaded with the verb and resource, followed by the scope list and result semantics. The check list is dense but every item earns its place; minimal 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 not be explained, and the parameter is fully documented in the schema. The description adequately establishes scope and result interpretation; only the sibling routing (vs run_erc/review_board) is missing.

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?

With a single parameter and 100% schema description coverage, the schema already fully documents schematic_path (format, absolute/relative, any-sheet fallback to root). The description adds nothing about the parameter, so baseline 3 applies.

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 (review) and resource (schematic), then enumerates the concrete dimensions checked (ERC, footprints, values, annotation, power nets, decoupling, BOM, SPICE). This clearly distinguishes it from review_board and review_project by resource, though it never explicitly names those siblings.

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 enumeration of checks implies a comprehensive review, but there is no explicit when-to-use guidance and no mention of alternatives such as run_erc (ERC only) or sch_netlist. An agent must infer the tool's scope and relationship to siblings entirely from the name and check list.

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

route_checkA
Read-onlyIdempotent

Measure every differential pair on a board: the routed length of each half, the skew between them against the interface's limit (Ethernet and MIPI 0.15 mm, PCIe and USB 3.0 0.1 mm, USB 2.0 0.15 mm by default, from the Compute Module 5 datasheet), the share of the pair that runs coupled at the net class's gap, width and gap deviations, and layer changes. Pairs are found by name (X_P/X_N, X_DP/X_DN, X+/X-); unrouted pairs are listed as such.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_pathYesA .kicad_pcb file, absolute or relative to the workspace.
project_pathNoThe .kicad_pro with the net classes; default: next to the board.
skew_limit_mmNoOverride the per-interface intra-pair skew limit for every pair.
via_length_mmNoLength added per via when measuring a half; default 1.6 mm, the board thickness.

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesNo
pairsYes
summaryYes
verdictYes
unpairedNoNets that look like half a pair but have no mate.
board_pathYes
project_pathNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real behavioral substance on top: the default skew thresholds per interface with their datasheet source (CM5), the 1.6 mm default via length, the pairing-name heuristics, and that unrouted pairs are surfaced rather than skipped.

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?

Two dense sentences, zero filler, and the core action is front-loaded before the supporting detail. The parenthetical list of interfaces and thresholds is information-dense rather than redundant, so length is justified even if slightly packed.

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 pairing detection, defaults, and threshold sourcing. What remains unstated is failure behavior (missing board, absent .kicad_pro for net classes) and whether results cover only differential pairs or all nets, but those are minor against the richness already 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?

Schema coverage is 100%, so a baseline of 3 would be defensible. The description goes beyond the schema by stating the default skew limits that skew_limit_mm overrides (0.15 mm Ethernet/MIPI, 0.1 mm PCIe/USB 3.0, 0.15 mm USB 2.0) and their origin, and by tying the via_length_mm default to board thickness, which gives the numbers real meaning.

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?

Opens with a specific verb+resource ('Measure every differential pair on a board') and then enumerates exactly what is measured: routed length per half, skew vs. interface limits, coupled share, and layer changes. It also states how pairs are discovered (X_P/X_N, X_DP/X_DN, X+/X-) and that unrouted pairs are reported. It is highly specific, though it never explicitly distinguishes itself from siblings like review_board, pcb_net_stats, or impedance_calc.

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 usage context (checking differential-pair routing quality on a .kicad_pcb), and the per-interface skew limits hint at the scope (Ethernet, MIPI, PCIe, USB). But it gives no explicit when-to-use or when-not-to-use guidance, and no routing to alternatives such as impedance_calc or review_board.

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

run_drcA
Read-onlyIdempotent

Run KiCad's Design Rules Check on a board with kicad-cli. The verdict counts clearance and other violations, unconnected items (unrouted nets), and schematic parity problems; a board with unrouted nets is never PASS. Works whether or not KiCad is open.

ParametersJSON Schema
NameRequiredDescriptionDefault
severityNoall
board_pathYesA .kicad_pcb file, absolute or relative to the workspace.
all_track_errorsNoReport every track error instead of the first per track.
schematic_parityNoAlso compare the board against the schematic next to it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNo
kindYes
notesNo
countsNoerrors, warnings, excluded, unconnected, parity, total.
sourceYes
commandNo
verdictYes
findingsNo
exit_codeNo
truncatedNo
duration_sNo
report_pathNo
kicad_versionNo

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 the safety profile is covered. The description adds real value beyond that by disclosing verdict semantics: what the result counts (clearance violations, unconnected items, schematic parity) and the non-obvious rule that unrouted nets can never be PASS.

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?

Three tight sentences with no filler, front-loaded with the action and resource. The verdict details and the unrouted-nets rule each earn their 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?

An output schema exists, so return format need not be explained, and the description covers the board_path input adequately through the schema. The main residual gap is the undocumented severity enum values, but overall the definition is complete enough to call the tool correctly.

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 75%, above the midpoint, so the schema does most of the work. The description references schematic parity in the verdict, loosely tying to the schematic_parity flag, but does not explain severity levels ('default','all','error','warning') or the all_track_errors switch. Baseline 3 is appropriate.

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 ('Run') and resource ('Design Rules Check on a board') plus the underlying tool (kicad-cli). It further specifies what the check counts, which sharpens the purpose. It does not explicitly differentiate from the closest sibling run_erc, relying on 'board' to imply the 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?

Usage is implied (run this to check a board's design rules), and 'Works whether or not KiCad is open' is a useful operational note. However, there is no explicit when/when-not guidance and no mention of alternatives like run_erc or route_check for schematic or routing checks.

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

run_ercA
Read-onlyIdempotent

Run KiCad's Electrical Rules Check on the whole schematic hierarchy with kicad-cli and return a verdict (PASS, WARN, FAIL, or UNVERIFIED when no report was produced) with every finding, keyed by stable ids and item UUIDs. Works whether or not KiCad is open.

ParametersJSON Schema
NameRequiredDescriptionDefault
severityNoall (default) includes excluded violations flagged as excluded; default is errors and warnings only.all
schematic_pathYesA .kicad_sch file, absolute or relative to the workspace. Any sheet of the project works; the root sheet is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNo
kindYes
notesNo
countsNoerrors, warnings, excluded, unconnected, parity, total.
sourceYes
commandNo
verdictYes
findingsNo
exit_codeNo
truncatedNo
duration_sNo
report_pathNo
kicad_versionNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description is not obligated to restate those. It adds real value beyond them: the verdict vocabulary (PASS/WARN/FAIL/UNVERIFIED), the reason UNVERIFIED can occur (no report produced), that findings are keyed by stable ids and item UUIDs, and that execution shells out to kicad-cli independently of a running app.

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?

A single front-loaded sentence with the verb and scope first, the return contract second, and the environment note last. Dense but every clause carries information; the nested parenthetical slightly hampers scanability.

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 enumerated, yet the description still summarizes the verdict model. Combined with the whole-hierarchy scope and the runtime-dependency note, an agent has what it needs; only error/timeout behavior for the underlying kicad-cli invocation is unaddressed.

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 100%, including the severity enum's semantics, so the schema carries the parameter burden and a baseline of 3 applies. The description adds nothing about schematic_path or severity, but nothing is left ambiguous either.

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 (Run), a specific check (KiCad's Electrical Rules Check), and an explicit scope (the whole schematic hierarchy) via a named engine (kicad-cli). This cleanly separates it from the PCB-side sibling run_drc without requiring the schema to be opened.

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 tool's role - run it to validate a schematic's electrical rules - and the note that it "works whether or not KiCad is open" is a mild environmental condition. However, it never states when to prefer this over run_drc, review_schematic, or kicad_doctor, and no prerequisites are given.

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

sch_get_symbolA
Read-onlyIdempotent

One placed symbol in full, with every pin's number, name, electrical type and sheet position, which is what you need to wire to it.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesReference designator, e.g. U1.
schematic_pathYesThe .kicad_sch sheet the symbol is on.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dnpNo
refYes
pinsNo
unitYes
uuidYes
x_mmYes
y_mmYes
valueNo
lib_idYes
mirrorNo
rotationYes
footprintNo
propertiesNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so the safety profile is fully covered. The description adds only what content is returned (pins with numbers/names/types/positions), which is largely redundant with the output schema; it adds little behavioral context 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?

A single sentence that front-loads the resource and its returned detail, with the use-case clause last. Every clause contributes; 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?

Given the simple retrieval scope, full schema coverage, rich annotations, and an output schema, the description supplies enough to call the tool correctly. It could mention error behavior for a missing ref, but that is a minor omission for a read-only getter.

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 100%, with both required parameters (schematic_path, ref) documented in the schema. The description adds no syntax or format details for ref or path, so the schema carries the burden and baseline 3 applies.

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 resource ('one placed symbol') and enumerates the returned pin attributes (number, name, electrical type, sheet position), so an agent knows it retrieves a single symbol's full pin-out. It does not name sibling tools such as sch_list_components or sym_info to differentiate, but the scope 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?

Provides a clear use case – 'what you need to wire to it' – which tells the agent to call it when pin-level wiring data for a specific placed symbol is required. It offers no explicit exclusions or named alternatives, so the agent must infer that list-level tools are for enumeration.

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

sch_list_componentsA
Read-onlyIdempotent

Every placed symbol on one sheet, read from the file: reference, library id, value, footprint, position, rotation, unit, properties and optionally pin coordinates. Works with KiCad closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
ref_prefixNoOnly references starting with this, e.g. R or U1.
include_pinsNoInclude every pin with its sheet coordinates.
include_powerNoInclude power symbols (#PWR, #FLG).
schematic_pathYesThe .kicad_sch sheet to list; each sheet is listed on its own.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
schematicYes
truncatedNo
componentsYes
sheet_uuidYes
instance_pathYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior. The description adds meaningful operational context by stating it reads from the file and works while KiCad is closed, plus it discloses optional pin-coordinate inclusion. It does not cover pagination/limit behavior, but the annotation bar is already met.

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 front-loaded: the core action and scope come first, followed by the returned fields and the important closed-file note. Every sentence earns its place without redundant preamble.

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 rich annotations and an output schema, the description does not need to explain return values or safety. It clearly covers the core listing behavior and one key operational constraint, though it could better address multi-sheet handling or alternative 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 80%, so most parameters are already documented. The description mentions optional pin coordinates, which loosely maps to include_pins, but it does not add meaningful semantics for ref_prefix, include_power, or limit beyond the 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 (list) and resource (every placed symbol on one schematic sheet), so an agent can tell this is a schematic-component listing tool. It does not explicitly distinguish itself from close siblings such as sch_get_symbol, so it misses the top band.

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 description: list components from one schematic sheet, and it notes this works with KiCad closed. However, it gives no explicit when-to-use/when-not guidance or alternative tool routing against siblings like sch_get_symbol or pcb_list_items.

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

sch_netlistA
Read-onlyIdempotent

The resolved connectivity of the whole schematic hierarchy: every net with its nodes (ref, pin, pin function, pin type), every component, every sheet. Exported by kicad-cli from the root sheet and cached until any schematic file changes. This is the source of truth for 'what connects to what'.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoIgnore the cache and export again.
max_netsNo
schematic_pathYesA .kicad_sch file, absolute or relative to the workspace. Any sheet of the project works; the root sheet is used.
include_componentsNoInclude the component list (value, footprint, sheet, pins).

Output Schema

ParametersJSON Schema
NameRequiredDescription
netsYes
sheetsYes
sourceYesRoot schematic the netlist was exported from.
commandYes
cache_hitYes
net_countYes
truncatedNo
componentsYes
netlist_pathYes
component_countYes

TDQS

A4/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 the bar is met; the description adds genuinely useful behavior beyond them by disclosing the cache and its invalidation condition ('cached until any schematic file changes') and the root-sheet-export mechanism.

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?

Three tight sentences, front-loaded with what is returned, then provenance/caching, then the one-line value proposition. No filler or restatement of the tool name.

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 caching, refresh, and multi-sheet path resolution are all covered. The only real gap is the truncation behavior implied by max_nets.

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 75%, so most parameters are self-documented and the 3 baseline applies. The description elaborates on cache/refresh semantics, but says nothing about max_nets or what happens when the net count exceeds it, leaving that one parameter's behavior opaque.

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 resource (resolved connectivity of the whole schematic hierarchy) and enumerates exactly what is returned: nets with nodes, components, sheets. The closing claim 'source of truth for what connects to what' cleanly separates it from siblings like pcb_net_stats or sch_list_components.

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 provenance (exported by kicad-cli from the root sheet) and the caching lifecycle, which implies when the tool is appropriate and when refresh is needed, but it never names an alternative (sch_trace, pcb_net_stats) or states when this tool is the wrong choice.

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

sch_renderA
Idempotent

Draw every sheet of the schematic to SVG (one file per sheet) or one multi-page PDF with kicad-cli, and return the file paths so the client can read and display them.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNosvg
output_dirNoOutput directory; default 'renders' next to the schematic.
schematic_pathYesA .kicad_sch file, absolute or relative to the workspace. Any sheet of the project works; the root sheet is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
filesYes
formatYes
commandYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (idempotentHint=true, destructiveHint=false, readOnlyHint=false), and the description adds real context beyond that: it writes files to disk, produces one artifact per sheet in SVG mode, and returns paths for the client to read. It does not say what happens to pre-existing files in the output directory, which is the one notable gap for a writing 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?

A single front-loaded sentence that carries purpose, mechanism, output shape, and return value with no filler or repetition.

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 detailed, yet the description still explains that paths are returned for display. Combined with the two schema-documented parameters, the definition is nearly complete; only overwrite/cleanup behavior for the output directory is 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 coverage is 67%, with schematic_path and output_dir already documented in the schema. The description adds meaning to the format enum by explaining that svg yields one file per sheet while pdf yields a single multi-page file, which an agent cannot infer from the enum values 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?

States a specific verb (render/draw), resource (every sheet of the schematic), the two output formats, the underlying engine (kicad-cli), and the return payload (file paths). It is clearly distinguishable from the sibling render_board tool, which handles the PCB side.

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 choice between svg and pdf is implied ('one file per sheet' vs 'one multi-page PDF'), but there is no explicit when-to-use guidance, no statement of preconditions (e.g. project must be opened), and no named alternative tool for other render targets. Usage is inferable but not spelled out.

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

sch_traceA
Read-onlyIdempotent

For one component, list each pin's net and everything else on that net. Unconnected pins have net null. Uses the cached netlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
pinNoPin number to restrict to; all pins when omitted.
refYesReference designator, e.g. U1 or R12.
schematic_pathYesA .kicad_sch file, absolute or relative to the workspace. Any sheet of the project works; the root sheet is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
refYes
pinsYes
valueYes
footprintYes
sheet_pathYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuinely useful behavior beyond them: unconnected pins return net=null, and results come from the cached netlist (a staleness/precondition caveat). It does not state what the cache-read implies for freshness, but the added context is 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?

Three short sentences, front-loaded with the core action, then the null-pin edge case, then the caching note. No filler or 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?

With an output schema present, annotations covering safety, and full schema descriptions, the description's job is mostly to add edge-case and precondition context, which it does (null nets, cached netlist). Only the freshness/lifecycle of the cache is unaddressed, keeping it just short of 5.

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 100%, so the schema already documents ref, pin, and schematic_path. The description only reinforces the single-component scope and the 'all pins when omitted' behavior, adding little beyond the schema. Baseline 3 applies.

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 gives a specific verb and resource: list each pin's net and all other members of that net, scoped to one component. That is clearly distinct from sch_netlist (whole-project netlist) even though the sibling is not named. It stops short of explicit sibling routing, so 4 rather than 5.

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 'for one component' versus a whole-netlist tool, and 'Uses the cached netlist' hints at a prerequisite (a netlist must already be built). However, no explicit when-to-use/when-not or named alternative (e.g., sch_netlist) is given, so this is minimum-viable guidance.

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

stackup_infoB
Read-onlyIdempotent

A stack-up preset: layers with thickness and permittivity, and the fab's published trace geometries per target impedance, with the source they were read from.

ParametersJSON Schema
NameRequiredDescriptionDefault
stackupNoPreset name: jlc04161h-7628, pcbway-4l-1.6mm or aisler-4l-1.6mm (aliases jlcpcb, pcbway, aisler); default JLCPCB's 4-layer JLC04161H-7628. The result lists every preset.jlc04161h-7628

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
tableYesFab-published width (w) and gap (s) per target impedance in ohm; empty when the fab publishes none.
layersYes
sourceYes
presetsNoEvery preset name impedance_calc and stackup_info accept.
thickness_mmYes

TDQS

B3.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, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered by structured fields. The description adds modest value by noting the data is the fab's published geometry plus the source it was read from (provenance), but says nothing about caching, network access, or freshness.

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?

A single front-loaded sentence with no filler; the returned fields are listed compactly. It is efficient, though the trailing 'with the source they were read from' clause is slightly dense and could be tightened.

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 the description need not explain return shapes, yet it still characterizes the payload; annotations cover the safety profile and the sole parameter is fully documented. The remaining gap is usage/routing context relative to sibling tools like impedance_calc.

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?

With a single parameter and 100% schema description coverage, the schema already documents the preset names, aliases, and default. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 applies.

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 names the resource precisely and enumerates its contents (layers with thickness and permittivity, trace geometries per target impedance, provenance source), which lets an agent know exactly what data comes back. However, the action is nominalized ('A stack-up preset:') rather than stated as a verb+resource, and it never distinguishes this lookup from siblings such as impedance_calc or fp_info.

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 when-to-use guidance, no prerequisites, and no mention of alternatives or exclusions. The only routing signal lives in the parameter description (available preset names/aliases), not in the tool description itself.

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

sym_infoA
Read-onlyIdempotent

Everything about one library symbol: description, datasheet, default footprint, footprint filters and the footprints that satisfy them, units, and every pin with its number, name and electrical type. Derived symbols are shown flattened, the way KiCad places them.

ParametersJSON Schema
NameRequiredDescriptionDefault
lib_idYesLibrary symbol id such as Device:R or MCU_Microchip_ATtiny:ATtiny1614-SS.
project_pathNoA project directory or any file in it; the project's own libraries (its sym-lib-table and fp-lib-table) are included and shadow global ones.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pinsYes
powerNo
unitsYes
lib_idYes
extendsNo
keywordsNo
datasheetNo
pin_countYes
fp_filtersNo
descriptionNo
library_pathYes
default_footprintNo
matching_footprintsNoFootprints that satisfy the symbol's footprint filters.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description does add one genuinely useful behavioral note beyond that: derived symbols are returned flattened as KiCad places them, which affects how output should be read. It says nothing about error behavior for an unknown lib_id or about output size/pagination, so it adds some but not rich context.

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?

Two sentences, front-loaded with the scope ('Everything about one library symbol') followed by the content list, with a single closing caveat about derived symbols. The long enumeration is dense but each item is informative 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 the description need not explain return structure, and annotations cover safety. For a read-only single-entity lookup with two well-documented parameters, the description is sufficient; only the lack of sibling routing keeps it from being fully complete.

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 100%; lib_id's format and project_path's library-shadowing semantics are fully documented in the schema itself. The description adds no parameter-level information (e.g., that project_path changes which symbol definition wins), so baseline 3 applies.

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 names a specific resource (one library symbol) and enumerates exactly what is retrieved: description, datasheet, default footprint, footprint filters, units, and every pin with number/name/electrical type. That is far more than a restatement of the name. It stops short of naming siblings (lib_search, lib_fetch, fp_info) that an agent might 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 Guidelines3/5

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

Usage is only implied: the exhaustive content list signals 'call this when you need full detail on a single known symbol', and the required lib_id implies a symbol already identified. There is no explicit when-to-use statement, no exclusions, and no routing to lib_search (to find a symbol) or fp_info (the footprint counterpart).

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. 35 tool updatesv0.1.0
    • First observedcapabilities
    • First observeddoc_facts
    • First observeddoc_fetch
    • First observeddoc_import
    • First observeddoc_list
    • First observeddoc_page
    • First observeddoc_sections
    • First observeddoc_text
    • First observedexport_bom
    • First observedexport_fab
    • First observedfp_info
    • First observedimpedance_calc
    • First observedkicad_doctor
    • First observedlib_fetch
    • First observedlib_index
    • First observedlib_search
    • First observedparts_search
    • First observedpcb_list_items
    • First observedpcb_net_stats
    • First observedpcb_summary
    • First observedproject_open
    • First observedrender_board
    • First observedreview_board
    • First observedreview_project
    • First observedreview_schematic
    • First observedroute_check
    • First observedrun_drc
    • First observedrun_erc
    • First observedsch_get_symbol
    • First observedsch_list_components
    • First observedsch_netlist
    • First observedsch_render
    • First observedsch_trace
    • First observedstackup_info
    • First observedsym_info

TDQS

A3.6/5.0

Scored across 35 tools

Disambiguation4/5

Most tools target distinct resources or workflows with clear prefixes, but the review tools overlap with specific checks such as run_erc, run_drc, and pcb_net_stats. An agent can usually distinguish them, though choosing between a focused check and a broader review may require care.

Naming Consistency4/5

Names are consistently snake_case and use recognizable domain prefixes such as pcb_, sch_, doc_, lib_, run_, and review_. The verb/noun pattern is not perfectly uniform, with noun phrases like pcb_summary and capabilities mixed with verb-first names, but the set remains readable.

Tool Count2/5

35 tools is heavy for an MCP server tool set and exceeds the rubric's 25+ threshold for likely excess. Although KiCad is a broad domain, several tools could be consolidated or exposed as subcommands to reduce selection and context burden.

Completeness4/5

The server covers a wide read/analyze surface: project inspection, schematic and PCB checks, libraries, fabrication outputs, documentation, parts lookup, and design reviews. If editing or modifying boards and schematics is in scope, those operations are a notable gap, but for an analysis/review layer the surface is fairly complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables natural language interaction with KiCad projects, schematics, and PCBs, supporting project management, design rule checking, netlist extraction, and datasheet RAG search.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language control of KiCad PCB design software through Claude Desktop, automating project creation, design rule checks, component management, export, and cost estimation.
    15
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to read and modify KiCAD PCB designs through the KiCAD IPC API, providing tools for board queries, footprint placement, track creation, DRC, and export.
    44
    14
    MIT