eda-agent
Provides an Altium Designer backend via a DelphiScript bridge, exposing around 450 tools for automating PCB design workflows in Altium Designer.
Provides tools for designing printed circuit boards in EasyEDA Pro, including searching the LCSC library, placing schematic parts, emitting connections, running ERC, importing schematics to PCB, placing footprints, routing tracks/vias/pads, drawing board outlines and silkscreen, adding copper pours/fills/keepouts, dimensions, running DRC, and exporting Gerber, BOM, pick-and-place, netlist, and DXF files.
Provides a KiCad backend for driving PCB design workflows through KiCad.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eda-agentsearch LCSC for an ESP32 module and place it on the schematic"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Easy-EDA-Claude-Agent
Let Claude design printed circuit boards in EasyEDA Pro: pick parts from the live LCSC library, draw a readable schematic, push it to the PCB, place, route, outline, run DRC and export the fabrication files, all through MCP while you watch the editor.
This is a fork of eda-agent by George
Saliba (Apache-2.0), focused on the EasyEDA Pro backend and hardened against
EasyEDA Pro 3.2 (international, pro.easyeda.com), which upstream did not
run against. The Altium Designer and KiCad backends are still here, unchanged;
their documentation lives in docs/UPSTREAM_README.md.
Experimental. It drives a real editor and can modify, save or delete design data. Work on a copy until you trust a workflow.
What it can do
Verified live on EasyEDA Pro 3.2.206, Windows 11, driven from Claude Code:
Stage | Tools | Status |
Find parts in the LCSC library |
| works |
Place parts from a plan |
| works |
Read where pins landed |
| works |
Wire nets, rail glyphs |
| works, avoids other nets' pins |
ERC, save schematic |
| works |
Schematic to PCB |
| works |
Place footprints |
| works |
Tracks, vias, pads |
| works |
Board outline, silkscreen |
| works |
Copper pour, fill, keepout |
| works |
Dimensions |
| works |
DRC, board statistics |
| works |
BOM, pick and place, netlist, DXF |
| works |
Gerber |
| needs EasyEDA's user session loaded, see limitations |
Autorouting |
| not available in EasyEDA 3.2 |
Anything without a named tool is reachable through easyeda_invoke, which calls
any method of EasyEDA's extension API directly and builds polygons from
{"$polygon": [x, y, "L", x, y, ...]}.
Related MCP server: jlceda-mcp-server
How it works
Claude Code ──MCP/stdio──> eda-agent (Python) <──WebSocket── EasyEDA Pro extension
127.0.0.1:49620 dials out (extensions/easyeda)The extension runs inside EasyEDA Pro and connects out to the local server, so EasyEDA has to be open with the extension enabled before any tool can reach it. Coordinates are in mils throughout.
Setup
Requirements: Windows, Python 3.11+, Node.js (only to rebuild the extension), and EasyEDA Pro 3.2.x, international edition.
Use a client whose region matches your account. A 4.x China-line client pointed at
pro.easyeda.comcalls/api/v5, which that server does not have: library search returns nothing, placement hangs and cloud saves silently fail. The fix is the matching client, not code.
Install the server:
git clone https://github.com/Nivakaran-S/Easy-EDA-Claude-Agent.git cd Easy-EDA-Claude-Agent python -m venv .venv .venv\Scripts\python -m pip install -e ".[dev]"Build the extension (or use a prebuilt
.eextfrom a release):.venv\Scripts\python extensions/easyeda/build.pyIn EasyEDA Pro: Settings > Extensions > Import, choose
extensions/easyeda/eda-agent-bridge.eext, enable it, and allow external interaction when asked. Without that permission the editor never opens a socket.Register the server with Claude Code:
claude mcp add -s user eda-agent -- <repo>\.venv\Scripts\python.exe -m eda_agent --backend easyeda --no-dashboardOpen a project in EasyEDA, then eda-agent > Connect to eda-agent from the top menu. In Claude Code,
easyeda_pingshould answer withbuild_matches: true.
Designing a board
The schematic comes from a plan, not from placing parts one by one:
Describe the circuit. Claude writes a
DesignPlan(parts with LCSC numbers, nets) and checks it withdesign_validate_plan.easyeda_search_devicesresolves each part to a library uuid.easyeda_emit_plan+easyeda_run_planplace the symbols.easyeda_get_schematic_pin_positionsreads the real pin positions, andeasyeda_emit_connectionsturns them into wires and rail glyphs.easyeda_run_erc,easyeda_save_schematic, theneasyeda_import_schematic_changesto bring it to the board.Place footprints, draw the outline with
easyeda_add_polylineonBOARD_OUTLINE, route witheasyeda_add_line, pour ground witheasyeda_add_zone, theneasyeda_run_drcand the exports.
Always read pin numbers back after placing a part. LED and diode symbols in the LCSC library do not agree on whether pin 1 is the anode.
Known limitations
No autorouter.
pcb_Document.autoRoutingis declared in EasyEDA's types and absent at runtime. Tracks are drawn segment by segment.Gerber and cloud save need the user session. Both read the logged-in user from EasyEDA's
/api/user. When that request keeps getting reset, they fail withCannot read properties of null (reading 'user_uuid')or "the editor declined to save". Reload the client or change network, then retry.Slow cloud calls. Library search, placement and opening documents can take over 15 s on a weak link; they get a 60 s budget plus 15 s per placed part. A timeout is not proof of failure: read the design back before retrying.
Updating the extension needs a full restart. EasyEDA keeps the old build running in each open document's host after a re-import. Bump the version, import, quit EasyEDA completely and reopen it.
3.2 API quirks handled here: none of the API enums are injected as globals (a table generated from EasyEDA's own
api-types.d.tsstands in); lines and arcs are refused off copper (drawn as polylines instead); fill, region and pour need a closed ring; arcs need an explicit interaction mode, without which the editor hangs.
Other backends
The upstream Altium Designer and KiCad backends ship unchanged and are chosen
with --backend altium (the default) or --backend kicad. The Altium backend
registers around 450 tools (480+ with both backends registered) over a
DelphiScript bridge. Setup, the tool catalogue and their limitations are in
docs/UPSTREAM_README.md and
docs/BACKENDS.md.
Altium DelphiScript engine can crash
Some Altium tool paths raise a DelphiScript error and halt the polling loop.
In Altium's Script IDE press the red Stop button (or Ctrl+F3), then
restart the loop with File > Run Script... > StartMCPServer > Run. Details
are in docs/UPSTREAM_README.md.
Changes from upstream
See the commit history. In short: EasyEDA 3.2 support (enum fallbacks, closed
rings, off-copper fallbacks, export file names, arc arguments), longer budgets
for cloud-bound commands, polyline outlines in the outline and statistics
readers, copper-only layer_count, the pin-position tool, obstacle-aware wiring
and rail-glyph placement in the connection emitter, and polygon support in
easyeda_invoke. Regression tests are in tests/test_easyeda_3_2_fixes.py.
Development
.venv\Scripts\python -m pytest -n auto testsAfter editing extensions/easyeda/main.js, bump the version in
extensions/easyeda/extension.json and rebuild; EasyEDA ignores a re-import of a
version it already has. python scripts/gen_tool_reference.py regenerates
docs/TOOL_REFERENCE.md, the list of every tool.
More: docs/BACKENDS.md,
extensions/easyeda/README.md,
CONTRIBUTING.md, SECURITY.md.
License and credit
Apache License 2.0, see LICENSE and NOTICE. Original work copyright George Saliba (salitronic/eda-agent); modifications by Nivakaran-S.
Not affiliated with, endorsed by or sponsored by EasyEDA, JLCPCB, LCSC, Altium Limited, the KiCad project or Anthropic. Their names are trademarks of their respective owners.
Available Tools
480 toolsapp_activate_rowB
Invoke a row, rather than merely selecting it.
app_set_dialog_control(select_row=...) highlights a row.
This ACTS on it, which in a panel is the difference between
pointing at a document and opening it.
A click has no read-back, so the reply reports what was done and not what it caused.
| Name | Required | Description | Default |
|---|---|---|---|
| row | Yes | ||
| double | No | ||
| dialog_title | No | ||
| control_label | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that this performs an action/click and that the reply reports what was done rather than what the click caused, which is meaningful side-effect context. However, it omits permissions, reversibility, what `double` changes, and what practical effects may follow, leaving significant gaps for a UI mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the key distinction and every sentence contributes to that distinction or to the read-back caveat. The prose is somewhat indirect, using an analogy and backticked sibling reference, but it remains appropriately sized. It is clear and structured without excessive repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four parameters with 0% schema description coverage and no annotations, so description-side guidance is important. The description explains the action semantics and read-back limitation, but it does not explain how to identify the required row or control/dialog parameters, nor what `double` toggles. Given an output schema exists, the return-value caveat is sufficient, but invocation guidance remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and none of the four parameters are meaningfully explained. The description references a row conceptually and invokes a click-like action, but it does not define the required `control_label`, `dialog_title`, `row` format, or what `double` does. It therefore provides almost no parameter semantics to compensate for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action and resource: invoking a row rather than selecting it. It also names the contrasting sibling `app_set_dialog_control(select_row=...)`, so an agent can distinguish the two without opening either schema. The scope is slightly less precise than a 5 because it does not explicitly say which kind of row/panel context this applies to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use contrast: use this tool to ACT on a row, whereas `app_set_dialog_control(select_row=...)` only highlights it. The document-opening analogy makes the intended outcome concrete. It stops short of 5 because it does not mention other potentially relevant UI-action siblings or any when-not-to-use conditions beyond the selection case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_attachA
Connect to a running Altium Designer instance.
This verifies Altium is running and the polling script is responding. The Altium_API.PrjScr script must be running (StartMCPServer) in Altium.
Returns: Dictionary with attachment status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the key prerequisite (StartMCPServer script running), what the tool verifies (Altium running and script responding), and that it returns a dictionary with attachment status. It does not mention side effects or idempotency, but for a connection tool this is largely sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action, followed by essential verification details and prerequisite. Every sentence contributes meaning without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters) and the presence of an output schema, the description covers all necessary aspects: purpose, prerequisite, verification behavior, and return type. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to convey. The baseline score for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Connect to a running Altium Designer instance.' It also explains the verification aspect. However, it does not distinguish this tool from similar siblings like app_ping or app_get_status, which also check Altium's responsiveness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to connect and verify that Altium is running and the polling script is responding. It mentions the prerequisite that the Altium_API.PrjScr script must be running. However, it does not explicitly state when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_canvasA
Click or drag on the editor canvas, at screen coordinates.
THE CANVAS HAS NO NAMED CONTROLS, so every other tool here could not touch it. Placing, moving, rubber-band selecting and routing are pointer gestures and there was no way to make one.
With to_x/to_y this DRAGS, moving in steps rather than
jumping, because a jump reads as a click at the destination.
Without them it clicks.
NO READ-BACK IS POSSIBLE. The reply says what gesture was made and never what it did. Confirm with a bridge read, which can see the document, rather than trusting this.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| to_x | No | ||
| to_y | No | ||
| double | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, yet the description carries the full behavioral burden: it distinguishes click vs drag, explains the stepwise drag motion (jump reads as click at destination), discloses there is no read-back at all, and prescribes a bridge read to confirm effects. This is unusually rich disclosure for a gesture tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then behavior, then the read-back caveat—well ordered. Slightly wordy in the 'no named controls / there was no way to make one' passage, which restates the same point twice, but nearly every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description adds the crucial caveat that the reply reports only the gesture, not its effect, which an agent would otherwise miss. Drag semantics and the verification path are covered; only the `double` gesture is left unexplained, which keeps it just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and titles are bare, so the description must carry meaning. It clarifies x/y as screen coordinates and to_x/to_y as a drag target with stepwise motion, but leaves the `double` boolean completely undocumented in both schema and description—a meaningful gap since double-click is a distinct gesture.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (click/drag) on a specific resource (editor canvas) at screen coordinates, and explicitly contrasts itself with siblings: the canvas has no named controls, so 'every other tool here could not touch it.' An agent can tell this apart from app_invoke_element/obj_select without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains when to reach for this tool (canvas has no named controls, so pointer gestures are the only route) and points to a 'bridge read' for verification instead of this tool. It doesn't explicitly say to prefer app_invoke_element when a named control exists, so the exclusion is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_checkpointA
Snapshot the focused project so the session is revertible.
Copies the project's design files into a content-addressed store under
the workspace (unchanged files are deduplicated, so repeat checkpoints
are cheap). Take one before any risky autonomous edit; restore with
app_restore_checkpoint. This is the undo the live bridge otherwise
lacks.
Args: label: optional human note ("before routing pass"). save_first: flush dirty Altium docs to disk before snapshotting so the checkpoint reflects in-editor changes (default True).
Returns:
The checkpoint manifest summary (id, created, file_count, ...).
With save_first, also saved: True when the flush
worked, False with save_error and a note when it did
not. A checkpoint is still taken either way, but one taken
after a failed save holds the on-disk state only, which is
missing precisely the in-editor work you were protecting.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| save_first | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses content-addressed dedup and cheap repeat checkpoints, notes that a checkpoint is taken even if the flush fails, and warns that a post-failure checkpoint holds only on-disk state — precisely the failure mode that matters. That is behavior an agent could not infer from name or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key guidance is front-loaded in the first paragraph, and the Args/Returns blocks are dense rather than padded. Slight over-explanation in the save_error/note walkthrough keeps it from a 5, but nothing is wasted for a mutating tool with no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what is snapshotted, the storage model, the risk-mitigation use case, both parameters, and the failure return shape. An output schema exists, yet the extra note about the `saved`/`save_error` fields adds decision-relevant nuance rather than merely restating it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: it explains `label` with an example, and explains `save_first` including its default True and the reason for it (flush dirty Altium docs so in-editor changes are captured). Meaning is added well beyond the bare type/default in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Snapshot the focused project') plus the purpose (session revertibility), and names the counterpart tool app_restore_checkpoint. A reader can immediately tell this apart from save tools like app_save_all or proj_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to take one ('before any risky autonomous edit') and how it relates to the alternative ('restore with `app_restore_checkpoint`'). It also frames it as the undo the live bridge lacks, which disambiguates it from the design/review snapshot tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_close_documentA
Close ONE open document, found by its full path, whatever has focus.
Unlike closing through the workspace manager, which acts on the FOCUSED object, this closes the named document itself. It refuses a document that reads modified, and says whether it is really gone afterwards. The modified read can miss edits held in the editor, so save anything you care about first; a close of an edited document may still raise Altium's save prompt.
Args: file_path: the document's full path, as app_list_documents reports it. discard_changes: close it even when it reads modified, and LOSE the unsaved edits: the modified flag is cleared first so no save prompt appears. For scratch copies and documents Altium changed by merely opening them, never for work.
Returns:
{"closed": bool, "discarded": bool, "file_path": ...}; an
error when the path is not open, or when the document reads
modified and discard_changes is not set.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| discard_changes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the refusal condition, the destructive side effect of discard_changes (flag cleared, edits LOST, no save prompt), the post-condition check ("says whether it is really gone"), and the error cases. The caveat that the modified read can miss in-editor edits and that a save prompt may still appear is exactly the kind of non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key distinction and the destructive warning, and the Args/Returns blocks are readable. The Returns block partially duplicates the existing output schema, though it adds the error conditions, so the slight redundancy is defensible rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, focus-independent document close with a 0%-documented schema and no annotations, the description covers scope, refusal semantics, data-loss risk, error conditions and post-condition reporting. Even though an output schema exists, the description's mention of the error cases adds the missing piece an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: file_path is specified as the full path in the exact form app_list_documents reports it, and discard_changes is given meaning far beyond a boolean default (clears the modified flag first, suppresses the save prompt, loses edits, when it is appropriate).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Close ONE open document") plus the lookup key ("found by its full path") and the focus-independence ("whatever has focus"). It then explicitly separates itself from the workspace-manager close that acts on the FOCUSED object, so an agent can pick between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative path (closing via the workspace manager) and the condition that distinguishes it, then gives an explicit when-to-use / when-not-to-use rule for discard_changes: "For scratch copies and documents Altium changed by merely opening them, never for work." Preconditions (refuses a document that reads modified) are stated up front.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_contextA
Where you are, in one call. Run this before anything else.
THE FOUR FACTS THAT EXPLAIN MOST "WHY DIDN'T THAT WORK". Each has cost a session on its own, and each was individually available and individually unasked for:
Which document is focused, and what kind it is. Nearly every tool acts on the focused document. A pcb_ tool aimed while a library is focused does not always fail; it can resolve some other open document and report success for work you did not ask for.
Whether the running script matches the one on disk. DelphiScript caches compiled units, so a deployed fix does nothing until the script project is reopened. Symptom: a fix that "did not work".
What is unsaved. An edit that is real in memory and absent from disk reads as a tool that silently did nothing.
Whether the bridge is answering at all, as opposed to Altium being up.
This composes existing reads rather than adding a bridge call, so it is cheap and cannot disagree with the tools it summarises.
WHAT IT DOES NOT TELL YOU: which library component is current.
That is editor state with no read exposed, and the library
authoring tools depend on it. If a lib_add_* call lands somewhere
unexpected, set the target explicitly with
lib_set_current_component rather than assuming.
Returns:
{"backend": ..., "bridge_answering": bool, "script_version_match": bool, "active_document": {...}, "open_document_count": N, "unsaved": [paths], "warnings": [...], "next_step": ...}.
``warnings`` is empty when nothing needs attention.
``next_step`` is the single thing worth doing first, or empty.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so: it discloses the failure modes it exists to catch (pcb_ tools silently resolving a different open document, DelphiScript unit caching masking a deployed fix, in-memory edits absent from disk), states the call is cheap and derived from existing reads so it cannot disagree with the tools it summarises, and defines the empty-warnings and next_step semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the imperative and the one-line purpose, then a scannable bulleted list of the four facts, followed by the exclusion and return shape. Slightly verbose in places ("Each has cost a session on its own, and each was individually available and individually unasked for"), but nearly every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and would excuse omitting return values, the description still sketches the response fields and explains how to read warnings and next_step. Combined with the explicit non-coverage caveat, an agent has everything needed to decide to call it and to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document — the baseline for a no-arg tool applies. The description correctly spends no words on inputs and instead invests in output interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — a single-call situational read — and enumerates exactly the four facts it returns (focused document and kind, script/disk version match, unsaved edits, bridge health). It also explicitly bounds scope against nearby capabilities ("composes existing reads rather than adding a bridge call"), so an agent can tell it apart from app_get_status or app_get_active_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Run this before anything else" is an unambiguous when-to-use directive, and the closing section names an explicit exclusion with a concrete alternative: library component state is not covered, so use lib_set_current_component instead of assuming. Both the positive and negative routing conditions are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_create_documentA
Create a new blank document of a given kind and save it to disk.
Wraps IClient.OpenNewDocument + DoFileSave. The new document is
written to file_path and, by default, attached to the currently
focused project. Use this to create a .PcbDoc before running
update_pcb, to spin up a fresh .SchDoc, library, OutJob, etc.
Args: kind: Document kind, 'PCB', 'SCH', 'PCBLIB', 'SCHLIB', 'OUTPUTJOB', or any other kind Altium's server module registers under. file_path: Absolute path where the new document should live. Use Windows backslashes. name: Optional display name. Defaults to the filename. add_to_project: Attach the new file to the focused project. Default True. Set False to leave it as a free document.
The new document is focused before this returns, and focused
says whether that took: the library and board tools act on the
focused document, and a new one left behind the old meant the
next call wrote into the old one. A document that could not be
saved is an error (a missing folder is named), not a success with
saved: false.
Returns: Dictionary with kind, file_path, saved, focused, added_to_project.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | No | ||
| file_path | Yes | ||
| add_to_project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the new document is focused on return, why the `focused` flag matters for subsequent library/board calls, and that a failed save is raised as an error naming the missing folder rather than a silent `saved: false`. It does not address what happens if a file already exists at `file_path` or permission/overwrite behavior, which is the remaining gap for a disk-writing mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose sentence is front-loaded and the Args block is justified by the 0% schema coverage. The paragraph on focus/error semantics is slightly repetitive ('a new one left behind the old meant the next call wrote into the old one'), but each sentence informs a real calling decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param creation tool with no annotations, the description covers purpose, all parameters, focus side effects, project attachment, and error semantics, and even restates the return keys despite an output schema existing. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: it enumerates valid `kind` values, requires absolute paths with Windows backslashes for `file_path`, explains `name` defaults to the filename, and explains the `add_to_project` default and what False means. Every parameter gains meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+effect: 'Create a new blank document of a given kind and save it to disk,' and names the underlying operation. It distinguishes itself from near-siblings like app_save_document, app_close_document, and the lib_create_* tools by emphasizing a new blank document written to an explicit path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to reach for it ('Use this to create a .PcbDoc before running update_pcb, to spin up a fresh .SchDoc, library, OutJob'), giving concrete precursor contexts. It does not contrast with proj_add_document (which attaches an existing file to a project), so the alternative routing is left implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_detachA
Stop the Altium MCP polling loop. CALL THIS WHEN YOU'RE FINISHED.
While the eda-agent MCP server is connected, a keep-alive thread pings Altium every 30 s, which keeps Altium's scripting engine held by the polling loop, Altium's own script-backed UI commands (some ribbon buttons, Parameter Manager actions, etc.) may be unresponsive until the loop is released.
Call this tool once you've finished your Altium work for the session. It flushes every dirty document via save_all, then sends application.stop_server so the DelphiScript loop exits cleanly within ~500 ms and stops the Python keep-alive. Altium becomes immediately fully responsive.
NOTE: After detach, the Altium script has fully stopped. To run more MCP tools later in the same Altium session the user must re-launch StartMCPServer via File -> Run Script. Don't detach until you're confident you're done.
Returns: Dictionary confirming detachment
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load — and it does: it discloses an implicit side effect (flushes every dirty document via save_all before stopping), the ~500 ms shutdown latency, the fact that Altium's script-backed UI commands are blocked while attached, and the non-recoverable-without-user-action consequence of detaching. That is exactly the context an agent needs before an irreversible session-ending call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the imperative and the 'when finished' trigger, followed by justification and then the warning. It runs a bit long across several short paragraphs, but nearly every sentence carries a distinct, decision-relevant fact (keep-alive cadence, UI blocking, save_all, restart requirement).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers trigger, side effects (auto-save via save_all), mechanism, latency, post-state of Altium, and the recovery path. An output schema exists so the description need only note the return ('dictionary confirming detachment'), which it does. Nothing an agent needs to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so no parameter semantics are needed; per the rubric a no-parameter tool baselines at 4. The description correctly refrains from inventing parameters, though it could note the absence of options (no force/keep-session flag).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: stops the Altium MCP polling loop / keep-alive server, and is clearly distinguishable from siblings like app_attach, app_ping and app_save_all. It also names the mechanism (sends application.stop_server so the DelphiScript loop exits) so the agent knows exactly what is being terminated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit imperative ('CALL THIS WHEN YOU'RE FINISHED'), an explicit timing condition ('once you've finished your Altium work for the session'), and an explicit exclusion ('Don't detach until you're confident you're done', since re-attaching requires the user to relaunch StartMCPServer manually). The alternative path (keep the session attached, or use app_save_all at intermediate checkpoints) is implied by the described consequences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_diag_workspaceA
Diagnostic: enumerate workspace files via Altium's FindFiles helper.
Reports workspace_dir, the pattern used, match_count and the first 10 matching filenames. Used to validate the per-request file enumeration that the dispatcher relies on.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | request_*.json |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: the read-only nature is implicit in 'enumerate'/'Reports', and the truncation to the first 10 matches is explicitly disclosed. It omits the requirement that Altium be attached/active and doesn't state permissions, but the behavior disclosed is accurate and useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the purpose and followed by the reported fields. The trailing sentence about the dispatcher is slightly internal but still justifies the tool's existence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so restating return fields is not strictly needed, though it is harmless. The real gap is the sole input: pattern semantics are left entirely undocumented, which is the one thing an agent must get right to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter ('pattern', default request_*.json) with 0% schema description coverage. The description only refers to 'the pattern used' in the output list; it never explains the matching syntax (glob wildcards, case sensitivity, whether it is a filename or path pattern), so an agent must guess how to construct it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (enumerate workspace files) plus the underlying mechanism (Altium's FindFiles helper). It doesn't name any sibling or contrast itself with a general listing tool, but the 'Diagnostic:' prefix carves out a clear niche among the ~200 siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Used to validate the per-request file enumeration that the dispatcher relies on' gives a concrete context for when this tool is appropriate, which is more than most siblings offer. It stops short of naming when NOT to use it or what alternative listing tool to reach for instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_dialog_tabA
List a dialog's tab pages, or switch to one.
PROPERTY DIALOGS HIDE MOST OF THEMSELVES BEHIND TABS. Nothing could switch one, so app_set_dialog_control only ever saw the front page and reported it as the whole dialog: a control on any other page read as a control the dialog does not have.
With no name this lists the pages and which is selected.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| dialog_title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full burden, and it does disclose the key non-obvious behavioral trait: that controls on non-selected tab pages are invisible to app_set_dialog_control and were previously misreported as absent. It also states that listing reports which page is selected. It does not say whether switching persists, requires an open dialog, or errors on unknown names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb+resource, then a short rationale and the no-name rule; every sentence earns its place. The all-caps historical aside ('Nothing could switch one...') is slightly long-winded but it teaches a genuine gotcha, so it is defensible rather than wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation is correctly omitted. But for a 2-parameter tool with zero schema coverage and no annotations, the description leaves the dialog-targeting parameter and error behavior unexplained, which is not enough for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only implies that ``name`` is a tab page name and that omitting it triggers listing mode; ``dialog_title`` is never mentioned at all, leaving the agent unable to know how the target dialog is chosen or whether it defaults to the active dialog.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence states two concrete operations on a concrete resource: list a dialog's tab pages, or switch to one. The rationale paragraph explicitly distinguishes it from sibling app_set_dialog_control, so an agent can see why this tool exists. Not a 5 only because the dual mode (list vs. switch) is signalled purely by presence/absence of a parameter rather than stated as two distinct behaviors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: property dialogs hide controls behind tabs, and app_set_dialog_control only sees the front page, so you must switch tabs before reading controls there. The no-``name`` case is explicitly designated as the listing mode. Missing any statement about prerequisites (is a dialog required to be open?) or what happens when the named tab does not exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_drive_dialogsA
Answer dialogs reactively until none is left.
The reactive driver, which existed but was reachable only through the one wizard tool that used it. It reads whatever is on screen, classifies it, decides a press from that, and repeats. There is no scripted sequence, so a dialog appearing in a different order, or not at all, is handled rather than breaking a plan.
IT STOPS RATHER THAN GUESSING on a dialog it cannot classify,
and on anything that needs a human. dry_run is the DEFAULT:
it reports every decision and presses nothing, which is how to
see what a sequence would do before letting it.
THE TWO GATES ARE SEPARATE ON PURPOSE. allow_confirm answers
a yes/no question that moves an operation along;
allow_commit permits the press that changes the design.
Named for their consequences, because a caller reaching for one
rarely means the other.
Args: intent: "proceed" to carry the operation forward, or "cancel" to back out of whatever is open. allow_commit: permit the design-changing press. allow_confirm: permit answering a confirmation. dry_run: decide and report, press nothing. Default True. wait_first: seconds to wait for the first dialog, since a caller fires a command and then drives. budget: seconds before giving up on a wedged editor.
Returns:
Every observation and decision, plus committed,
stopped_for_a_human and why it finished.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | ||
| intent | No | proceed | |
| dry_run | No | ||
| wait_first | No | ||
| allow_commit | No | ||
| allow_confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses that it stops rather than guesses, that dry_run defaults to True, that the two gates are independent and named for their consequences, and that it stops for a human. It does not describe what state a stopped run leaves the editor in or any permission requirements, which keeps it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operative information is front-loaded and the Args/Returns block is well organized, but the prose leans rhetorical ('IT STOPS RATHER THAN GUESSING', 'THE TWO GATES ARE SEPARATE ON PURPOSE') and the aside about existing only through one wizard tool is historical noise an agent does not need to decide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and the description still summarizes the key result fields (committed, stopped_for_a_human). For a six-parameter reactive driver with no annotations, the stop conditions, defaults, and gate semantics cover what an agent needs to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% but the Args section documents all six parameters with meaning beyond the names: intent's two accepted values, the distinct consequences of allow_commit vs allow_confirm, dry_run's default and effect, and the units/role of wait_first and budget.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states the action precisely — reactively answer dialogs until none remain — and the body explains the read/classify/press loop, which is unambiguous. It does not distinguish itself from single-step siblings such as app_press_dialog_button or app_list_open_dialogs, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (this is the loop that drives a sequence of dialogs after firing a command), and the dry_run paragraph gives a clear 'try this first' recommendation. However, no sibling tool is named as an alternative for one-shot presses or read-only inspection, and there is no explicit when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_exit_active_commandA
Close a transaction a crashed handler left open in Altium.
THE TOOL FOR "A command is currently active and save cannot be completed at this time". While that state is set, EVERY save is refused and the editor asks whether to write a copy instead.
IT SURVIVES RESTARTING THE POLLING LOOP, because the state lives
in Altium's PCB server rather than in the script, and Escape in
the editor does not clear it either. MEASURED on 2026-08-25:
saves were being refused on a brand-new library, and the state
had been left hours earlier by lib_link_3d_model faulting
between PreProcess and PostProcess on an undeclared identifier.
It outlived several restarts.
Every PreProcess in this bridge is paired, including on its error paths, so this is not routine cleanup: it is recovery from a handler that DIED mid-transaction. AltiumScriptCentral ships the same one-line remedy as ExitActiveCommand.vbs.
Calling it when nothing is outstanding is harmless.
It saves nothing by itself. Run app_save_all afterwards and
check still_dirty.
Returns: Dict reporting whether each server accepted the unwind, plus the count of still-modified documents before and after.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses that the state lives in Altium's PCB server (survives restarts), that it is not routine cleanup, that it is idempotent-safe, and that it does not itself save. It does not say what happens to the in-flight transaction's changes when the unwind occurs, which is the one behavioral fact an agent might still need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical trigger and the follow-up instruction are front-loaded and the follow-up is stated up front. However, the dated case study ('MEASURED on 2026-08-25... lib_link_3d_model faulting between PreProcess and PostProcess') and the AltiumScriptCentral/VBS aside are narrative padding that does not change how an agent calls the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter recovery tool with an output schema, this covers trigger, persistence, safety of a false positive, and the required post-step. The only gap is that the return value is summarized but the agent is not told what to do with per-server acceptance failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly conveys that invocation is unconditional and needs no arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Close a transaction') and immediately scopes it to the precise failure state ('a crashed handler left open'). It further anchors the purpose to the exact user-visible symptom ('A command is currently active and save cannot be completed'), which no sibling tool addresses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition (saves being refused), an explicit non-cost for a false positive ('Calling it when nothing is outstanding is harmless'), and an explicit follow-up sequence ('Run app_save_all afterwards and check still_dirty'). It also warns that Escape and restarts do not resolve the state, so alternatives are ruled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_expand_tree_nodeA
Open or close a node in a tree, and verify the state changed.
Trees were readable and could not be OPENED, so anything nested inside one did not exist as far as a caller was concerned.
Args: control_label: the tree's label. node_name: the node to open, matched by name. expand: True to open, False to close. dialog_title: which dialog, when several are open.
Returns:
{"ok": true, "node": ..., "expanded": bool, "changed": bool}. changed is false when it was already
in that state, which is a success rather than a no-op to
worry about.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | ||
| node_name | Yes | ||
| dialog_title | No | ||
| control_label | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly delivers: it discloses that the call verifies the resulting state and pre-empts a likely misreading of the 'changed' flag by saying false means already-in-that-state and is still a success. It omits preconditions such as whether the owning dialog must be open or focused, and what happens when control_label or node_name is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operative sentence, followed by a short rationale block and compact Args/Returns sections. Every line is scannable and the motivation paragraph earns its place by explaining why a dedicated tool exists. No filler or repeated boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter UI-automation tool with an output schema, this covers the essentials, and the Returns block adds interpretive value about 'changed' rather than merely restating field names. The remaining gap is failure behavior: nothing says what an 'ok': false or a missing control implies, which matters for an automation step that may be chained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: all four parameters are explained, including matching semantics for node_name ('matched by name') and the conditional meaning of dialog_title. It does not restate the schema default of true for expand, nor say whether name matching is exact or case-sensitive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a concrete verb pair and resource: open or close a node in a tree, with the added guarantee of verifying state. The follow-up paragraph explains the gap it fills (trees were readable but not openable, so nested items were invisible), which makes the intent unambiguous. It does not name or contrast with siblings such as app_activate_row or app_set_dialog_control, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: you reach for this when nested content in a tree is inaccessible because the node is collapsed. The dialog_title note ('which dialog, when several are open') gives a light situational cue. There is no explicit when-not guidance and no routing to alternative UI tools for non-tree controls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_get_active_documentA
Get information about the currently active (focused) document.
Returns: Dictionary with active document information: - file_name: Document file name - file_path: Full file path - document_kind: Type of document (SchDoc, PcbDoc, etc.) - modified: True if the editor holds unsaved edits. A false is a floor rather than a clean bill, since the flag does not always propagate from ProcessControl. Returns empty dict if no document is active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does deliver a genuinely non-obvious caveat: the 'modified' flag is unreliable, so false is a floor rather than proof of a clean file. It also documents the empty-dict edge case when no document is active. It stops short of stating that the call is side-effect free or whether an attach/session is required, which would complete the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a compact field list, with the important caveat placed on the field it qualifies. The returns block partially duplicates the existing output schema, but the items earn their place by adding semantics (especially the 'modified' reliability note) rather than restating types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument getter with an output schema, the definition covers purpose, return shape, the unreliable-flag caveat, and the no-active-document case. The one gap is environmental context — whether the caller must be attached to an app instance and what happens across schematic/PCB/library contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to disambiguate; baseline 4 applies. The description correctly implies no arguments are needed and cannot mislead about them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: fetch info about the currently focused document, and enumerates the returned fields. It does not distinguish itself from nearby siblings that also surface document context (app_list_documents, obj_get_document_info, proj_get_focused), so an agent must infer which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the name and the phrase 'currently active (focused) document'; there is no explicit 'use this when X, use app_list_documents when Y'. The classic drop-in case exists (resolving what the user is looking at), but the agent has to reason it out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_get_clipboardA
Get text content from the Windows clipboard.
Returns whatever text is currently on the clipboard, which can be useful for reading data copied from Altium dialogs or reports.
Returns: Dictionary with "text" containing the clipboard content. Returns empty string if clipboard is empty or non-text.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a real behavioral trait: text-only extraction, with an empty string returned when the clipboard is empty or holds non-text data. That edge-case contract is genuinely useful for callers parsing the result, though it doesn't mention any app-attachment prerequisite or whether the clipboard is left untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short blocks, purpose first, then the return contract. No filler, no restatement of the title, and the most decision-relevant information leads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool this is essentially complete, and the tool has an output schema that already covers the return shape, making the "Returns:" block redundant but harmless. Nothing an agent needs in order 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. No misleading parameter guidance is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get text content from the Windows clipboard"), which is unambiguous and distinguishes it from the many UI/dialog automation siblings. It does not explicitly contrast with any sibling, but no other tool in the list touches the clipboard, so the resource itself is the differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a usage context ("useful for reading data copied from Altium dialogs or reports") but never states when to prefer this over alternatives such as app_read_window, app_read_panel, or app_screenshot for extracting text from the UI. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_get_preferencesA
Get key Altium Designer preferences.
Returns PCB preferences (snap grid, display unit) from the active board and schematic preferences (visible/snap grid) from the active schematic. Values are null if no PCB or schematic is currently open.
Returns: Dictionary with "pcb" and "schematic" sub-objects containing grid and unit settings
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a genuine behavioral trait — values are null when no PCB or schematic is open — and "Get" implies a non-mutating read. It does not say whether values reflect live editor state or persisted document state, nor whether reading has side effects on the active document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence and the null-value clause are front-loaded and earn their place. The trailing "Returns:" block restates the dictionary structure that the output schema already fully specifies, so it is largely redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read with a full output schema, the description covers what is read, from where, and the degenerate no-document case. Nothing an agent needs in order to call it correctly is missing; the only shortfall is guidance on when this tool is the right choice among the many app_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline is 4; there is nothing to disambiguate. The description correctly does not invent parameter guidance, and the scope-selection condition (active board vs. active schematic) substitutes meaningfully for what would otherwise be a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Get ... preferences") and narrows the scope precisely: PCB snap grid/display unit from the active board, schematic visible/snap grid from the active schematic. An agent knows exactly what comes back. It does not, however, distinguish itself from near-siblings such as app_get_status or app_get_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the null-value clause implies the tool is meant to be read while a board or schematic is open, which is a useful precondition. But there is no explicit when-to-use statement, no exclusion, and no pointer to an alternative (e.g., a setter counterpart or a status tool).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_get_reportA
Report the health of the MCP bridge, workspace, and Altium link.
One call to diagnose the plumbing without touching the design: package version, the script version on disk vs. what Altium has compiled, whether Altium is up, the live IPC round-trip time, the workspace location, and how many request/response/stop files are sitting in it (a backlog of stale request_*.json usually means a dead or wedged poller).
Returns: Dictionary with mcp_server_version, bundled_script_version, altium_running, altium_script_version, version_match, round_trip_ms (None if Altium is down), workspace_dir, workspace_exists, and a file_counts breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The phrase 'without touching the design' signals a read-only diagnostic, and the return list discloses key outputs including round_trip_ms being None when Altium is down. It does not explicitly clarify whether workspace files are only read or how auth/error conditions behave, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, and the description is organized into scope, diagnostic details, and returns. It is somewhat verbose because the Returns section repeats fields likely present in the output schema, but the parenthetical about stale request files adds useful diagnostic meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with an output schema, the description is largely complete: it explains what is checked, that it does not touch the design, and what key return fields mean. It could be stronger by clarifying side effects on workspace files, permission assumptions, and explicit routing among sibling diagnostic tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters and the input schema is an empty object, so there are no parameter semantics to explain. The baseline for a no-parameter tool is 4, and the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it reports health of the MCP bridge, workspace, and Altium link, and enumerates diagnostic signals such as version match, IPC round-trip time, and workspace file counts. It is clearly a diagnostic snapshot tool, but it does not explicitly contrast itself with nearby siblings such as app_get_status, app_ping, or app_diag_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: one call to diagnose plumbing without touching the design, and it explains that stale request files indicate a dead or wedged poller. However, it does not name an alternative tool or explicitly state when not to use this one, so it falls short of the highest level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_get_statusA
Check if Altium Designer is running and get status information.
Returns information about the Altium Designer process including:
Whether Altium is running
Process ID
Executable path
Whether the MCP bridge is attached
MORE THAN ONE ALTIUM. candidate_count and candidate_pids
list every instance, and selected_by says how pid was
chosen: the instance owning the bridge's status window, or the
only one with a visible window. When neither decides it, pid
is None, ambiguous is True and reason explains, and every
UI tool refuses rather than read the wrong process's dialogs.
MORE THAN ONE eda-agent SERVER. other_servers lists the other
servers recorded on this workspace (pid and start time), and
warnings says so when there are any. A warning only: several
sessions at once are allowed, and nothing is stopped.
Returns: Dictionary with status information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so well: it discloses the multi-instance selection algorithm (bridge status window owner, else the only visible window), the exact ambiguity failure mode (pid=None, ambiguous=True, reason populated, UI tools refuse), and that other_servers only produces warnings without stopping anything. These are non-obvious behavioral traits an agent could not derive from the empty parameter schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the return field list, with the more specialized multi-instance and multi-server caveats after. The trailing 'Returns: Dictionary with status information' is pure redundancy given the bulleted list and the output schema, and the bullets duplicate schema-documented fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only status probe with an output schema, the description covers the parts the schema cannot: instance disambiguation, refusal behavior under ambiguity, and the advisory-only nature of other-server warnings. Nothing needed to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter meaning to add or omit. The description instead spends its space on return-value semantics, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Check if Altium Designer is running and get status information', then enumerates exactly what status means (running, PID, executable path, bridge attachment). It does not explicitly differentiate itself from nearby siblings such as app_ping, app_context, or app_diag_workspace, so it falls 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.
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 a preflight/health check before invoking UI tools, and the note that 'every UI tool refuses' when ambiguous hints at the dependency. However, there is no explicit 'use this instead of X' routing against app_ping, app_context, or app_get_version, and no stated preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_get_versionA
Get the version of Altium Designer.
Uses Client.GetProductVersion internally. If that API is unavailable (older builds or restricted script context), the returned dictionary will omit "version" and include a "note" field instead.
Returns: Dictionary with product_name and either: - version: Full version string (when Client.GetProductVersion works) - note: Explanation when the version API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries full burden and does add real behavioral context: it discloses the internal dependency on Client.GetProductVersion and, importantly, the degraded-mode behavior where 'version' is omitted and a 'note' field appears instead. That failure-mode disclosure is exactly the kind of non-obvious trait the description should surface; only permission/auth and cost details are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a short fallback caveat and a Returns block. Slightly redundant to restate return keys when an output schema exists, but the text is short and each sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-arg read tool with an output schema, the description covers what an agent needs: what it returns and the important case where the version key is missing. The returns enumeration duplicates the output schema somewhat, but the fallback caveat is genuinely additive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to disambiguate; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the version of Altium Designer.' That is unambiguous and distinguishable from most siblings, though it never explicitly contrasts with the nearby app_get_status, which could plausibly also report version information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (you'd call it when you need the host application version, e.g. for diagnostics or compatibility checks), but there is no explicit when-to-use/when-not-to-use guidance and no mention of app_get_status as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_invoke_elementA
Press, set or expand an element through UI Automation patterns.
PATTERNS ARE NOT A SIMULATED CLICK. MSAA offers little beyond a default action, which is why the rest of this layer falls back to moving a real mouse. UIA exposes what a control actually implements: Invoke to press, Value to set text, ExpandCollapse to open a node. Those are supported operations, so they move no pointer, take no focus, and cannot land on whatever happens to be under the cursor.
That makes this the right tool for a WPF dialog, and for anything you want done while the user keeps working.
A CLIENT THAT DOES NOT LIST THIS TOOL can still reach it through
the dispatcher: tool_invoke(name="app_invoke_element", arguments={"name": "OK", "dialog_title": "Silkscreen"}).
Args: name: the element's name or automation id. A Button of that name is preferred over a label carrying the same text. dialog_title: which dialog. Empty uses the frontmost open dialog, or the main window when no dialog is open. text: set this value instead of pressing. expand: "true" or "false" to open or close a node instead.
Returns:
ok with what was done and, for a press in a dialog,
dialog_closed; or a refusal naming which pattern the
element lacks and its rectangle, so a real click remains
possible as a fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| text | No | ||
| expand | No | ||
| dialog_title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it: it states that operations move no pointer, take no focus, and cannot hit the wrong element, and it spells out both success ("ok" plus dialog_closed) and failure (refusal naming the missing pattern plus the element rectangle) shapes. It omits any warning that a press mutates application state and may be destructive or non-reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action statement is front-loaded and the Args/Returns blocks are tight and scannable. The MSAA-vs-UIA paragraph and the dispatcher example are longer than strictly needed, though both do carry real selection information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations, the definition covers mechanism, scope, parameter meaning, and both return branches, and an output schema exists so return values need no further elaboration. Missing only environmental caveats such as permission or timing/threading expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document all four parameters itself, and it does: name (element name or automation id, with Button preferred over a same-labelled label), dialog_title (empty means frontmost dialog, else main window), text (set value instead of pressing), and expand ("true"/"false" to open or close a node, which also explains why the parameter is a string rather than a boolean).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set and resource: press/set/expand an element via UI Automation patterns, and the body makes clear this is a pattern-based action rather than a synthetic mouse click. It never names the closest siblings (app_press_dialog_button, app_set_dialog_control, app_expand_tree_node), so the boundary with those is left to inference, which keeps it out of 5 territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"That makes this the right tool for a WPF dialog, and for anything you want done while the user keeps working" gives a clear selection criterion, and the Returns section explains the refusal path that tells you when to fall back to a real click. It stops short of naming the alternative tools that would be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_list_checkpointsA
List saved checkpoints for the current workspace, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden but only partially: it discloses workspace scoping and newest-first ordering, yet does not state that the call is read-only/non-mutating or whether checkpoints expire. It never contradicts the (absent) annotations, so no flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero waste, with the resource front-loaded and the ordering qualifier appended. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument read tool with an output schema already covering return shape, the description supplies scope and ordering, which is nearly everything an agent needs. Only the read-only nature is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing the description could add beyond the workspace scoping it already mentions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('saved checkpoints') plus the scope ('current workspace') and ordering ('newest first'), which distinguishes it from app_restore_checkpoint and app_checkpoint by name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 discovery step before app_restore_checkpoint, but the description never names that alternative or states when to prefer it over, say, app_list_documents. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_list_documentsA
List all documents known to the current Altium workspace.
Returns both project members and any free documents. Each entry
carries a loaded flag that distinguishes "listed as project
member on disk" from "actually resident in the editor".
Project-scope queries (query_objects, batch_modify, ...) only
iterate loaded sheets, if loaded is false for sheets you need
to hit, call load_project_sheets first.
Returns: List of document information dictionaries containing: - file_name: Document file name - file_path: Full file path - document_kind: Type of document (SCH, PCB, etc.) - loaded: True if the doc is resident in the editor server. False means it's a project member on disk whose editor state hasn't been opened yet. - modified: True if the editor holds unsaved edits. A false is a floor rather than a clean bill, since the flag does not always propagate from ProcessControl. app_save_all measures file timestamps instead of trusting it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that `loaded` separates on-disk project membership from editor-resident state, and warns that `modified` is a floor rather than a clean bill because it doesn't always propagate from ProcessControl. It never explicitly states that the operation is read-only or whether an attached session is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is well front-loaded, but the long Returns block enumerates file_name, file_path, and document_kind, which an existing output schema already covers. Only the `loaded` and `modified` commentary earns its place; the field-name bullets are redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, the return values needn't be restated, and the description supplies the semantic and reliability context an agent actually needs (loaded vs. resident, modified unreliability). The one meaningful gap is the absence of any contrast with proj_list_documents, which leaves a real sibling ambiguity unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate at the input level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List all documents known to the current Altium workspace") and clarifies scope by naming both project members and free documents. It never distinguishes itself from the sibling proj_list_documents, so an agent cannot tell the two apart from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing guidance: project-scope queries like query_objects/batch_modify only iterate loaded sheets, so call load_project_sheets first when `loaded` is false. That is real when-to-use advice, but it covers downstream follow-up actions rather than when to prefer this tool over proj_list_documents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_list_open_dialogsA
What Altium has on screen, what it says, and if it is stuck.
THE TOOL TO REACH FOR WHEN THE BRIDGE GOES QUIET. A silent
bridge looks identical whether Altium is showing a modal, busy
compiling, or dead. This answers it directly: blocked is
read from the main window being disabled, which is what Windows
does while a modal is up, and it works precisely when no other
tool can because it does not use the bridge at all. It reads the
Win32 process, so a blocked Altium answers it normally.
blocked: false ONLY MEANS THE MAIN WINDOW IS NOT DISABLED. It
does not mean the UI is alive. After Altium's UI crashed with the
process still running, this was reported reading a live pid,
blocked false and no dialogs. When the bridge is silent and this
says not blocked, look at the screen before calling it a livelock.
FOR EACH DIALOG you get the caption, the message text, every
button with its enabled state, and a kind:
error/warning/confirm-- something went wrong or a decision is being asked. These setneeds_a_human.nothing_to_do-- the operation completed with no work, for instance "Comparator Results (No Differences)" when the schematic and board already agree. A success, not a failure.engineering_change_order-- an ECO awaiting Validate and Execute.wizard/progress/unknown.
WHAT IT STILL CANNOT READ. Grids and owner-drawn lists hold
their content internally and expose no window text, so an ECO's
pending-change list is not readable. That is reported per dialog
as has_unreadable_content rather than being passed off as a
dialog with nothing in it. Read the Messages panel for the
change list.
Reads only. Presses nothing.
Returns:
Dict with blocked, dialog_count, dialogs,
needs_a_human, and a one-sentence summary.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the tool reads the Win32 process rather than the bridge, explains how blocked is derived, and warns that blocked:false does not prove the UI is alive, citing a real failure mode. "Reads only. Presses nothing." gives a clear safety profile, and the has_unreadable_content caveat prevents a false negative interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical routing sentence is front-loaded, and the dialog kind taxonomy is structured as a scannable list. It is longer than strictly necessary for a no-argument tool, with some repetition around the blocked semantics, but nearly every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool with an output schema, the description covers everything an agent needs: when to call it, how to interpret blocked, what each dialog kind means, what data is missing by design, and what the call does not do. Nothing necessary for correct invocation or interpretation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4; nothing in the schema needs interpretation. The description does not need to say more because calling it requires no arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource framing ("What Altium has on screen, what it says, and if it is stuck") and the tool name is immediately grounded in listing open dialogs. It is clearly separable from read-only UI siblings like app_read_window or app_ui_snapshot because it states it bypasses the bridge entirely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"THE TOOL TO REACH FOR WHEN THE BRIDGE GOES QUIET" is an explicit selection rule, and the description explains why other tools cannot serve that case. It also names an alternative path ("Read the Messages panel for the change list") when grid content is unreadable, so the agent knows where to go next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_list_panelsA
Altium's dockable panels that are currently on screen.
PANELS ARE NOT DIALOGS and were unreachable until now. A dialog
is a top-level window; a docked panel is a child of the main
frame, so app_list_open_dialogs never saw one. Projects,
Navigator, PCB, Properties and Messages all live here.
Args: offered_too: also read what View > Panels lists, which is what COULD be opened rather than what is open. That needs a real menu click and steals focus, so it is off by default.
Returns:
{"ok": true, "panels": [{name, rect, button_hwnd, content_count}], "count": N}, plus offered when asked
for. A panel is found by the tab it carries, so an empty list
comes with a note: it has been reported empty on AD 25
while Properties was open.
| Name | Required | Description | Default |
|---|---|---|---|
| offered_too | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so well: it explains that the default operation reports visible docked panels, that `offered_too` requires a real menu click and steals focus, and that an empty result can occur because panels are found by tab and may be reported empty on AD 25. These are exactly the side effects and caveats an agent needs before invoking it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and organized into clear prose, Args, and Returns sections. It is slightly long for a one-parameter list tool, but nearly every sentence adds useful distinction, caveat, or parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool's complexity is modest, and the description covers the key distinctions, optional behavior, side effect, and empty-list caveat. Since an output schema exists, the return format need not be explained, but the description still provides useful confirmation of the response shape and caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the description fully compensates for the single parameter by explaining that `offered_too` reads what View > Panels lists, representing what could be opened rather than what is open. It also explains the focus-stealing consequence and confirms the default is off.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as Altium's currently visible dockable panels and explicitly distinguishes it from `app_list_open_dialogs` by explaining that panels are child windows, not top-level dialogs. The examples of Projects, Navigator, PCB, Properties, and Messages make the scope concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage distinction against `app_list_open_dialogs`, explaining why that sibling missed docked panels. It also clarifies when to enable `offered_too` for potentially openable panels versus currently open panels. It does not explicitly route to related tools like `app_read_panel`, but the primary usage context is well established.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_open_panelA
Open a dockable panel by name, and confirm it appeared.
Goes through View > Panels, because Altium exposes no scripted
way to show a panel and application.execute_menu reports
success while invoking nothing. So this STEALS FOCUS, like every
menu click. Reading a panel afterwards does not.
A panel that is already open is reported as such and NOT clicked.
Those menu entries are toggles, so clicking one you already have
would close it, and asking for a panel is not a request to lose
it. When the panel cannot be seen after the click (it may have
been open with no tab the scan reads), the entry is clicked once
more so the panel is left as it was, and the reply says so with
toggled_back. Calling again does not help in that case.
Args: name: the panel's name as View > Panels spells it, e.g. "Projects", "Messages", "PCB", "Properties". settle: how long to allow for it to appear.
Returns:
{"ok": true, "name": ..., "opened": bool, "rect": ...}.
opened is false when it was already there.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| settle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses that the tool steals focus like any menu click, that it reaches a panel only via View > Panels because no scripted API exists, that menu entries are toggles so re-clicking would close a panel, and that an unverifiable result triggers a second click reported as `toggled_back`. That is unusually complete disclosure of side effects and failure modes for a mutation-by-UI tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action is front-loaded in the first clause, followed by rationale, edge cases, then Args/Returns sections. Some middle prose ('Those menu entries are toggles...' and the toggled_back explanation) is dense but each sentence carries a distinct behavioral fact. Slightly verbose for a 2-parameter tool but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still usefully spells out the reply shape including `opened` meaning false when already present and the `toggled_back` case, and it covers the focus side effect that no annotation declares. The one thing an agent still needs but cannot find here is how to discover a legal panel name or the prerequisite application state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare types plus a default of 1.2), so the description must compensate, and it does: `name` is defined by its exact source ('as View > Panels spells it') with four concrete examples, and `settle` is explained as 'how long to allow for it to appear'. The only gap is that settle's unit (seconds) is left to be inferred from the default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Open a dockable panel by name, and confirm it appeared') plus the verification side-effect, and the text later distinguishes itself from the read path ('Reading a panel afterwards does not [steal focus]'). It never names the sibling that lists valid panel names (app_list_panels) or app_read_panel directly, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the key operating conditions: already-open panels are reported, not clicked, and 'Calling again does not help in that case.' That is genuine when/when-not guidance for the retry case. It lacks guidance on how to obtain a valid panel name (presumably app_list_panels) and on prerequisites such as an open document.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_pingA
Test if the Altium script is responding and report script version.
Verifies that:
Altium Designer is running
The Altium_API.PrjScr script is running (StartMCPServer)
File-based communication is working
Also reads SCRIPT_VERSION from the .pas that Altium has compiled and compares it to the version in the bundled on-disk Main.pas. A mismatch means Altium is running a stale cached script: close the script project in the Projects panel and reopen it to recompile. Re-running StartMCPServer does not recompile, and a restart of Altium alone has not always been enough.
SCRIPT_VERSION only speaks for Main.pas. Each unit also reports a stamp that install-scripts writes from its content, and stale_units names any unit whose running compile differs from the files Altium loaded.
Returns:
Dictionary with:
- success: True if Altium responded
- mcp_server_version: version of this eda-agent Python package
(from eda_agent.__version__), identifies the MCP server
process currently handling tool calls
- altium_script_version: version the running script reports
(empty string if the script is too old to report it)
- bundled_script_version: version of the on-disk Main.pas
- version_match: True if Altium matches bundled script version
- altium_version: the Altium build itself, as Altium reports
it. Reported, never acted on: nothing here refuses to run
on an old build, because most of the toolset works on one.
It is here because a bug report without it costs a round
trip, and twice the answer changed the diagnosis.
- message: human-readable status (flags stale cache if detected)
- bundled_script_path: the Main.pas that bundled_script_version
was read from, so a mismatch can be traced to a file
- script_projects_open: the Altium_API.PrjScr paths Altium has
open, as the running script reports them (None when it is
too old to report them)
- script_location_match: True when one of those is in the
bundled or the install-scripts folder, False when none is
(version_match then describes a file Altium did not load),
None when unknown
- unit_stamps: each unit's stamp as the running script reports
it (None for a script too old to report them)
- stale_units: units whose running compile differs from the
files in stamps_compared_with; unstamped_units run from
copies install-scripts did not stamp
- other_servers: other eda-agent servers on this workspace,
each with pid and start time
- warnings: anything above worth acting on. Warnings only:
nothing here refuses or stops anything.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it explains that nothing here refuses or stops anything, that warnings are advisory only, that version_match can describe a file Altium did not load, and it names the exact remedy sequence (close/reopen the script project, note that re-running StartMCPServer or restarting Altium may not suffice). It also discloses the known limitation that SCRIPT_VERSION only speaks for Main.pas.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and stale-cache guidance are front-loaded and earn their place, but the bulk of the text is a per-field enumeration of return values that duplicates an existing output schema. The SCRIPT_VERSION/unit-stamp digression is useful but could be compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool, the description covers failure modes, cache staleness, and the meaning of ambiguous fields such as script_location_match and stale_units. It is complete on return-value semantics; the only gap is routing guidance relative to sibling diagnostics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies; the schema has nothing that needs semantic elaboration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (test whether the Altium script is responding) and the resource it inspects (Altium Designer, the Altium_API.PrjScr script, file-based comms), plus the version stamp. It does not distinguish itself from nearby siblings like app_get_status, app_get_version, or app_diag_workspace, so the agent must infer which diagnostic to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three numbered verifications and the stale-cache advice imply this is the first-line health/diagnosis call, but the description never says 'use this before X' or 'prefer app_get_version for Y'. No alternative is named despite several plausible siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_press_dialog_buttonA
Press ONE named button in an open Altium dialog.
The missing primitive. Dialogs could be listed, read and their checkboxes set, but the only code that pressed anything was buried inside a single task-specific driver, so answering an arbitrary dialog meant writing a script.
BY CAPTION, not position. Accelerator ampersands and a trailing ellipsis are ignored, so "Report Changes" finds "&Report Changes...".
IT WORKS WHILE ALTIUM IS BLOCKED, because it addresses the button's window handle over Win32 and never touches the bridge. That is the whole point: when a modal has the scripting engine stuck, this is what gets it unstuck.
IRREVERSIBLE PRESSES ARE GATED. A caption that commits a change
order or applies a wizard is refused unless
allow_irreversible is set, so a driver walking an unfamiliar
dialog cannot execute one by reflex.
For a whole sequence rather than one press, use
app_drive_dialogs, which decides each step from what is on
screen instead of from a script.
Args: button_caption: the visible caption. dialog_title: substring picking one dialog when several are open. Empty uses the first. allow_irreversible: permit a committing press.
Returns:
ok, the dialog and button actually matched, and whether
the dialog closed afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| dialog_title | No | ||
| button_caption | Yes | ||
| allow_irreversible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden: it discloses Win32 window-handle addressing, operation while Altium is blocked, caption normalization (ampersands/ellipsis), and the safety gate that refuses committing presses unless allow_irreversible is set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and well-structured with Args/Returns sections. Some backstory ('The missing primitive... buried inside a single task-specific driver') and emphasis ('That is the whole point') are less essential, but most text earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a three-parameter UI action with an output schema: parameters, matching rules, blocking behavior, irreversible-press policy, and return contents are all covered. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents all three parameters: button_caption as the visible caption, dialog_title as a substring selector with an empty-string default, and allow_irreversible as the gate for committing presses. This fully compensates for the absent schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Press ONE named button in an open Altium dialog.' The contrast with app_set_dialog_control (checkboxes) and app_drive_dialogs (sequences) makes the scope unambiguous even among many UI siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use app_drive_dialogs for a whole sequence rather than one press, and explains that this tool is for the blocked-modal case where the scripting bridge is unavailable. It also states the caption-matching rule and irreversible-press gating, leaving little to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_read_panelA
Read what is inside an open panel.
Takes no focus and moves nothing, so it is safe while a user is
working. The panel must already be open: use app_open_panel
first, or app_list_panels to see what is there.
Reads the WHOLE panel. It is not fast: Altium materialises its accessible tree lazily, so the first touch of a node costs about 116 ms and 162 rows is roughly thirty seconds. Slow and complete beats fast and partial.
Returns:
{"ok": true, "name": ..., "row_total": N, "grids": [{control, hwnd, row_count, rows}]}. Grids are
reported separately because a panel holds more than one and
they mean different things.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares the operation is non-focus-stealing and non-mutating, warns that the read is complete but slow with concrete numbers (lazy accessible tree, ~116 ms per node, 162 rows ≈ 30 s), and justifies the tradeoff ('slow and complete beats fast and partial'). That latency warning is the single most decision-relevant fact for an agent and would otherwise be invisible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then precondition, then cost, then return shape — a sensible order with no filler. Minor redundancy in 'takes no focus and moves nothing' (two phrasings of the same non-intrusiveness point) and the parenthetical return block is longer than needed given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations, one parameter, and an existing output schema, this covers safety, prerequisites, cost, and even why grids are reported separately. The only real hole is the undocumented `name` argument, which is the one thing the agent must supply to call it successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required `name` parameter, and the description never explicitly says the parameter is the panel name that comes from app_list_panels (or what format/identifier it takes). The connection is strongly implied by the workflow guidance, but an agent still has to infer the argument's source and shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read what is inside an open panel') and immediately scopes it ('Reads the WHOLE panel'), which separates it from partial-read siblings like app_read_window or app_ui_snapshot. It also names the related tools (app_open_panel, app_list_panels) so the agent can place it in the workflow 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('The panel must already be open') and names the exact alternatives to satisfy it ('use app_open_panel first, or app_list_panels to see what is there'). It also states the operating condition where this is appropriate ('safe while a user is working'), leaving no inference needed about when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_read_windowA
Read a window through UI Automation, which sees what MSAA cannot.
THE LAYER THAT WAS MISSING. This project read Altium three ways: window text, which returns nothing for anything without a handle; MSAA, which handles the VCL dialogs well and the WPF ones not at all; and OCR on the pixels. UIA sits between the second and the third.
It matters most for the case that forced OCR into existence. Altium's newer WPF dialogs have buttons that are NOT child windows, so EnumChildWindows finds nothing and MSAA has nothing to press. WPF is UIA-native, so those same buttons are ordinary elements here, with names, and they can be pressed properly with app_invoke_element.
WHAT IT STILL WILL NOT SEE. Delphi's TLabel owns no handle and publishes no accessible object, so its text exists only as pixels. Use app_screenshot there; that is what OCR is for and why it stays.
Returns:
{"ok": true, "count": N, "elements": [{name, type, automation_id, enabled, rect}], "text": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
| with_text | No | ||
| dialog_title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does a real job: it explains the visibility ceiling (TLabel text exists only as pixels), why that ceiling exists (no handle, no accessible object), and that WPF elements can be acted on via app_invoke_element. It does not state that the call is a pure read with no side effects, nor any auth/attach or timing requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first line is a clean, front-loaded statement of purpose, but the middle is project history and rationale ('THE LAYER THAT WAS MISSING. This project read Altium three ways...') that is longer than the actionable content. The 'Returns' block restates the output schema verbatim, spending space on information the agent already has.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return shape is covered by the output schema and limitations are well explained, but for a zero-required-parameter, zero-schema-documentation tool the description leaves the two knobs unexplained and never says how to discover or target the window in the first place. An agent knows why it would call this, but not precisely how to parameterize it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about the two parameters. It never explains that dialog_title selects which window is read (or what the empty default means), nor what with_text controls despite the returned 'text' array being its obvious output — an agent must guess at both.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line gives a specific verb and resource ('Read a window through UI Automation') and the middle section makes concrete what it returns (elements with name/type/automation_id/enabled/rect and text). It differentiates itself from MSAA and OCR-based reading and from app_screenshot, but never mentions the plausibly similar sibling app_ui_snapshot or app_read_panel, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the decisive use case explicitly — Altium's WPF dialogs whose buttons are not child windows — and names the alternative with the condition that selects it ('Delphi's TLabel ... Use app_screenshot there'). What is missing is prerequisite context such as needing an attached session (app_attach) or how to pick a dialog among several open ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_restore_checkpointA
Restore the focused project's files from a checkpoint.
Overwrites design files with the snapshot contents. Close the project
in Altium (or expect a reload prompt) before restoring, since Altium
holds documents open. With prune_added=True this is a true revert:
files created after the checkpoint are deleted; the default leaves
newer files untouched.
Args:
checkpoint_id: id from app_list_checkpoints.
prune_added: delete files absent at checkpoint time (default False).
Returns: {restored, removed, missing_blobs}.
| Name | Required | Description | Default |
|---|---|---|---|
| prune_added | No | ||
| checkpoint_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that design files are overwritten, that a reload prompt may appear, that Altium holds documents open, and precisely what prune_added destroys (files created after the checkpoint). The destructive vs. non-destructive default is spelled out explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and its risk, then the precondition, then the parameter nuance. The Args/Returns block is compact and every sentence adds information that isn't duplicated elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool, all decision-relevant information is present: risk profile, precondition, parameter semantics, and the source of the id. An output schema already exists, so the brief Returns note is a bonus rather than a necessity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description fully compensates: checkpoint_id is documented as coming from app_list_checkpoints, and prune_added's meaning, effect, and default are described in terms the bare boolean schema does not convey. No parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Restore the focused project's files from a checkpoint') with an explicit scope (the focused project) and immediately names what it overwrites. An agent can distinguish it from app_checkpoint and app_list_checkpoints 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operational precondition ('Close the project in Altium ... before restoring, since Altium holds documents open') and points to app_list_checkpoints as the source of the id. It does not explicitly state when not to restore or contrast with app_checkpoint, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_run_ui_commandA
Invoke a menu command AND answer the dialogs it raises.
The composite, and usually the one to reach for. Firing a menu command that opens a modal blocks Altium's scripting engine, so the two halves cannot be separate bridge calls: the second would never be answered. Both halves here are Win32, so they run in one call and the modal is no obstacle.
Doing this by hand meant arming a watcher process before firing the command, which is not something a caller should have to assemble.
THE GATES ARE THE DIALOG DRIVER'S. allow_confirm defaults ON
because a command invoked deliberately usually needs its "yes,
go ahead" answered, while allow_commit defaults OFF, so a
change order is presented rather than executed. dry_run
defaults OFF here, unlike app_drive_dialogs: naming a
command to run and having nothing happen is not what the caller
asked for.
Args: menu_path: pipe-separated, for example "Tools|Annotation|Force Annotate All Schematics...". Discover paths with app_click_menu(list_only=True). allow_commit: permit a design-changing press. allow_confirm: permit answering confirmations. dry_run: invoke the command but press nothing. may_steal_focus: opening a menu needs real input. wait_first: seconds to wait for the first dialog. budget: seconds before giving up. expect_dialog: part of the title of the dialog the command should open. When a different dialog (or none) appears, the reply fails at the menu stage and nothing is driven.
Returns:
ok, the menu result, and the full dialogs record.
ok is true only when the menu click AND the drive both
succeeded, so a command that opened something nobody could
answer does not read as a success.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | ||
| dry_run | No | ||
| menu_path | Yes | ||
| wait_first | No | ||
| allow_commit | No | ||
| allow_confirm | No | ||
| expect_dialog | No | ||
| may_steal_focus | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses that firing a modal-opening command blocks Altium's scripting engine, why it cannot be split into two bridge calls, that allow_commit defaults OFF so changes are presented rather than executed, that focus may be stolen, and that a mismatched dialog causes failure at the menu stage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the key routing advice, and the Args/Returns structure is scannable. The third paragraph ('Doing this by hand meant arming a watcher process...') largely restates the split-call point already made, so a sentence or two could be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter, mutating, focus-stealing UI composite with no annotations, the description covers invocation, gating defaults, failure semantics, and the AND-combination of the ok flag. An output schema exists, so the Returns section is supplementary rather than a gap-filler.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents all eight parameters in Args — including units (seconds for wait_first and budget), the pipe-separated menu path with a worked example, a discovery pointer (app_click_menu with list_only=True), and the safety default for allow_commit and allow_confirm.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb+resource: invoke a menu command AND answer the dialogs it raises. It immediately positions itself relative to siblings as 'the composite, and usually the one to reach for', and the blocking rationale explains why it exists alongside app_click_menu / app_drive_dialogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear default recommendation ('usually the one to reach for'), explains the modal-blocking condition that forces the composite, and contrasts its dry_run default with app_drive_dialogs. It stops short of an explicit 'when not to use this' (e.g. use app_click_menu when no dialog is expected), leaving that to be inferred from expect_dialog.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_save_allA
Flush every dirty Altium document to disk.
Mutation tools (pcb_place_tracks, move_component, modify_objects, ...) now mark documents as modified in-memory only. Changes stay fast because they skip per-operation disk writes. Call save_all at logical checkpoints, after a routing pass, before running DRC, or before closing, to persist everything.
Detach also triggers save_all automatically, so you don't need this as the very last step.
CHECK still_dirty, DO NOT ASSUME. Altium refuses to save while
a command is active in the editor and asks a human whether to
write a copy instead; DoFileSave does not raise when it declines.
MEASURED: this returned saved:true while every single save was
being refused. It now counts what is still modified afterwards,
and saved is false when anything is. If that happens, run
app_exit_active_command and retry.
Returns:
Dict with saved, still_dirty, and a reason when
documents remain unsaved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does so: it explains that mutation tools now write in-memory only, that Altium silently refuses saves while a command is active, that saved:true was previously misleading, and that saved is now false when anything remains dirty. The remediation (run app_exit_active_command and retry) is a level of operational detail rarely seen.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the material is well organized into purpose, when-to-call, caveat, remedy, and returns. It runs long and the "MEASURED" anecdote about the past bug is slightly padded, though it does justify the still_dirty warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Everything an agent needs to call this correctly is present: trigger points, the silent-failure mode, how to detect it, and how to recover. The output schema covers return shape, and the description still summarizes it, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline is 4 and there is nothing for the description to disambiguate. It additionally names the return keys (saved, still_dirty, reason), which is bonus context even though an output schema exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Flush every dirty Altium document to disk" gives a specific verb plus resource and scope (all documents, dirty only). It implies the distinction from the sibling app_save_document via "every," but never names that sibling explicitly, leaving a small inference step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit invocation points are listed: logical checkpoints, after a routing pass, before DRC, before closing. It also states when NOT to rely on it ("Detach also triggers save_all automatically, so you don't need this as the very last step") and gives a retry procedure when saves are refused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_save_documentA
Save ONE open document: file_path, or the focused one.
app_save_all writes every open document, so one that cannot
be written, a sheet in a read-only folder say, stops a save you
never asked for. This touches only the named document, never
changes focus and never walks the workspace.
saved is measured from the file's age on disk: Altium does
not report a declined save. was_modified says whether Altium
thought there was anything to write, and it misses edits made
through scripts: a board changed only by this server's tools read
false and was saved all the same. A save Altium declines while
a command is active reads saved false; run
app_exit_active_command and retry.
Args: file_path: Absolute path of an open document. Empty saves the focused document.
Returns:
file_path, saved, was_modified and a reason
when it was not saved. NOT_OPEN when the document is not open,
since only an open document can hold unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and succeeds. It discloses non-obvious behavior: `saved` is inferred from file age on disk because Altium does not report declined saves, `was_modified` misses script-made edits, focus/workspace are untouched, and command-active declines return `saved` false with a retry path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and sibling differentiation, then structured into behavioral caveats, Args, and Returns. Despite its length, every sentence adds operational value without redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, but the description still adds useful semantic meaning to return fields (`saved`, `was_modified`, `reason`, `NOT_OPEN`) and edge cases. For a one-parameter save tool with no annotations, this is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: `file_path` is defined as an absolute path to an open document, and the empty-string default is explained as saving the focused document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource: 'Save ONE open document: file_path, or the focused one.' It explicitly distinguishes itself from sibling `app_save_all` by contrasting single-document and all-document behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection guidance against `app_save_all`: the sibling may stop a save you never asked for when any one document cannot be written, while this tool touches only the named document. It also gives a concrete remediation workflow for declined saves during an active command.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_screenshotA
Capture Altium, or one dialog, to a PNG.
THE AGENT COULD NOT SEE THE UI. ui/ocr.py has been able to capture and read a window since it was written and none of it was exposed, so every judgement about what was on screen came from an accessible tree that omits anything drawn rather than placed. A picture settles what a tree cannot: which page is in front, whether a control is greyed, what a rendered dialog actually says.
Args: path: where to write the PNG. Defaults to the workspace directory, so the file is somewhere findable. dialog_title: capture that dialog rather than the main window.
Returns:
{"ok": true, "path": ..., "hwnd": ...}. Read the file to
look at it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| dialog_title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the non-obvious behaviour: it writes a file to disk (defaulting to the workspace directory), returns a JSON envelope with path and hwnd, and the agent must then read the file to actually see anything. It does not cover capture limits such as window size, off-screen or minimised windows, or multi-monitor behaviour, which are the obvious failure modes for a screenshot tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence and the Args/Returns block are front-loaded and efficient. The middle paragraph, however, is a developer-facing rationale about ui/ocr.py and the history of the tool — it justifies the tool's existence to a human reviewer rather than helping an agent decide or call it, and it inflates the definition considerably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, zero-required capture tool this is close to complete: destination, dialog targeting, return shape, and the crucial 'read the file afterwards' step are all stated. Since an output schema exists, the Returns block is partly redundant, but the pointer to read the PNG is real added value. Missing only edge-case behaviour for unusual windows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does: path is explained as the PNG destination with the workspace-directory default and the reason for it, and dialog_title is explained as selecting a dialog instead of the main window. Both of the two optional parameters gain meaning the bare schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line gives a specific verb and resource: capture the Altium window, or a single dialog, into a PNG file. That is clearly distinguishable from neighbouring tools such as app_read_window and app_ui_snapshot, since the output is an image rather than a text tree, though the description never names those siblings explicitly. The purpose is unambiguous but the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete usage rationale: use it when judgements must come from what is drawn on screen rather than from an accessibility tree that omits rendered elements — greyed controls, rendered dialog text, which page is in front. It does not name alternatives or state when not to use it, so an agent must infer that app_read_window/app_ui_snapshot remain the cheaper first choice for tree-visible content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_scroll_controlA
Scroll a list, grid or tree so more of it comes into view.
A LONG LIST HIDES ITS OWN CONTENTS. A virtualised DevExpress grid exposes roughly what is on screen, so a row further down did not exist as far as a caller was concerned, and the reply gave no hint that anything was missing.
Positive scrolls down, negative up. The reply reports whether
the rows actually changed: moved: false at the end of a list
is a real answer rather than a failure.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| dialog_title | No | ||
| control_label | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full load and does add real behavioural context: the virtualisation caveat, the sign semantics, and the crucial disclosure that 'moved: false' at the end of a list is a valid result rather than an error. It omits what happens on an unknown control_label, whether scrolling is animated/settled, and any permission or timing expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, which is good, but the all-caps emphasis and the long DevExpress-virtualisation sentence are wordier than the point requires. It is readable and mostly earns its space, yet could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 detail is not required, and the description wisely flags the one ambiguous return signal ('moved'). However, for a UI-automation tool with no annotations and no schema descriptions, the description leaves too much unsaid about the required identifier and the failure modes to be called complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does not. It explains the sign of the scroll amount but never names the 'lines' parameter, and gives no meaning for the required 'control_label' or for 'dialog_title' (e.g. how a control is identified inside a dialog). An agent still cannot resolve three of three parameters from prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource set ('Scroll a list, grid or tree') so an agent knows exactly the action and target. It does not name or contrast with the closest siblings (app_read_panel, app_expand_tree_node, app_activate_row), leaving that disambiguation to the agent's judgement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear motivating context: virtualised controls only expose on-screen content, so scrolling is needed to reach rows that 'did not exist' to a caller. Sign convention ('positive scrolls down, negative up') is stated. There is no explicit 'use this instead of X' routing, 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.
app_send_keysA
Send a key sequence to whatever currently has focus.
THE THINGS THAT TAKE NEITHER A CONTROL NOR A MENU: a canvas shortcut, a grid that commits on Enter, a dialog answered with Escape, a chord like Ctrl+Shift+D. Every other tool here addresses a control; this addresses the keyboard.
Space separated, each item a key or a '+' chord:
"escape" one key
"ctrl+s" a chord
"tab tab enter" three in orderModifiers: ctrl, alt, shift. Keys: enter, escape, tab, space, backspace, delete, the arrows, home, end, pageup, pagedown and F1 to F12. An unknown name is refused and the known ones listed, rather than sent as nothing.
THIS GOES WHEREVER FOCUS IS. Establish focus first, with app_click_menu or app_open_panel, and check the result afterwards: a keystroke has no read-back, so the reply says what was sent and never that it worked.
| Name | Required | Description | Default |
|---|---|---|---|
| sequence | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does: it warns the keystroke goes wherever focus is, states there is no read-back ('the reply says what was sent and never that it worked'), and documents the failure mode for unknown key names. These are exactly the behavioral traits an agent needs before invoking a focus-dependent input tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the keyboard-vs-control distinction, then syntax, then the focus caveat — a sensible order. The all-caps framing line and poetic spacing are stylistic flourishes that cost some density, but no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single-parameter tool with an output schema available and no annotations; the description still covers invocation format, preconditions (focus), and postconditions (no verification of success). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does thoroughly: space-separated token syntax, '+' chord notation, three worked examples, an explicit modifier list, an explicit key list, and the refusal behavior for unknown names. This adds substantial meaning beyond the bare `sequence: string` schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Send a key sequence to whatever currently has focus.' It also explicitly differentiates itself from siblings ('Every other tool here addresses a control; this addresses the keyboard'), so an agent can route between this and app_type_text or app_set_grid_cell 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use cases (canvas shortcut, grid that commits on Enter, dialog answered with Escape, chords) and names prerequisites/alternatives: 'Establish focus first, with app_click_menu or app_open_panel, and check the result afterwards.' That is explicit routing guidance, not implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_set_active_documentC
Set a specific document as the active (focused) document.
Args: file_path: Full path to the document to activate
Returns: Dictionary with result of the operation
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does not meet it. It says 'Returns: Dictionary with result of the operation,' which discloses nothing about failure modes (missing file, unopened document), whether the call is idempotent, or whether it changes visible UI focus.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and wastes no words. The Args/Returns block is generic boilerplate, and the Returns line adds little since an output schema already exists, but the overall length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, so the vague Returns line is not a real gap. What remains missing for a lone-parameter state-changing tool is error and prerequisite behavior, and that is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema offers only the title 'File Path.' The description does add meaning by specifying a full path to the document to activate, distinguishing it from a bare filename, but it gives no format example, extension expectations, or behavior for relative paths.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set a specific document as the active (focused) document.' This clearly separates it from the read-oriented sibling app_get_active_document and app_list_documents. It stops short of naming siblings explicitly, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no alternatives named. The only hint is the phrase 'active (focused) document,' which leaves prerequisites such as whether the target document must already be open entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_set_dialog_controlA
Read or CHANGE a control inside whatever dialog is open.
The other half of driving a dialog. Buttons are pressed by the dialog driver; this is for the checkboxes, radios and fields that decide what those buttons will DO.
FIND BY LABEL, not position. "Include Variants". Positions
move between versions and contexts, captions do not.
EVERY CHANGE IS VERIFIED. The new state is read back, and a click that silently did nothing is reported as a failure rather than as success. That matters here more than anywhere: a caller that believes an option was applied will go on to press something irreversible.
IT REFUSES RATHER THAN GUESSING when a control is DISABLED (Altium greys options that do not apply, and clicking one is at best a no-op), and when asked to switch a radio button OFF, which is not a thing a radio does.
SETTING IS NOT A TOGGLE. Asking for a state the control is
already in reports changed: false and clicks nothing, so
calling twice is safe.
Args: control_label: the control's visible label. checked: desired state for a checkbox. text: desired contents for an edit field. select_row: for a list, grid or tree, the row to select by name. Rows are matched by name for the same reason menu items are: positions shift and an index would pick the wrong one the first time the contents changed. dialog_title: substring to pick one dialog when several are open. Empty uses the first. list_only: change nothing, just report every control in the dialog with its role, state and whether it is enabled.
Returns:
For a read, the control list. For a change, ok,
changed and the state read back afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| checked | No | ||
| list_only | No | ||
| select_row | No | ||
| dialog_title | No | ||
| control_label | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well. It discloses verification/read-back semantics, failure reporting for silent no-op clicks, refusal behavior for disabled controls and radio-off requests, and idempotent 'changed: false' behavior for already-set states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, targeting strategy, and safety behavior before the Args section. It is somewhat long and uses emphatic caps and rationale that could be trimmed, but the length is largely justified by the tool's behavioral complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no annotations, and no schema descriptions, the description is complete enough to invoke the tool correctly. It also explains return values even though an output schema exists, adding useful behavioral context rather than leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all six parameters, and it does. It explains control_label as a visible label, checked/text as desired state, select_row as name-based row selection, dialog_title as a substring selector, and list_only as a read-only inspection mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read or CHANGE a control inside whatever dialog is open.' It immediately distinguishes its scope from adjacent dialog-driving tools by explaining that buttons are handled by the dialog driver while this tool handles checkboxes, radios, and fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is clearly framed: use label-based targeting, not positions; use this for controls rather than buttons; use list_only to inspect without changing. It also defines refusal cases (disabled controls, radio-off requests) and idempotent behavior. The only minor gap is that the alternative sibling tool is referred to generically as 'the dialog driver' rather than by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_set_dropdownA
Choose an option in a combo box or drop list, and verify it.
THESE WERE READABLE AND UNSETTABLE. combobox and droplist have
been reported by app_list_open_dialogs from the start, so a
caller could see a combo and its current value with no way to
change it, which is the same shape as a property that reads and
will not write.
Three routes are tried, cheapest first: the option's own default action, an accessible selection, then a real click on it. The value is READ BACK afterwards, so a route that runs and changes nothing is reported rather than believed.
Args: control_label: the combo's label. option: the option to choose, matched by name. dialog_title: which dialog, when several are open. list_only: report the options and change nothing.
Returns:
{"ok": true, "value": ..., "how": ..., "was": ...}, or
ok: false with offered listing what is there.
| Name | Required | Description | Default |
|---|---|---|---|
| option | Yes | ||
| list_only | No | ||
| dialog_title | No | ||
| control_label | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses the three fallback routes (default action, accessible selection, real click), that the value is read back so no-op routes are reported rather than silently believed, and the failure shape with 'offered' options. This is exactly the behavioral context an agent needs for a fragile UI automation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is well front-loaded, but the paragraph about the tool having been 'readable and unsettled' and the metaphor about 'a property that reads and will not write' is historical justification that does not help an agent decide or call. The args and returns sections are useful; the middle prose is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param UI mutation tool with no annotations, the description is thorough: it explains the attempt strategy, verification, and failure output. An output schema exists so return values needn't be spelled out, and the remaining gap is the absence of sibling routing guidance rather than missing behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents all four parameters meaningfully: control_label as the combo's label, option matched by name, dialog_title to disambiguate multiple open dialogs, and list_only as report-without-change. This goes well beyond bare names, though it stops short of format examples for control_label/dialog_title matching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Choose an option in a combo box or drop list, and verify it.' This is clearly distinct from siblings like app_set_grid_cell or app_set_dialog_control, which act on different controls. An agent knows exactly what the tool accomplishes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the args (control_label, dialog_title, list_only) and the read-back guarantee, but there is no explicit guidance on when to prefer this over app_set_dialog_control or app_set_grid_cell, nor any stated preconditions. The caller must infer the selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_set_grid_cellA
Type into one cell of a grid, and read it back.
ALTIUM'S RULE AND PROPERTY EDITORS TAKE THEIR INPUT THIS WAY. Selecting a row was possible before; changing anything in it was not.
A grid cell is not an edit control until it is being edited, so the cell is activated first and the text goes to whatever editor the grid puts there. The value is then read back off the CELL, because the editor disappears when the edit commits.
Args: control_label: the grid's label. row: the row, matched by name. column: the column name, or a numeric index. These grids leave many cells unnamed, and an index is then the only handle there is. text: what to type. dialog_title: which dialog, when several are open. list_only: report the row's cells and change nothing. Worth doing first, since it shows which columns have names.
Returns:
{"ok": true, "row": ..., "column": ..., "value": ...},
or ok: false when the cell reads back differently, which
happens on read-only columns and on ones that validate and
revert.
| Name | Required | Description | Default |
|---|---|---|---|
| row | Yes | ||
| text | Yes | ||
| column | Yes | ||
| list_only | No | ||
| dialog_title | No | ||
| control_label | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description carries the full burden and does so: it explains the activate-then-type-then-commit lifecycle, why the value is read off the cell rather than the editor, and the two concrete failure modes (read-only columns, validating columns that revert). That failure profile is exactly the non-obvious behavior an agent needs before committing a write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operative instruction is front-loaded in one short line, followed by context, Args and Returns — good structure. A few sentences are stylistic rather than load-bearing ('A grid cell is not an edit control until it is being edited'), but they justify the activate-first mechanic, so the length is defensible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, no-annotation mutation tool, everything an agent needs is present: which grid, how the row and column are matched, what happens on commit, and how to preview safely with list_only. An output schema exists, so the Returns block is bonus rather than required, and the success/failure asymmetry (ok:false when the read-back differs) is stated plainly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document all six parameters — and it does, in an Args block covering control_label, row, column, text, dialog_title and list_only. The rationale for the column parameter (many cells are unnamed, so a numeric index may be the only handle) adds meaning the schema's bare 'string' type cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line names a concrete verb and resource — 'Type into one cell of a grid, and read it back' — and the Altium-specific note ('rule and property editors take their input this way') tells the agent exactly which UI surfaces this targets, separating it from generic typing tools like app_type_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a real precondition for use ('Selecting a row was possible before; changing anything in it was not') and a recommended first step ('list_only: ... Worth doing first, since it shows which columns have names'). It stops short of naming the competing siblings (app_set_dialog_control, app_type_text) explicitly, so the agent must infer that a grid cell is not a dialog control.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_set_intentA
Tell the dashboard what high-level task the agent is working on.
The text is written to workspace/intent.txt where the web
dashboard polls it and shows a banner. Purely informational --
does not affect tool dispatch in any way. Call this once at the
start of a long task ("reviewing buck-converter feedback divider",
"auto-placing the analog front-end on sheet B") so the user
watching the dashboard knows what's happening between IPC
events. Pass an empty string to clear the banner.
Args: intent: Short human-readable description (one line, <=240 chars).
Returns:
{"ok": true, "intent": "<truncated text>"}.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and does so thoroughly. It discloses the exact file written, that the dashboard polls it and shows a banner, that the operation is purely informational and does not affect tool dispatch, the recommended call timing, the empty-string clearing behavior, and the return shape with truncation. This is rich behavioral context beyond what any structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and behavior, then uses clearly labeled Args and Returns sections. Every sentence adds useful information: mechanism, informational status, call timing, examples, clearing behavior, parameter format, and return value. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter informational tool with no annotations and an output schema, the description is complete. It covers what the tool does, when to use it, side effects, clearing behavior, parameter format, and return value; an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does. It describes the single intent parameter as a short human-readable description, constrains it to one line and <=240 characters, and explains that an empty string clears the banner. These are meaningful semantics not present in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it tells the dashboard the high-level task the agent is working on. It also clarifies the mechanism (writes workspace/intent.txt for the dashboard banner) and explicitly distinguishes this from operational routing by saying it does not affect tool dispatch. An agent can immediately understand what this tool does and what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance on when to call it: once at the start of a long task, with concrete examples of intent text, and notes that an empty string clears the banner. It does not name alternatives such as design_live_note, so the routing context is clear but not exhaustive; a 4 is appropriate rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_toolbarA
List toolbar buttons, or press one by name.
Toolbars are the other half of the bar framework the menus use and were not addressed at all. Many carry a command with no menu equivalent, or reach in one click what the menu takes three to.
With no name this lists every button it can see with its
rectangle. With one, it presses that button and reports whether
a menu dropped as a result, since many toolbar buttons open one
rather than acting.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It clearly states that with no name it lists buttons with rectangles, and with a name it presses the button and reports whether a menu dropped, explicitly noting that many toolbar buttons open menus rather than acting. It does not describe permission requirements or potential destructive effects of pressing, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the core dual action, then context and behavioral detail. Every sentence adds useful information with no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, a simple optional parameter, and an existing output schema, the description covers the essential behavior and return reporting. It omits prerequisites such as ensuring the application is attached, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single optional 'name' parameter, but the description fully compensates by explaining that omitting name lists buttons and providing a name presses that button. This is exactly the semantic distinction an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb ('List') and resource ('toolbar buttons') and states the dual mode ('or press one by name'). It conceptually distinguishes toolbar behavior from the menu framework ('other half of the bar framework the menus use'), but it does not name or route to specific sibling tools like app_click_menu or app_run_ui_command, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains the two usage modes based on the optional name parameter and gives a rationale for choosing toolbar actions (commands with no menu equivalent, one-click vs three). It lacks explicit exclusions or named alternatives, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_type_textA
Type literal text into whatever has focus.
For a field that HAS a handle, app_set_dialog_control is better: it addresses the control by name and reads the value back. This is for the places with no handle to address, where typing is the only route in.
Carries punctuation and case, since it sends characters rather than virtual keys. No read-back, for the same reason as app_send_keys.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that characters (not virtual keys) are sent, so case and punctuation are preserved, and that there is no read-back. But it omits failure behavior: what happens if nothing has focus, or if the focused control rejects input, and whether text appends or replaces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, followed by the alternative and behavioral notes, and every sentence earns its place. The line breaks fall mid-sentence, making the raw text read a little choppily, but there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 needn't explain return values, and the "no read-back" note signals that nothing is returned. For a one-parameter UI automation tool the coverage is nearly complete, with the remaining gap being explicit handling of the no-focus case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single "text" parameter, so the description must compensate. Saying it carries punctuation and case because it sends characters rather than virtual keys does clarify that the value is raw literal text rather than a key-name syntax, which is meaningful. But it does not cover encoding, escaping, or newline handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Type literal text into whatever has focus" gives a specific verb (type), resource (literal text) and target (focused control), which an agent can act on immediately. It then explicitly distinguishes itself from app_set_dialog_control and app_send_keys, so the tool is identifiable among its UI-automation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the when-not condition clearly: if the field has a handle, use app_set_dialog_control instead, because that addresses the control by name and reads the value back. It names the alternative and the condition that selects it, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_ui_snapshotA
Everything on screen, in one call: menus, panels, dialogs, toolbars.
ORIENTATION IS THE EXPENSIVE PART. Finding out what is available took four calls and knowing which four to make, and a caller who guessed wrong concluded a capability was missing. This is the UI equivalent of app_context: one call that answers "what am I looking at".
Reads only. Takes no focus, moves no pointer, changes nothing, so it is safe while somebody is working. The menu BAR is listed because reading it needs no click; menu contents are not, because opening one does.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does it well: 'Reads only. Takes no focus, moves no pointer, changes nothing, so it is safe while somebody is working' discloses side-effect profile, focus/pointer behavior and concurrency safety in one stroke. It further clarifies the read boundary (bar vs. contents) so the agent knows exactly what state is and isn't captured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line summary, then a capitalized rationale and a safety note, so the important content is reached immediately. The 'four calls' anecdote is slightly long for the point it makes, but it justifies the tool's existence rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Zero parameters, an output schema present (so return shape needn't be described), and the description still covers scope, inclusion/exclusion of menu contents, and safety. Nothing an agent needs in order to decide to call it and interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema confirms an empty properties object, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter-level gap exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource in the first line: a full on-screen inventory of menus, panels, dialogs and toolbars in one call, and frames itself as the UI analogue of app_context. An agent can distinguish it from app_screenshot or app_read_window because the scope ('everything on screen') and the intent ('what am I looking at') are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use rationale: orientation at the start, replacing the four guessed calls that previously led callers to conclude a capability was missing. It also explains the inclusion boundary (menu bar listed, menu contents not) which implicitly routes content-opening tasks to the click/menu tools, but it never names an explicit alternative such as app_screenshot or app_list_panels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_update_from_librariesA
Drive Tools > Update From Libraries, ECO included.
THIS PRESSES BUTTONS IN THE GUI. Update From Libraries has no API: Altium documents it as a dialog, there is no process that launches it, and the operation ends in an Engineering Change Order that only a click can execute. So this matches windows belonging to the Altium process and presses named buttons on them.
WHAT IT WILL DO AT THE END. The last steps press Validate
Changes and then EXECUTE CHANGES on the ECO. That applies every
pending change to the design and is not undoable through this
channel. Take app_checkpoint first.
WHAT IT CANNOT TELL YOU. While the wizard is open Altium's script engine is blocked, so the bridge cannot be asked anything, and an ECO's pending changes sit in a grid that exposes no text to Windows. The reply records the windows and buttons seen; it does NOT contain the change list. Read the Messages panel afterwards for that.
NOTHING IS SCRIPTED. There is no list of expected dialogs. Each one that appears is read, classified, and answered by the ROLE of the buttons it offers, then the screen is read again. That is deliberate: a scripted version failed on live Altium because the editor legitimately shows dialogs no list contained, and waited for a change order that was never coming while an unlisted modal blocked the session.
It STOPS rather than guessing when a dialog reports an error, asks a question it was not sent to answer, or offers no button whose meaning is recognised.
RUN IT DRY FIRST, WHICH IS THE DEFAULT. A dry run reads the first dialog, reports what it is and what it would press, and presses nothing.
LAUNCHING. already_open (the default) attaches to a wizard
you have opened yourself, which avoids depending on a menu path
nobody has verified. menu asks the bridge to fire the menu
first; that request will not return until the wizard closes,
which is expected and is why it is issued without waiting.
Args:
target: schematic for Tools > Update From Libraries, or
pcb for Tools > Update From PCB Libraries.
launch: already_open or menu.
dry_run: report without pressing. Default true.
confirm_execute_eco: must be true for a real run, and it is
named for the specific consequence rather than being a
general "confirm", because the irreversible part is the
ECO and not the wizard.
answer_confirmations: answer routine "carry on?" prompts.
Altium asks "Continue and create ECO?" before every
change order, so with this off the run stops there and
can never finish. A confirmation mentioning anything
irreversible (delete, overwrite, cannot be undone) is
still left alone whatever this is set to.
first_step_timeout: seconds to wait for the FIRST dialog to
appear. Raise it when launching by menu on a large
project.
Returns:
Dict with ok, dry_run, committed,
stopped_for_a_human, finished explaining how the run
ended, and steps: for every dialog, what it was, what it
said, what it offered, what was pressed and WHY.
| Name | Required | Description | Default |
|---|---|---|---|
| launch | No | already_open | |
| target | No | schematic | |
| dry_run | No | ||
| first_step_timeout | No | ||
| confirm_execute_eco | No | ||
| answer_confirmations | No | ||
| menu_may_steal_focus | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so well: it discloses that the final step is irreversible and not undoable through this channel, that the script engine is blocked while the wizard is open, that no API exists, and that it halts on unrecognized dialogs. The one gap is that menu_may_steal_focus is never mentioned, so a focus-stealing side effect of the menu launch path goes undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long (roughly 450 words) but front-loaded with a clear statement of the mechanism, then sectioned with capitalized headers (WHAT IT WILL DO AT THE END, WHAT IT CANNOT TELL YOU, LAUNCHING) that let an agent scan. Some redundancy between 'NOTHING IS SCRIPTED' and 'It STOPS rather than guessing' costs it the top score, but the length is justified by the irreversibility of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still adds useful return-value framing (ok, dry_run, committed, stopped_for_a_human, finished, steps with the WHY per dialog), which is more valuable than the bare schema. Combined with the mutation, launch, and failure-mode coverage, only the undocumented menu_may_steal_focus keeps it from being complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema has no enums or per-field descriptions, so the description must compensate; it does for six of seven parameters, giving concrete values for target ('schematic'/'pcb') and launch ('already_open'/'menu') and explaining the consequence-named confirm_execute_eco and the timeout tuning. menu_may_steal_focus is left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it drives Altium's Tools > Update From Libraries wizard by pressing GUI buttons, through to executing the ECO. It distinguishes itself from the generic siblings (app_drive_dialogs, app_run_menu, app_press_dialog_button) by naming the exact Altium dialog and target variant, so an agent can tell what it does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: dry_run defaults to true and the text says 'RUN IT DRY FIRST', launch defaults to already_open to avoid an unverified menu path, and it directs the agent to take app_checkpoint first and to read the Messages panel afterwards for the change list. It also states when it stops rather than proceeding, which is the key exclusion an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_wait_for_dialogB
Block until a dialog appears, and report which one.
A COMMAND THAT RAISES A DIALOG RETURNS BEFORE THE DIALOG EXISTS. A caller that acted and then looked found nothing and concluded none was coming; the alternative was a fixed sleep long enough to be safe, which is the pattern this layer spent the day removing everywhere else.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses blocking behavior and the asynchronous race condition it addresses, but it does not explain timeout behavior, failure modes, or whether it matches an already-open dialog.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and clear, and the following context explains the race condition efficiently. Some narrative phrasing, especially "the pattern this layer spent the day removing everywhere else," is less useful for an agent and could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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. However, the tool has two undocumented parameters and no annotations, and the description omits timeout behavior and `title` semantics, leaving meaningful gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for both `title` and `timeout`, and the description does not mention either parameter. It gives no guidance on whether `title` filters the awaited dialog or how `timeout` affects blocking behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: "Block until a dialog appears, and report which one." That clearly identifies a wait-for-dialog operation, though it does not explicitly distinguish itself from siblings like app_list_open_dialogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the key usage context: a command that raises a dialog returns before the dialog exists, so acting and then looking can miss it. It also names fixed sleep as the inferior alternative, though it does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_component_param_visibilityA
Check that every placed component shows the parameters its class requires for a legible schematic and a procurable BOM.
Per-class rules:
Capacitor (designator C*): must show a value ending in
F(e.g.10uF) AND a voltage rating ending inV(e.g.16V). Missing voltage = catastrophic failure risk on transient overvoltage.Resistor (R*): must show a value ending in
R,k,M, orm. Missing value = BOM ambiguity, can't order.Inductor (L*): must show inductance ending in
H(e.g.10uH) AND saturation current ending inA(e.g.2A). Missing saturation current = core-saturation failure on power-supply inductors.IC (U*): must show a visible parameter whose name starts with
Manufacturer Part Number. Missing MPN = unprocurable and unverifiable footprint.
The check looks at component parameter slots and the on-canvas Comment field; either is acceptable. Hidden values (IsHidden=True) do NOT satisfy the rule because they're invisible during review.
Operates on the compiled / flattened doc tree (same as the BOM) so multichannel and hierarchical designs are covered.
Returns:
Dict with:
- checked: how many components matched a known class
- violations: how many of those have at least one
missing required value
- items: list of {designator, class, missing[]}
violation entries. missing enumerates which required
fields are absent (capacitance, voltage,
resistance, inductance, saturation_current,
mpn).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that both parameter slots and the on-canvas Comment field count, that IsHidden=True values do not satisfy the rule, and that it runs on the flattened tree so multichannel/hierarchical designs are covered. It stops short of stating explicitly that the tool is read-only and makes no design changes, which for an audit tool is the one remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence, then organized as scannable per-class bullets with the acceptance criterion embedded in each. The per-class rationale (overvoltage, core saturation, unprocurable footprint) earns its place, but the explicit 'Returns' block duplicates the output schema that already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema present, the description needs only to define what is checked and how — which it does thoroughly. The only shortfall is that, lacking annotations, it never explicitly declares the tool non-mutating, and it restates return fields already covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. Nothing in the text misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: check that every placed component exposes the parameters its class requires, motivated by legible schematic and procurable BOM. The per-class rules make the scope unambiguous in practice, but the description never names the closely related siblings (audit_find_visible_supplier_pn, audit_find_placeholder_values, audit_find_mpn_inconsistencies) that an agent must disambiguate against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the stated goal (legible schematic, procurable BOM) and the note that it operates on the compiled/flattened tree, but there is no explicit 'use this when X, not when Y' statement and no mention of prerequisites such as needing a compiled project first. The agent must infer when this audit belongs in a review sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_acute_anglesA
Find pairs of same-net tracks meeting at < 90° interior angle.
Classic fab DFM check: at an acute corner the etchant pools and over-etches the inside of the bend -- the trace narrows or breaks during fabrication. Most fab houses reject sub-90° corners on critical-thickness traces in their automated DRC, but the rejection comes back days into the schedule; catching it on the desk is much cheaper.
Algorithm (pure geometry, no rule dependency):
Walk every track on signal layers
At each endpoint, spatial-iterate for other tracks on the SAME net sharing that endpoint
Build direction vectors AWAY from the shared point
Dot product positive → interior angle < 90° → acute
Capped at 100 violations to keep responses manageable on dense boards. Per-violation: net, layer, x_mils / y_mils of the corner, and the actual angle in degrees.
Pattern: SDK-derived. The Altium IPCB_AcuteAngleRule
exists but isn't always enabled by default and its
violations only surface during DRC; this audit runs
independently of rule state.
Returns:
Dict with {checked, violations, items[]} where each
item carries {net, layer, x_mils, y_mils, angle_deg}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that the check is pure geometry with no rule dependency, describes the endpoint/dot-product algorithm, and states the 100-violation cap and per-item fields. It also implies read-only behavior through the audit framing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured and front-loaded, moving from purpose to rationale to algorithm to return shape. The algorithm bullets are somewhat more detail than strictly needed for invocation, but they are organized and non-repetitive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no annotations, the description is complete: it conveys safety/read-only intent, explains what is checked, states a hard cap, and even names the return fields. The presence of an output schema makes the return-value explanation a bonus rather than a requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema coverage is 100%, so there is no parameter semantics to explain. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find pairs of same-net tracks meeting at < 90° interior angle.' That is precise enough to separate it from sibling audits like audit_find_inconsistent_track_widths or pcb_get_clearance_violations 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case ('classic fab DFM check', catching fab rejection on the desk) and contrasts with the Altium IPCB_AcuteAngleRule DRC path. It stops short of explicit exclusion criteria, but the context for selecting this tool is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_bad_connectionsA
Find PCB tracks / arcs with endpoints that are close to another same-net primitive but don't actually touch.
Walks every track / arc on a signal layer. For each endpoint, looks
for ANOTHER same-net primitive (track / arc / pad / via) within
tolerance_mils. If nothing same-net is in range, the endpoint
is "dangling": Altium may show it as connected in the analyser
(centre-point heuristic) but the photoplot will not bridge it,
producing a real open on the fab side.
Visual review misses these because at 100% zoom the gap is invisible; DRC sometimes catches them under a "Clearance" or "Modified Polygon" rule but not reliably.
Skipped: teardrops (intentionally offset), primitives inside components (they ride the pad), primitives without a net, full circle arcs (no anchor endpoint).
Args: tolerance_mils: Coord tolerance in mils. 0 = exact match required (rare, since router can place tracks on sub-mil grid). Defaults to 1 mil; bump to 5 or 10 to surface gross misalignments only.
Returns:
Dict with:
- checked: track + arc primitives inspected
- violations: primitives with at least one dangling endpoint
- tolerance_mils: echo of the tolerance used
- items: per-violation {kind, layer, net, at} where
at is the dangling endpoint's "(x,y)" in mils
| Name | Required | Description | Default |
|---|---|---|---|
| tolerance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses scope (walks every track/arc on signal layers), exclusions (teardrops, in-component primitives, netless primitives, full-circle arcs), and the analyser-vs-photoplot discrepancy. It does not mention runtime cost or that it is read-only, but the audit premise implies no mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a precise one-sentence definition, then algorithm, rationale, exclusions, args and returns. The paragraph on visual review and DRC is slightly verbose but does earn its place by justifying the tool's existence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, yet the description still explains checked/violations/tolerance/items fields, and covers algorithm, exclusions and parameter tuning. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: defines tolerance_mils as centre tolerance in mils, explains 0 means exact match (rare due to sub-mil grid), notes the default of 1 mil, and advises 5-10 for gross misalignments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence names the exact resource (PCB tracks/arcs with endpoints near a same-net primitive but not touching) and the failure mode it detects. It is clearly distinct from sibling audits such as pcb_audit_pad_center_connected or audit_find_unconnected_ic_pins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the situation where the tool is warranted (gaps invisible at 100% zoom, DRC unreliable) and gives concrete guidance to bump tolerance to 5 or 10 for gross misalignment. It does not explicitly name which sibling to use instead of or alongside this one, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_components_outside_board_outlineA
Find PCB components whose origin sits outside the board outline.
Editing accident catch: the user grabbed a component and moved it off the PCB by mistake. Usually invisible during normal review because the component is off-canvas; DRC doesn't catch it (DRC is between primitives, not "is this object on the board").
Uses IPCB_BoardOutline.PrimitiveInsidePoly for the actual
polygon-inside test, so non-rectangular boards are handled
correctly.
Pattern: brett's SelectCMPInOutSideBOL.pas.
Returns:
Dict with:
- checked: total components inspected
- violations: components outside the outline
- items: per-violation {designator, layer, at} with
at = "(x,y)" mils.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does well: it explains the off-canvas failure mode, why DRC does not catch it, the polygon-inside algorithm used, and the return structure. It does not explicitly state that the tool is read-only or mention permissions/active-document requirements, but the audit behavior is otherwise transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and uses short, structured paragraphs. The return-value block and the implementation-pattern reference are somewhat redundant given the output schema, but they do not obscure the main guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter audit tool, the description covers the purpose, the failure mode it detects, the geometric method, and the result shape. It could more explicitly state that it operates on the active PCB document, but the overall context is sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain. The baseline for a zero-parameter tool is 4, and the description appropriately avoids inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: find PCB components whose origin is outside the board outline. This clearly distinguishes it from unrelated audits and from DRC, which the description explicitly says will not catch this condition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case — catching components accidentally dragged off the PCB — and explains why normal review and DRC miss it. It does not explicitly name alternative tools or when not to use this audit, but the triggering context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_designator_collisionsA
Find schematic components that share a designator across sheets.
Annotation should make every designator unique across the project, but paste-from-another-sheet operations and post-annotate edits can leave duplicates that the agent / reviewer want to surface before they hit ERC.
Walks source schematic sheets (not compiled docs: compiled flattening would auto-disambiguate multichannel instances with channel suffixes, hiding the real source-level collision).
Returns:
Dict with:
- checked: total components inspected
- violations: count of distinct designators that occur
more than once
- items: per-collision {designator, count, sheets}
where sheets is a comma-joined sheet-filename list
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose a non-obvious behavioral trait: it walks source schematic sheets rather than compiled docs because compiled flattening auto-disambiguates multichannel instances and would hide real collisions. That is genuine insight an agent could not infer from the signature. It stops short of stating read-only/mutation status or cost/performance, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, followed by rationale and return shape. The parenthetical about compiled flattening is long but earns its place because it prevents a wrong mental model of the scan; the Returns block is arguably redundant given the output schema, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, read-oriented audit tool with an output schema, the description covers purpose, trigger conditions, scan scope, and even restates the return shape. The only omission is explicit read-only framing, which matters since no annotations declare safety, so not a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param schema applies. The description does clarify the implicit scope of what gets scanned (all source sheets), which adds marginal value over an empty object schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('find') and a precisely scoped resource ('schematic components that share a designator across sheets'), plus the source-sheet vs compiled-document distinction that further narrows what it inspects. An agent can tell this apart from proj_run_erc or audit_find_mixed_designator_rotation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the triggering conditions clearly: duplicates introduced by paste-from-another-sheet or post-annotate edits that should be surfaced before ERC. It implies ERC as the downstream alternative ('before they hit ERC') but never names a sibling tool or an explicit when-not-to-use case, so it falls 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.
audit_find_floating_portsA
Find schematic ports that aren't actually connected to anything.
On each schematic sheet a port is "floating" if its net does not appear on any component pin OR any sheet-symbol entry on the same sheet. A floating port is usually an editing leftover (renamed a net but forgot to retag the port) or a never-completed hookup -- ERC can miss these when the port carries a valid net-label tag that just doesn't connect to anything physically.
Walks the compiled / flattened doc tree so multichannel / hierarchical designs are covered.
Returns:
Dict with:
- checked: total port objects inspected
- violations: floating-port count
- items: per-violation {net, sheet, location}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden and does well: it discloses the detection criteria, notes that it 'walks the compiled / flattened doc tree' so multichannel/hierarchical designs are covered, and describes the return payload. It never states side-effect/read-only status or permission requirements explicitly, but the audit semantics make this materially more informative than a bare 'find' tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first sentence, then adds definition, rationale, and return shape in logically ordered short paragraphs. The returns block is slightly redundant given an output schema exists, keeping it just short of 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter audit tool, the description gives the definition, the motivation, the traversal scope, and the return structure — enough for an agent to decide and call it. Since an output schema already exists, the inline return listing is bonus rather than necessary, and the only real gap is the absence of explicit sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline is 4. The description adds no parameter meaning, which is appropriate here since the schema is empty and coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Find schematic ports that aren't actually connected to anything,' followed by a precise definition of the 'floating' predicate. It distinguishes itself from related audits by defining its exact qualifying condition (net absent from any component pin or sheet-symbol entry on the same sheet).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when the condition arises ('editing leftover' or 'never-completed hookup') and why ERC won't catch it, which gives clear context on when to reach for this instead of ERC. It does not explicitly name near-neighbor audits such as audit_find_unmatched_ports or audit_find_orphan_net_labels, so the alternative selection is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_inconsistent_track_widthsA
Find nets where the maximum and minimum track widths differ by more than 2×.
Classic bug pattern: a power rail (VCC / VDD / GND) is routed at 20 mil to handle the expected current, then later someone adds a connection using the editor's default 8 mil width and moves on. The result is a thin orphan stub welded to a wide bus -- under load that thin section becomes a thermal hotspot and eventually a fab rework. Most agents and human reviewers miss it because the bulk of the net looks fine.
Algorithm: per net, collect min/max track widths on signal layers. Ratio > 2.0 → flag. Per-violation reports the actual widths and the (x, y) of the thinnest track on the net so the agent can jump straight to the questionable section.
Pattern: SDK-derived. No community-script reference.
Returns:
Dict with {checked, violations, items[]} where each
item carries {net, min_width_mils, max_width_mils, ratio, thin_x_mils, thin_y_mils}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the exact algorithm (per-net min/max on signal layers, ratio > 2.0 → flag), the threshold, what each violation reports, and that coordinates point to the thinnest track. It does not explicitly state that the operation is read-only/no side effects, but the 'Find' verb and reporting behavior make that clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the threshold, then explains the bug pattern, algorithm, and return shape. Slightly verbose, and the internal 'Pattern: SDK-derived. No community-script reference.' line adds no value to an invoking agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers algorithm, threshold, per-item reporting fields, and a return-dict shape even though an output schema already exists. It also states scope (signal layers) and the thinnest-track coordinate target—nothing an agent needs to invoke and interpret correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there are no argument semantics to clarify; baseline applies. The description correctly adds no parameter discussion because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and an exact criterion: find nets where max/min track widths differ by more than 2×. An agent can distinguish this from sibling audits like pcb_cleanup_tracks or audit_find_bad_connections just by reading the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when the check is valuable (power rails, orphan thin stubs, thermal hotspots) and notes that most reviewers miss it. However, it doesn't explicitly route the agent away from alternatives in the audit_ family or state prerequisites for running it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_invalid_regionsA
Find PCB polygon regions whose area is zero or unset.
These are leftover from cancelled polygon-pour operations or corrupted file imports. They don't render visibly but can throw DRC violations under "Modified Polygon" rules and bloat board size. Read-only: this tool only surfaces them. Auto-delete belongs in a separate user-confirmed mutating flow because misclassification could remove a real (legitimately small) region.
Returns:
Dict with:
- checked: regions inspected (skips primitives owned
by components or dimensions)
- violations: invalid-region count
- items: per-violation {layer, at}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral burden: it states read-only behavior, explains why it does not auto-delete, and discloses that it skips primitives owned by components or dimensions. It also describes the return structure and practical consequences such as DRC violations and board bloat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by context, safety rationale, and return shape. Every sentence adds useful information for correct selection and interpretation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only audit tool with an output schema, this is complete. It explains what is checked, what is skipped, why it matters, and what the results contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline is 4. The description does not need to explain parameter semantics because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: find PCB polygon regions whose area is zero or unset. This clearly distinguishes the tool from generic polygon inspection or repair tools by targeting invalid zero-area regions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the situation that produces these regions (cancelled pours, corrupted imports) and explicitly states the tool is read-only, with deletion belonging in a separate user-confirmed mutating flow. It does not name an alternative sibling tool, but the usage boundary is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_mirrored_pcb_textA
Find free-floating PCB text (eTextObject) that's mirrored on the wrong overlay.
Rule: top-overlay text must read normally; bottom-overlay text must be mirrored. When the assembled board is flipped to access the bottom side, the bottom text reads correctly. A normally-oriented bottom-side text reads backwards on the physical board -- the kind of thing that gets caught only at the fab-review stage by the customer's QA, then triggers a respin.
Note: this checks free-floating text (revision strings, layer labels, copyright notices) -- NOT component designators or comments, which Altium auto-flips with the component.
Returns:
Dict with {checked, violations, items[]} where each item
carries {text, layer, reason}. reason is one of
top_overlay_text_is_mirrored or
bottom_overlay_text_is_not_mirrored.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does so: it explains the underlying geometric rule, why the defect only surfaces at fab review, exactly which object class is in scope versus excluded, and the shape of the result including both possible reason codes. Nothing material about the check's behavior is left to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then the rule, the scope exclusion, and the return contract in labeled blocks. The fab-review anecdote is a touch long for the information it adds, but it justifies why the check matters rather than padding with restated field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still names the keys and enum values, and with no parameters there is nothing else an agent needs. The definition is complete for a read-only, zero-argument audit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, which is the baseline-4 case. The description correctly implies there is nothing to configure and instead spends its words on scope and output, which is the right allocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (find free-floating PCB text / eTextObject) and the exact defect condition (mirrored on the wrong overlay). It also explicitly scopes out component designators and comments, which no sibling tool name makes obvious, so an agent can separate it from pcb_place_text, pcb_autoplace_silkscreen, or the other audit_* checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly positions the tool as a pre-fab-review QA check and gives a clear exclusion rule (not designators, which Altium auto-flips). It does not name a concrete alternative tool or state prerequisites such as an open PCB document, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_missing_datasheetsA
Find ICs (designator U*) with no fetchable datasheet URL in any of their parameters.
Checks the standard Altium slots:
HelpURL, Datasheet, DatasheetURL
ComponentLink1URL..ComponentLink4URL
At least one of those needs to carry an http(s):// value
for the IC to count as covered. The agent's review discipline
requires fetching the actual manufacturer datasheet before
making any device-related claim: ICs without a stored URL
force the agent to web-search the part name, which is slower
and more error-prone than a direct link.
Pattern: ports the dashboard's pickDatasheetLinks heuristic to an authoritative Pascal-side audit.
Returns:
Dict with {checked, violations, items[]} where each item
carries {designator, comment, lib_ref} for an IC missing
any datasheet link.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it enumerates the exact Altium slots checked, defines the coverage rule (http(s):// value required), and explains the read-only audit nature implicitly through 'find/audit' semantics. It omits explicit read-only declaration but the behavior is otherwise well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key statement is front-loaded and the slot list plus coverage rule earn their place, but the rationale paragraph and the 'Pattern: ports the dashboard's pickDatasheetLinks heuristic' meta-note are somewhat verbose for what an agent needs to invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-param, output-schema-backed audit, the description is complete: it defines selection scope, coverage criteria, and even summarizes the return dict, leaving nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline is 4 and there is nothing to clarify at the parameter level; the description appropriately focuses on the covered slots and return shape instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb and resource with a precise scope: 'Find ICs (designator U*) with no fetchable datasheet URL in any of their parameters.' An agent knows exactly what this audits and can distinguish it from generic datasheet tools like datasheet_fetch or design_datasheet_checklist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for why and when to run it (the review discipline requires a stored URL before device-related claims) but does not explicitly name alternatives such as design_datasheet_checklist or datasheet_fetch, nor state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_missing_decouplingA
Find ICs whose power pins lack a nearby decoupling cap.
For every IC, identify its power pins (by net name or by pin name pattern). For each power pin, check if any capacitor (designator C*) shares the same net. Buckets:
missing: no power pin has any cap on its net (worst)partial: some power pins covered, some not
ICs with full coverage are not surfaced (no problem to fix). ICs with NO recognised power pins are skipped (we can't distinguish "no power needed" from "couldn't detect").
Catches the single most-skipped pre-release review check: a missing local bypass doesn't fail ERC, doesn't fail DRC, but bites at first power-on with brown-outs / random resets.
Pattern: ports the dashboard's JS-side analyzeDecoupling.
Returns:
Dict with {checked, violations, items[]} where each item
is {designator, status, covered_pin_count, uncovered_pins[]}.
status is missing or partial. uncovered_pins[]
lists each {pin, name, net} that needs a cap.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does well: it discloses the detection heuristic (net-name or pin-name matching, C* designators on the same net), the bucket definitions, and — importantly — the false-negative boundary that unrecognised power pins cause the IC to be silently skipped. What it does not state is that this is a non-mutating audit with no side effects, nor any cost/performance expectation on large boards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core definition is front-loaded and the bucket list is scannable, so the agent gets the essential decision input immediately. It loses a little to material that does not help tool selection — the RST formatting, the 'Pattern: ports the dashboard's JS-side analyzeDecoupling' implementation note, and a Returns block that partly duplicates the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter audit the description covers the heuristic, the categorization logic, the skip conditions, and the practical failure mode it is meant to prevent. An output schema already exists, yet the extra item-level shape given here is consistent with it and adds no contradiction, so nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. It correctly makes no attempt to invent parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('Find ICs whose power pins lack a nearby decoupling cap') and scopes it precisely enough that an agent can separate it from siblings such as audit_find_unconnected_ic_pins or audit_find_orphan_power_objects. The subsequent paragraph removes any ambiguity about what counts as a violation by defining the two buckets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context ('Catches the single most-skipped pre-release review check') and states two exclusion conditions: fully-covered ICs are not surfaced, and ICs with no recognised power pins are skipped. It never names a sibling tool as the alternative for a related check, so it falls short of explicit when-not/alternatives routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_mixed_designator_rotationA
Find PCB silkscreens where designators face BOTH 0 and 180 (or both 90 and 270) -- the assembly-readability check.
Assembly inspectors and pick-and-place operators read silkscreen from a fixed angle. If half the designators on the top overlay read normally and the other half are upside-down (0 vs 180), QC has to physically rotate the board between parts -- slow, error-prone, and the kind of thing fab houses charge extra to deal with. Orthogonal mixes (0 + 90) are fine because the inspector turns their head, not the board.
The check runs per overlay layer (top, bottom) independently -- a top side with mixed 0/180 doesn't excuse a clean bottom.
Returns:
Dict with {checked, violations, top_mixed_0_180, top_mixed_90_270, bottom_mixed_0_180, bottom_mixed_90_270, items[]}. Each item carries {designator, layer, rotation_deg} for a component contributing to a flagged
pair, so the agent can rotate those specifically.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that the check runs per overlay layer independently and that a clean bottom does not excuse a dirty top. It implies read-only via 'find'/'checked' but never states explicitly that it mutates nothing or how expensive the scan is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the condition in the first sentence, then justifies it, then documents returns. The middle paragraph about inspectors and fab houses is longer than strictly necessary, but it earns its place by grounding why the 0/180 vs 0/90 distinction exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, a trivial schema, and an output schema that exists, the description still restates the return shape and, more importantly, explains the per-layer semantics that the output keys (top_mixed_0_180, bottom_mixed_*) require to be interpreted. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description adds no parameter meaning because there are none to add, and the schema needs none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find) and precise resource condition (silkscreens with designators at both 0 and 180, or both 90 and 270). The distinguishing rule (0+90 is fine, 0+180 is not) separates it cleanly from the sibling collision and rotation-adjacent audits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains exactly when the finding matters (assembly readability, QC rotation, fab surcharges) and explicitly excludes orthogonal mixes as acceptable. It does not name a specific alternative sibling tool to use instead, which keeps it 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.
audit_find_mpn_inconsistenciesA
Find groups of ICs with the same (lib_ref, comment) but DIFFERENT Manufacturer Part Numbers.
Two presumably-identical parts pointing at different MPNs is almost always a bug: either a typo / accidental override during a sub-circuit clone, or means the design genuinely wants two sources but lost the alternates table somewhere. The agent reviewing the BOM should see this before purchase.
Pattern: ports the dashboard's analyzeMpnConsistency JS heuristic to an authoritative Pascal-side audit.
Returns:
Dict with {checked, violations, items[]}. Each item
carries {lib_ref, comment, mpns, designators} where
mpns is a comma-joined list of the conflicting part
numbers and designators lists the components involved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden; it explains the heuristic (port of dashboard analyzeMpnConsistency), the two root causes (typo/override vs. lost alternates table), and confirms it's a read-only 'Find' audit. Lacks an explicit read-only statement or note on performance, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core rule, then rationale, then return shape. Slightly verbose across three blocks, but every sentence conveys actionable information (what, why, output).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter audit with an output schema present, the description is complete: it defines the detection rule, the significance, and the return structure, so an agent knows exactly what it will get and why to run it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters means baseline 4; the description nonetheless clarifies the grouping keys (lib_ref, comment) and the conflicting field (MPN), adding useful conceptual meaning even though there is nothing to invoke.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Find) and resource (groups of ICs with same lib_ref/comment but different MPNs), which is precise and distinguishable from the many other audit_find_* siblings by naming the exact inconsistency it detects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: 'The agent reviewing the BOM should see this before purchase,' establishing when the tool matters. It doesn't name explicit alternatives or exclusions, but the usage scenario is unambiguous for a 0-param audit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_net_label_conflictsA
Find net labels that silently merge, short, or do nothing.
Three failure modes that all look correct on a printed sheet:
conflicting_labels-- two labels with DIFFERENT text at the same Location (x, y), not merely overlapping text boxes. Altium merges both names into one net and one name wins; the losing net ceases to exist and everything on it is absorbed. This is a real short between two named nets, and the usual symptom is "net X has zero pins" while some unrelated pin turns up on net Y. Adjacent labels on a 100-mil pin pitch are not conflicts.labels_on_pin_root-- a label sitting on a pin'sLocationinstead of its electrical end.Locationis the BODY-side root; a pin connects atLocation + PinLengthalongOrientation(0=right, 1=up, 2=left, 3=down). A label on the root is inert, so the sheet reads as fully wired while the pin floats on an auto-generated net. Each item reports the label's coordinates AND theconnect_x_mils/connect_y_milsthe label should move to.duplicate_labels-- same text twice at one point. Harmless electrically, but it is clutter and it hides class 1 underneath.
Complements audit_find_orphan_net_labels, which only asks
whether a wire sits under the label and therefore reports
genuinely-connected labels (those on a pin end, with no wire)
as orphans.
Returns:
Dict with {checked, conflicts, on_pin_root, duplicates, conflicting_labels[], labels_on_pin_root[], duplicate_labels[]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so well: it explains the electrical consequence of each mode (losing net ceases to exist, pin floats on auto-generated net), the pin geometry rule for class 2, and reports remediation coordinates. It never states read-only/no-side-effect semantics explicitly, which is the main gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line thesis, then a numbered taxonomy, then the sibling contrast — a genuinely useful structure. The closing 'Returns' block largely restates the output schema, which is the one portion that does not fully earn its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only audit with an output schema already present, the description covers everything an agent needs: what each result class means, what triggers it, what is a false positive, and which sibling to use instead. Return values are additionally summarized, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so the baseline of 4 applies. The description correctly implies a whole-document audit with no scoping arguments, and adds meaning where it can by explaining the returned coordinate fields (connect_x_mils / connect_y_mils) that an agent would need to act on.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource (find net labels that merge/short/do nothing) with an enumerated taxonomy of the three failure classes. It explicitly names and distinguishes itself from the closest sibling, audit_find_orphan_net_labels, so an agent can route between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description frames the tool's scope ('on a printed sheet' symptoms, three failure modes) and gives an explicit exclusion rule for class 1 ('Adjacent labels on a 100-mil pin pitch are not conflicts'). The final paragraph routes the agent away from the sibling tool, which is a clear use-vs-alternative statement; it stops short of prescribing when in a workflow to run it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_non_embedded_imagesA
Find schematic images that are NOT embedded -- they hold only a path reference to the original file.
Non-embedded images render fine on the designer's own machine but show a red X / placeholder box on every other machine that opens the schematic, because the path doesn't resolve. Common offenders are company-logo title-blocks dragged in from a network share and never re-saved with EmbedImage=True. The manufacturer / customer sees broken images on the SCH PDFs.
Returns:
Dict with {checked, violations, items[]} where each item
carries {sheet, x_mils, y_mils} for a non-embedded image.
checked counts ALL images (embedded + not), violations
counts only the non-embedded ones.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does well: it explains the failure mode (path doesn't resolve on other machines), names common root causes (logo title-blocks from network shares never re-saved with EmbedImage=True), and clarifies the counting semantics of `checked` vs `violations`. It never explicitly states the tool is read-only/no-side-effect, nor which document or sheet set is scanned, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the definition, then justification, then returns – good ordering. The 'Returns:' block restates a dict shape that an output schema already provides, so it is partly redundant, though the `checked` vs `violations` distinction adds genuine value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter audit with an output schema, the description covers purpose, motivation, and the meaning of the two counters, which is what an agent needs to act. The remaining gap is scope: it doesn't say whether it scans the active schematic, all open documents, or a whole project.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline of 4 applies. The description correctly focuses its effort on scope and return semantics rather than inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource with a precise qualifier: 'Find schematic images that are NOT embedded'. The distinction between embedded and path-referenced images is spelled out, so an agent can tell this apart from sibling audits and from sch_place_image 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes a clear use context ('manufacturer / customer sees broken images on the SCH PDFs') that implies running this before exporting or delivering documentation. It does not name an explicit alternative tool or state when-not to run it, so it falls 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.
audit_find_off_grid_componentsA
Find schematic components placed off the snap grid.
Schematic best practice: components sit on a 100-mil (or whatever the project standard is) grid so pins land predictably on wire endpoints. Off-grid placement is the classic "I edited around it and never resnapped" trap: the symbol LOOKS wired but the pin doesn't actually touch the wire, ERC silently passes (no visible net) and the connection is missing on the netlist.
Args: grid_mils: Grid size to check against (default 100). Use 50 if your sheets are set to a half-step grid.
Returns:
Dict with:
- checked: total placed components inspected
- violations: off-grid component count
- grid_mils: echo of the grid used
- items: per-violation {designator, sheet, at, dx, dy} where dx/dy are the off-grid magnitudes in
mils. Snap to -dx / -dy (or whichever direction
is closer) to restore grid alignment.
| Name | Required | Description | Default |
|---|---|---|---|
| grid_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does well: it explains the failure mode being detected (ERC silently passes, netlist connection missing), the read-only audit nature implied by 'Find', and the corrective action ('snap to -dx/-dy or whichever direction is closer'). It never explicitly states the operation is non-mutating or that no changes are applied, which is the one disclosure gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by justification and then Args/Returns. The 'ERC silently passes' paragraph is longer than strictly necessary for tool selection, but it does earn its place by making the stakes of the check concrete rather than decorative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still documents the return shape (checked, violations, grid_mils, items with dx/dy) and even how to act on the magnitudes. Combined with the parameter guidance, an agent has everything needed to invoke and interpret this audit correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it names grid_mils, states the default of 100 mils, and gives a concrete decision rule (use 50 for half-step grids) that the schema's bare integer does not convey. The added value is real but limited to a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource ('Find schematic components placed off the snap grid'), which is immediately distinguishable from sibling audits such as audit_find_floating_ports or audit_find_invalid_regions. The follow-up paragraph makes the precise defect class unambiguous (symbol looks wired, pin doesn't touch, ERC passes silently).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear situational context for running the audit (grid best practice, the 'edited around it and never resnapped' trap) and tells the agent when to deviate on the parameter ('use 50 if your sheets are set to a half-step grid'). It stops short of naming explicit alternatives (e.g., obj_set_grid or pcb_snap_to_grid for remediation) or stating when not to run it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_orphan_net_labelsA
Find schematic net labels whose location is NOT on any wire or bus.
In Altium, a net label labels whichever wire passes through its (x, y). If the label sits in empty space (because the wire was moved during a layout pass, or was never placed), the compile produces a phantom net -- the label looks correct on paper but the signal it "names" connects to nothing under the label. ERC sometimes catches this (no driver / no load) but not always -- the other end of the same-named net often provides a load, so the violation never fires.
Spatial-iterates a 1-mil square at each net label's location
for any eWire / eBus object. Absence → orphan.
Pattern: SDK-derived. No community-script reference; surfaced
by reviewing the ISch_NetLabel interface in the Altium
Schematic API docs.
Returns:
Dict with {checked, violations, items[]} where each
item carries {label, sheet, x_mils, y_mils} for an
orphan net label.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so well: it discloses the detection mechanism (1-mil spatial probe at each label's coordinates for eWire/eBus objects) and the absence criterion. It never explicitly states the operation is read-only, though 'audit/find' plus the probing description strongly imply it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core explanation is front-loaded and useful, but the 'Pattern: SDK-derived. No community-script reference...' paragraph is meta-commentary about provenance that gives the agent nothing actionable, and the 'Returns' block restates the output schema. Both could be cut without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and the description redundantly but harmlessly restates it. Given zero parameters and no annotations, the definition supplies everything needed to decide to call it: what it finds, why it matters, how it detects, and what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly describes a whole-design scan with no scoping inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Find schematic net labels whose location is NOT on any wire or bus.' The Altium-specific explanation of what a net label attaches to makes the failure mode unambiguous and distinguishes it from generic ERC or net-label-conflict checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when ERC will and will not catch this condition ('the other end of the same-named net often provides a load, so the violation never fires'), which is effectively a when-to-use rationale versus proj_run_erc / audit_find_net_label_conflicts. It stops short of naming those sibling tools outright, so it is strong but not a full routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_orphan_power_objectsA
Find schematic power-port markers (GND, VCC, +3V3 etc.) sitting off-wire.
Symmetric cousin to audit_find_orphan_net_labels. A power
port carries its net name (from the marker's Style); the
marker has to sit ON a wire for the wire to actually adopt
that net. Markers in empty space create phantom power
connections -- the schematic LOOKS like the rail is hooked
up, but the wire underneath is unrelated.
ERC sometimes catches this when the wire ends up with no driver, but power rails frequently have multiple drivers (the real connection elsewhere, plus this phantom), so ERC sees a valid net and stays quiet.
Spatial-iterates a 1-mil square at each ePowerObject
location for any eWire; absence → orphan.
Pattern: SDK-derived, mirrors the orphan-net-label check.
Returns:
Dict with {checked, violations, items[]} where each
item carries {net, sheet, x_mils, y_mils} for an
orphan power object. net comes from the marker's
Text (its visible net name).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the detection mechanism (spatial iteration of a 1-mil square at each ePowerObject location for any eWire), the failure mode it catches (phantom power connections), and why ERC misses it. Read-only/non-destructive nature is implied by 'audit'/'find' but never stated outright, and there is no note on performance cost of the spatial iteration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence and the rest is substantive: mechanism, rationale, and return shape. It is somewhat long for a no-argument audit tool, and the SDK-derived/pattern note adds little for an agent deciding whether to call it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description still sketches the returned dict ({checked, violations, items[]} with net, sheet, x_mils, y_mils) and clarifies that net comes from the marker's Text. Combined with the mechanism and failure-mode explanation, nothing an agent needs to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline is 4. The description correctly does not waste space on parameter discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource — find schematic power-port markers sitting off-wire — and immediately distinguishes the tool from its sibling audit_find_orphan_net_labels. An agent can identify the target defect class 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the diagnostic gap that motivates the tool (ERC sees a valid net because power rails often have multiple drivers) and names the symmetric sibling check, which effectively tells an agent when this audit applies. It stops short of explicit when-not-to-use guidance or a routing rule to the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_pads_near_board_edgeA
Find PCB pads / vias closer than clearance_mils to the
board outline (depaneling damage hazard).
Copper too close to the routed edge gets scuffed / scored / torn during v-cut + mouse-bite break. IPC-2221 and typical fab houses want at least 20-50mil clearance for critical components, more for connectors. Worth tightening to 50+ for boards going to depaneling rather than rounded-corner manufacture.
The gap is measured from the outline's own segments, lines and arcs, to the pad's copper: a via or round pad by its radius, a rectangle by its nearest corner or edge midpoint, at whatever rotation. Round and other curved outlines are covered.
Args: clearance_mils: Minimum gap to flag as a violation (default 25). Try 50 if your fab depanels by v-cut.
Returns:
Dict with:
- checked: total pads + vias inspected
- violations: how many are within the clearance
- unmeasured: pads that could not be measured, which
are therefore neither passed nor flagged
- clearance_mils: echo of the threshold used
- items: per-violation {kind, designator, distance_mils, at} where at is "(x,y)" mils.
| Name | Required | Description | Default |
|---|---|---|---|
| clearance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains what is measured (outline segments to pad copper, per-shape geometry), discloses the 'unmeasured' caveat, and implies a read-only audit. It never explicitly states it does not modify the board, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, followed by useful rationale and measurement semantics. The Returns block is somewhat redundant given an output schema exists, adding length that the schema already covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter audit tool the description covers purpose, measurement methodology, threshold selection, and result interpretation. Since an output schema exists, the verbose Returns section is more than needed but not harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no description on clearance_mils), so the description must compensate, and it does: units in mils, meaning as the flag threshold, the default of 25, and tuning advice. Only the absence of format/range constraints keeps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: find PCB pads/vias closer than clearance_mils to the board outline. It names the hazard (depaneling damage) so an agent can distinguish it from sibling audits like audit_find_components_outside_board_outline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete threshold guidance ('Try 50 if your fab depanels by v-cut') and background on IPC-2221/fab expectations, so the agent knows how to configure it. It does not explicitly name an alternative tool or state when not to use 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.
audit_find_pin_net_name_mismatchesA
Find IC pins whose NAME looks like a power / ground pin but whose connected NET is not actually a power / ground rail.
Examples flagged:
pin "VCC" wired to a non-power net (swapped rail bug)
pin "GND" or "VSS" wired to a non-ground net (broken reference plane) ERC won't catch these: the wire is connected, the names just disagree on intent. A class of bug that ships when the user copied a sub-circuit and forgot to re-tag the rail.
Pattern: ports the dashboard's JS-side analyzePinNetMismatch as an authoritative MCP audit.
Returns:
Dict with {checked, violations, items[]} where each item
carries {designator, mismatches[]} with one entry per
offending pin: {pin, name, net, kind}. kind is
power_pin_on_non_power_net or
ground_pin_on_non_ground_net.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does most of it: it discloses the detection logic, the fact that connectivity is already valid (only intent mismatches), the exact result payload, and the two enumerated `kind` values. The remaining gap is scope — it never says whether it scans the active sheet, the whole project, or requires a recompile beforehand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-sentence definition, then examples, then rationale, then return shape — a sensible order. The "Pattern: ports the dashboard's JS-side analyzePinNetMismatch" line is internal implementation trivia that adds little for an agent choosing or calling the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter audit with an output schema, the description is nearly sufficient: it explains the check, the failure rationale, and even restates the return structure. The one thing an agent still cannot infer is the scan scope and any prerequisite (e.g. compiled/fresh design state).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; the schema is an empty object at 100% coverage. Baseline 4 applies, and no parameter-level meaning is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and object: find IC pins whose name implies power/ground but whose net does not. Concrete examples ("VCC" on a non-power net, "GND"/"VSS" on a non-ground net) remove any ambiguity and distinguish it from generic ERC tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the usage context well by explaining the bug class (copied sub-circuit with an un-retagged rail) and explicitly says "ERC won't catch these", which routes the agent away from proj_run_erc for this case. It stops short of naming the nearest audit_* siblings (e.g. audit_find_orphan_power_objects, audit_find_unconnected_ic_pins) as alternatives, so it is clear but not fully disambiguated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_placeholder_valuesA
Find SCH component parameters containing obvious "I'll fix this later" placeholder strings that escaped a release.
Matched values (case-insensitive, whole-string after trim):
TBD,TBATODO,FIXME,XXX?,??,???PLACEHOLDER,FILLER,ASK,UNKNOWNN/A,NA
Classic bug pattern: an EE drops a 100nF cap as a temporary placeholder while working out a regulator topology, types "TBD" in the Comment, moves on, never comes back. Six months later the board ships to fab with "TBD" on the assembly drawing. The fab calls confused, the schedule slips.
Checks every parameter (Comment, Value, Manufacturer, MPN,
Description, etc.) on every component across the project.
Skips empty values -- those are caught by other audits
(e.g. audit_find_missing_datasheets).
Pattern: SDK-derived. No community-script reference; this is a defensive sanity check we should always run before release.
Returns:
Dict with {checked, violations, items[]} where each
item carries {designator, parameter, value} for a
component parameter that matched a placeholder pattern.
checked counts ALL parameters inspected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load. It discloses the matching rules (case-insensitive, whole-string after trim), the exhaustive scan scope, and the skipped-value behavior, which gives an agent a precise model of what will and won't be flagged. It stops short of stating that the tool is purely read-only/no side effects, but the audit framing makes that clear enough that a 4 is fair.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the verb and resource, then the match list, then the rationale, then scope and return shape. The placeholder list and the bug-pattern anecdote are somewhat long, but both earn their place by pinning down the exact matching semantics an agent needs. Minor trimming of the story would improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (zero params) and has an output schema, so the description does not need to explain return values. It nevertheless names the return shape ({checked, violations, items[]}) and the per-item fields, leaving nothing material about the call unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so there is nothing for the description to disambiguate. Baseline is 4; no parameter detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: find SCH component parameters containing placeholder strings. It explicitly delimits scope (every parameter on every component across the project) and distinguishes itself from the sibling audit_find_missing_datasheets, which handles empty values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says when to run it ('a defensive sanity check we should always run before release') and when not to worry about a case ('Skips empty values -- those are caught by other audits (e.g. audit_find_missing_datasheets)'). That is explicit routing to an alternative tool plus a clear exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_removed_pad_shapesA
Find pads / vias whose copper annular ring has been removed on layers where it's still needed.
Altium's "Tools → Remove Unused Pad Shapes" optimization deletes per-layer pad copper where a primitive isn't electrically used on that layer. Applied too aggressively, it leaves a via that drills through an inner layer with NO annular ring there: any later trace edit on that inner layer that tries to land on the via will silently fail to connect at fab.
Detection:
Vias:
Via.SizeOnLayer(L) <= Via.HoleSizemeans no copper left, just the drilled hole.Pads:
Pad.IsPadRemoved(L)is True.
Pattern: brett's PadShapeRemoved.pas (read-only; we surface coordinates rather than highlight on canvas).
Returns:
Dict with:
- checked: total pads + vias inspected
- violations: how many layer-instances are flagged
(one via removed on 3 layers counts as 3)
- items: per-violation {kind, designator, net, layer, at} where at is "(x,y)" mils.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does: it declares the tool read-only, gives the exact detection predicates (Via.SizeOnLayer(L) <= Via.HoleSize, Pad.IsPadRemoved(L)), and explains that it returns coordinates rather than highlighting on canvas. An agent knows there are no mutations and how a violation is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core statement, then context, detection logic, and returns in clearly sectioned form. The 'Returns' block overlaps with the existing output schema, which is mild redundancy, but the remaining text is dense and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Zero-parameter read-only audit with an output schema; the description covers purpose, trigger condition, detection semantics, and the counting convention ('one via removed on 3 layers counts as 3'). Nothing an agent needs to invoke or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline of 4 applies. The description correctly spends no space on nonexistent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Find pads / vias whose copper annular ring has been removed on layers where it's still needed.' This is precisely differentiated from adjacent audits (audit_find_pads_near_board_edge, audit_tented_via_ratio, pcb_normalize_vias) without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the real-world condition under which this matters (aggressive 'Remove Unused Pad Shapes' leaving a via with no annular ring, causing silent open traces at fab), which tells an agent exactly when to reach for it. It stops short of naming alternatives or explicit exclusions, so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_signal_vias_without_returnA
Find signal vias that have no nearby ground / power via for return-current flow.
For every via NOT on a ground/power net (heuristic: net name
starts with GND / V / + / - or contains "GND"), look for at least
one ground/power via within radius_mils. If none is found,
the signal via likely lacks a return-current path -- when a
high-speed signal changes layers, the return current needs to
cross the dielectric somewhere, and a nearby ground via shortens
that path.
Tradeoff: this is a SIMPLIFIED proximity heuristic, not a stackup- aware analyser. The full check (reference-layer tagging, stripline vs microstrip rules, paired-reference handling) is a much larger GUI-driven analysis. For first-pass review, proximity flags the obvious cases.
Args: radius_mils: How close a return via must be. Default 50 mils (~1.3mm) -- typical "good practice" is within 1-2 mm of the signal via.
Returns:
Dict with:
- checked: signal vias inspected (non-power/ground)
- violations: signal vias with no return via in range
- radius_mils: echo of radius used
- items: per-violation {net, at} where at is
"(x,y)" mils of the offending signal via
| Name | Required | Description | Default |
|---|---|---|---|
| radius_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden and does well: it discloses the net-name heuristic (GND/V/+/- parsing), the proximity logic, and explicitly names the tradeoff vs stackup-aware analysis so the agent knows the false-positive/false-negative profile. Minor gap: doesn't state the operation is read-only or whether it changes the design.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the heuristic, then the tradeoff. Slightly verbose in the explanation of return-current physics, but every part informs the agent. Args/Returns sections are conventional and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter audit tool with an output schema, the description covers purpose, heuristic logic, limitations, parameter meaning, and output shape. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate, and it does: it explains what radius_mils means (proximity a return via must be), the default (50 mils / ~1.3mm), and typical good practice (1-2mm). This adds real meaning over the bare 'number' type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Find signal vias that have no nearby ground/power via for return-current flow.' This is clearly distinguishable from siblings like pcb_get_vias (enumeration) and audit_find_via_antennas (a different via check).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the context that triggers the check ('when a high-speed signal changes layers') and positions it as a first-pass review tool versus the full stackup-aware analysis. Doesn't name a specific sibling alternative, but the when-to-use signal is clear and the scope limitation is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_single_pin_netsA
Find nets that have EXACTLY ONE pin AND at least one net-label / port / power-object on them.
A single-pin net is normal for unused / no-connect pins. A single-pin net with a named label is a broken connection: the designer asserted "this signal goes somewhere" by naming it but the other end never made it onto the schematic. Common causes are a typo in a net-label that doesn't match its peer, a sheet-entry vs port-name mismatch on a hierarchical block, or an off-page connector that was deleted while routing was being re-arranged.
The flat hierarchy is queried (DM_DocumentFlattened) so nets
spanning multiple sheets via off-page connectors are counted
as one net.
Returns:
Dict with {checked, violations, items[]}. Each item
carries {net, designator, pin} for the lonely pin.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the internal data source (DM_DocumentFlattened), so the agent knows off-page connectors are collapsed into one net across sheets. It doesn't explicitly state that the tool is read-only/no side effects, but the audit framing plus return description makes that clear enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Definition is front-loaded in the first sentence, followed by when-it-matters and causes, then scope note, then return. The middle paragraph of root causes is longer than strictly needed but earns most of its space by helping the agent interpret findings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the predicate, the benign vs broken distinction, the hierarchy/flattening scope, and the return shape ({checked, violations, items[]} with net/designator/pin). An agent has everything needed to call it and interpret the result without inspecting internals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. The description spends its effort on semantics of the predicate and the return shape instead, which is appropriate given there is nothing to parameterize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise, testable predicate: nets with exactly one pin AND at least one net-label/port/power-object. This distinguishes it from nearby siblings like audit_find_orphan_net_labels and audit_find_floating_ports, which target labels or ports rather than lonely pins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains when a hit is benign (unused/no-connect pins) versus a real bug (named single-pin nets), and names the typical root causes to look for. It doesn't explicitly route to alternative tools such as proj_get_unconnected_pins for the no-connect case, so it stops short of full when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_unconnected_ic_pinsA
Find IC pins with an empty / unset net (excluding pins intentionally named NC / DNC / RSVD / RESERVED).
Walks the project BOM (cheap: uses the already-cached
project.get_bom snapshot, no extra Altium round-trip) and,
for every component whose designator starts with U, counts
pins whose net is empty / null / "?". Pins whose NAME marks
them as no-connect by convention are skipped because those
aren't bugs.
Same heuristic the Components tab's "unconnected IC pins" chip runs in JS, but now exposed as a first-class MCP tool so the agent can drill in from one call and the result is consistent between the dashboard and the lint sweep.
Returns:
Dict with:
- checked: ICs inspected
- violations: ICs with at least one unconnected pin
(the COUNT here is per-IC, not per-pin)
- unconnected_pin_total: sum of unconnected pins
across all flagged ICs
- items: per-IC {designator, unconnected_pins[]}
listing pin numbers + names that were flagged.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that it reads the cached project.get_bom snapshot with no extra Altium round-trip, that it only inspects designators starting with 'U', that NC-by-convention pins are intentionally skipped, and that results match the dashboard chip. It stops short of stating permissions or whether the BOM cache can be stale.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and useful, but the multi-line 'Returns:' block restates a return shape that is already published as an output schema, and the dashboard/JS-implementation aside is background flavor rather than invocation guidance. Roughly a third of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only audit whose return shape is covered by an output schema, the description supplies the missing behavioral context: the U-prefix heuristic, the NC exclusion convention, the data source, and the cost profile. Complete enough to call correctly, with only the sibling-overlap question unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline of 4 applies. The description adds no parameter meaning because none exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Find IC pins with an empty / unset net') plus a precise exclusion rule (NC/DNC/RSVD/RESERVED), so an agent knows exactly what class of defect is reported. It does not, however, differentiate itself from the existing sibling proj_get_unconnected_pins, which sounds like it covers overlapping ground.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: it is a cheap lint check over the cached BOM and the agent can 'drill in from one call.' There is no explicit when-not-to-use guidance and no statement of when to prefer this over proj_get_unconnected_pins or design_lint_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_unlocked_component_primitivesA
Find placed components whose internal primitives are NOT locked. Unlocked primitives are a silent fab-bug class -- a stray click + drag in the PCB editor moves a single pad off-center within the footprint without any warning. The gerbers look fine, just slightly off, and the part doesn't solder properly because the pad no longer aligns with the device's lead.
Library footprints ship with PrimitiveLock=True by default; components show up unlocked when someone clicked Component Properties and toggled the flag off (sometimes deliberately to nudge silkscreen, more often accidentally).
Returns:
Dict with {checked, violations, items[]} where each item
carries {designator} for an unlocked component. Pair
with obj_batch_modify to re-lock at scale.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the failure mode, why components become unlocked, and the exact return shape {checked, violations, items[]}, but leaves read-only status and any side effects implied rather than explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the subsequent explanation of the bug class adds useful context. The narrative is slightly long but each paragraph earns its place by clarifying the risk and return format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema, and no annotations, the description is complete: it defines the audit target, explains the consequence of the defect, documents the return dictionary, and names a remediation follow-up (obj_batch_modify).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so there is no parameter meaning to convey. The baseline for zero-parameter tools is 4, and the description appropriately focuses on purpose and return values instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource: 'Find placed components whose internal primitives are NOT locked.' It precisely scopes the audit to a distinct defect class, making it easy to distinguish from generic PCB audit siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains the diagnostic context—unlocked primitives as a silent fab-bug—and explicitly says to pair with obj_batch_modify for re-locking. It lacks an explicit 'when not to use this' statement or named alternative audit tools, keeping it just 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.
audit_find_unmatched_portsA
Find schematic nets with port-direction mismatches across sheets.
Catches the two cases that matter most:
multi_output: a net has MORE THAN ONE Output port. Two drivers fighting for the same net: almost always a wiring error or copy-paste mistake.
no_driver: a net has Input ports but ZERO Output (or Bidirectional) ports anywhere in the project. Orphan signal: something is listening but nothing is talking.
Walks compiled docs so multichannel designs are covered. Ports are grouped by their flattened net name, so net-label renames keep ports correctly clustered.
Returns:
Dict with:
- checked: total port objects inspected
- violations: net count with at least one issue
- items: per-net {net, issue, output_count, input_count}. issue is multi_output or
no_driver.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does well: it says the tool walks compiled docs to cover multichannel designs and groups ports by flattened net name. It also documents the return structure. It stops short of explicitly stating that the operation is read-only or describing any preconditions, but the audit framing is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses structured bullets for the two issue types. It is appropriately sized for a multi-case audit, though the return-value section is somewhat redundant given the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter audit with an output schema, the description is complete enough: it defines the issues, explains compiled-doc behavior, and summarizes returns. It could mention explicit prerequisites such as an active compiled project, but lacks no critical information for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to explain. Baseline 4 applies; the description appropriately focuses on scope and return shape rather than inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Find schematic nets with port-direction mismatches across sheets.' It further enumerates the exact issue types it detects (multi_output and no_driver), making the tool's purpose unambiguous and distinguishable from generic net or ERC tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the two failure cases it catches and why they matter, which implies when the audit is useful. However, it does not explicitly say when to use this tool versus sibling audits such as audit_find_floating_ports or audit_find_single_pin_nets, leaving alternative selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_via_antennasA
Find vias connected on only one layer (resonating stubs).
At RF / high data rates the unused side of a one-layer-connected via acts as an open-ended transmission-line stub: it resonates at frequencies whose quarter-wavelength matches the stub length, reflecting signal back into the trace and degrading rise time + EMC compliance. Common after iterative editing where a layer-change via gets stranded when the destination trace was later rerouted on a different layer.
Counts a via "connected" on a layer when:
it's a signal layer with a track/arc/pad/fill/region touching the via (
Board.PrimPrimDistance = 0), ORit's a plane layer and
Via.IsConnectedToPlanereturns True.
Returns a JSON list (rather than selecting and highlighting).
Cost: O(vias × layers × spatial-prims-near-via). Typical boards finish in 1-3 seconds; very dense boards may take longer.
Returns:
Dict with:
- checked: total vias inspected
- violations: antenna-via count
- items: per-violation {net, at, connected_layers}
where at is "(x,y)" mils and connected_layers
will always be 1.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it defines exactly what counts as 'connected' by layer (geometric touching or Via.IsConnectedToPlane), discloses that it returns a JSON list rather than selecting/highlighting objects, and states the cost model and typical 1-3 s runtime. It never explicitly says the operation is read-only/no-modification, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the definition of the defect, then the counting rule, then cost and return shape — a sensible order for an agent deciding whether to call it. It is on the long side for a zero-parameter tool (the RF-resonance paragraph is educational rather than operational), but no sentence is wasted or contradictory.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the counting semantics, cost, and result shape, and even though an output schema exists it still spells out keys like checked/violations/items and the '(x,y)' mil format. The one omission is any prerequisite such as an active PCB document being required for the audit to run.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. No misleading parameter claims are made.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find vias connected on only one layer') and immediately disambiguates the concept with the parenthetical 'resonating stubs' plus an explanation of the failure mode. That definition also separates it from nearby siblings such as audit_find_signal_vias_without_return and pcb_normalize_vias, which target different via problems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete triggering situation ('Common after iterative editing where a layer-change via gets stranded') and explains the RF/high-data-rate harm, which tells an agent when this audit is relevant. It stops short of explicit alternatives or exclusions (e.g., versus the return-path via audit), leaving that comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_find_visible_supplier_pnA
Find schematic components with a VISIBLE supplier-PN parameter.
BOM hygiene rule: only the manufacturer's MPN should appear on the SCH PDF. Supplier part numbers (Digi-Key, Mouser, Newark, Arrow, RS, Farnell) change over time -- a Digi-Key bin gets retired, the part is re-binned under a new Digi-Key SKU, and an SCH PDF saying "Digi-Key 296-1234-1-ND" sends the next person picking the BOM five years from now on a wild goose chase. Manufacturer + MPN is stable; supplier PNs are not.
Detects any component parameter whose name starts with
"supplier" (case-insensitive) AND IsHidden=False. Catches
the legacy "Supplier Part Number 1" along with any free-text
"Supplier" / "Supplier 1" variants designers create.
Returns:
Dict with {checked, violations, items[]} where each item
carries {designator, parameter, value} for a visible
supplier-PN parameter. Pair with sch_set_components_parameters
to hide them in bulk.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full load and does so well: it discloses the exact match predicate (parameter name starts with 'supplier', case-insensitive, IsHidden=False) and the legacy/free-text variants it catches, plus a summary of the return shape. It never explicitly says it is read-only or side-effect free, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, then the rule rationale and detection logic, then the return shape. The middle 'Digi-Key re-bin' anecdote is more rhetorical than operational and could be trimmed, but it does explain why the rule matters and reads coherently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description still summarizes the return dict ({checked, violations, items[]} with designator/parameter/value), and it explains the detection semantics and the remediation pairing. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description adds useful scoping context (only schematic-visible parameters, case-insensitive prefix match) without needing per-parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Find schematic components with a VISIBLE supplier-PN parameter.' It is unambiguous against siblings like audit_find_mpn_inconsistencies and audit_component_param_visibility because it names the exact artifact it hunts (supplier PN, not MPN) and whether it must be visible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the follow-up tool explicitly ('Pair with sch_set_components_parameters to hide them in bulk'), giving a concrete remediation path. It doesn't state exclusions (e.g., does not check PCB-side or hidden params as a separate case), but the audit context is clear enough to select the tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_power_port_orientationA
Check that schematic power-symbol orientations follow the standard convention so reviewers' eyes can scan the sheet quickly.
Rules:
Ground symbols (
ePowerGndPower,ePowerGndSignal,ePowerGndEarth) MUST face down (Orientation = 270deg).Power bars (
ePowerBar, used for VCC/VDD/V+ rails) MUST face up (Orientation = 90deg).
Stylistic but high signal: a flipped ground symbol or a sideways rail is invariably an editing accident, and one violation can hide a real wiring issue under it because the eye keeps wanting to fix the orientation first.
Returns:
Dict with:
- checked: total power-symbols inspected (grounds + bars)
- violations: count with wrong orientation
- items: list of {text, style, expected, actual, sheet}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the pass/fail rule with concrete degree values, gives the rationale for why violations matter, and documents the return payload (checked / violations / items with text, style, expected, actual, sheet). It stops short of stating that the tool is read-only/non-mutating and what preconditions exist (active schematic document required).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence, the rule set is presented as a scannable list with exact enumerations and angles, and the closing rationale and Returns block are short and load-bearing. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-arg audit with an output schema, the description covers rules, scope of symbols, and why the result matters. The one gap is operational context: it does not state whether it scans the active sheet or all sheets of the project, nor any prerequisite document state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description's discussion of ground vs. bar symbol families is not parameter documentation but still clarifies what the tool inspects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Check that schematic power-symbol orientations follow the standard convention', and enumerates exactly which symbol classes (grounds, power bars) and which expected angles are in scope. An agent can distinguish this from neighbouring audits such as audit_find_orphan_power_objects or audit_find_mixed_designator_rotation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'audit' framing and the note that violations are 'invariably an editing accident', but the description never says when to run it (before ERC? before release?), whether it is a prerequisite for anything, or how it relates to the other audit_* siblings. No exclusions or alternative tools are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_tented_via_ratioA
Count tented vs untented via SURFACES on the active board and report the tented ratio.
Untented vias expose the via barrel through solder mask; in humid or salt-spray environments that risks acid traps and copper corrosion. For consumer boards spec is usually "all vias tented top + bottom"; for prototyping boards a lower ratio is fine.
Counts top and bottom surfaces separately (a via reaching only the top layer contributes one surface, a through-via two). Buried / blind via surfaces that don't reach an outer layer are ignored.
Returns:
Dict with:
- total_surfaces: tented + untented (denominator)
- tented: surfaces with tenting on
- untented: surfaces with tenting off
- ratio: tented / total (0.0 - 1.0; 1.0 = all tented)
- violation_pct: untented / total * 100
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains the counting rules (top/bottom counted separately, through-vias two, buried/blind outer-layer surfaces ignored) so the agent knows what is measured. It doesn't explicitly state read-only/no side effects, a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, and the environmental rationale is useful. The 'Returns' block duplicates the existing output schema, which is a small waste but doesn't obscure the front-loaded core.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, and the description restates the return fields anyway; combined with the counting semantics and rationale, it is essentially complete for a zero-parameter audit tool. Only the read-only/side-effect expectation is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies. Nothing to document beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: count tented vs untented via surfaces on the active board and report the tented ratio. The scope and unit of counting are defined well enough to distinguish it from siblings like pcb_get_vias or pcb_normalize_vias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when the ratio matters (humid/salt-spray environments, consumer boards requiring all-vias-tented vs prototyping). It doesn't name an alternative tool or explicit exclusion, so it falls just 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.
audit_variant_not_fittedA
List components marked Not Fitted in the project's CURRENT variant.
Manufacturing context: a Not-Fitted component is on the BOM as a placeholder but should NOT receive paste on the stencil, otherwise the SMT line deposits paste on empty pads and bridging forms on rework. Many houses also want a "DNP" silkscreen marker on the artwork. This tool returns the list of components the agent should consider for those treatments.
This is the identify half. pcb_apply_dnp_paste_exclusion is
the remediation half: it takes this list (or re-derives it) and
collapses the stencil aperture on each Not-Fitted component's
surface pads. Kept as two calls so the detection can be reviewed
before anything on the board is edited.
Returns:
Dict with:
- variant: the current variant's description (empty
when the project has no variant selected: DNP only
applies to a variant)
- checked: total flattened-project components
- violations: how many are NotFitted in this variant
- items: per-violation {designator, comment, unique_id}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does a good job: it describes the audit as the detection-only half, notes that review precedes board edits in the remediation step, and documents the empty-variant edge case. It stops short of explicitly stating it is read-only or describing permissions/side effects, so it is strong but not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then supplies concise manufacturing context, the identify/remediation split, and the return shape. The length is justified by the domain context and the need to explain why this is separate from the remediation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter audit with an output schema and no annotations, the description is complete: it covers purpose, variant scoping, edge cases, sibling relationship, and the returned fields (`variant`, `checked`, `violations`, `items`). An agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to compensate for; the baseline is 4. The description correctly focuses on scoping implied by the current variant rather than inventing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action and resource: it lists components marked Not Fitted in the project's CURRENT variant. It also distinguishes itself from the remediation sibling by calling itself the identify half. The scope and output object are clear enough to select this tool confidently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains exactly when to use the tool: to identify Not-Fitted components that should not receive paste and may need DNP silkscreen treatment. It explicitly names `pcb_apply_dnp_paste_exclusion` as the remediation alternative and explains the deliberate two-call sequencing so the list can be reviewed before board edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datasheet_fetchA
Download a datasheet PDF into the workspace and return its path.
Read the returned path yourself (the pages with the package
drawing and the recommended land pattern); nothing here parses the
PDF. The file is kept under <workspace>/datasheets, named by a
hash of the URL, with a JSON sidecar recording the URL, part
number, SHA-256, size and fetch time, so a second call for the same
URL is answered from the cache (cache: "hit") with the same
bytes. A cached copy that no longer matches its recorded hash is
fetched again.
Refused, with nothing stored: a URL that is not http or https; a
file over 50 MB; a server that does not answer within 60 s; and a
reply that is not a PDF (no %PDF header), which is what a login
or cookie page looks like. For those, download the file in a
browser and read the local copy.
Args: url: the datasheet's http or https URL, ideally the manufacturer's own. part_number: recorded in the sidecar, for the citation.
Returns:
{ok, path, sidecar, cache, url, final_url, sha256, size, pages, pages_approximate, pages_method, fetched_at}. pages
is counted from the page objects in the file without a PDF
parser and can be None or off for a compressed file.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| part_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses the cache location and naming scheme, the JSON sidecar contents, the cache-hit behavior, re-fetch on hash mismatch, and the exact refusal conditions (non-http(s) URL, >50 MB, >60 s timeout, missing %PDF header) with nothing stored. It also notes the page-count limitation for compressed files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then reading instructions, cache behavior, refusal rules, args, and returns. It is long but most sentences earn their place. The Returns section partially restates an existing output schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a fetch tool with no annotations, two parameters, and an output schema, the description covers everything an agent needs: what it produces, where the file lands, caching semantics, failure modes, and sidecar metadata. The output schema handles return shape, and the description adds only useful caveats like pages possibly being None.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: url is described as the http or https URL, ideally the manufacturer's own, and part_number is explained as recorded in the sidecar for the citation. Both parameters gain meaning beyond their bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a precise verb and resource: it downloads a datasheet PDF into the workspace and returns its path. The description also explicitly states the non-goal ('nothing here parses the PDF'). It does not name a sibling such as part_fetch or lib_audit_footprint_vs_datasheet, so sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent to use the returned path itself and read the package drawing and land pattern pages, and it gives a clear fallback for refused cases: download in a browser and read the local copy. It does not compare against alternative tools like part_fetch or lib_dblib_search, leaving the agent to infer when this tool is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_add_circuit_blockA
Fold a canonical circuit block into a DesignPlan in one call.
Authoring boilerplate sub-circuits pin-by-pin in plan JSON is slow
and error-prone (a decoupling network is N caps, 2N pins, and two
net merges that must line up). This emits the canonical topology
of a common block and wires it into plan_json -- allocating
unique refdes, tying every pin to the right net, and tagging
power/ground and roles -- then returns the augmented plan plus an
inline re-validation so the next authoring step starts from a known
state.
It is naming-agnostic: it owns the wiring pattern, never the
part choice. YOU supply every part identity in params
(lib_ref/value/footprint/mpn/datasheet_url),
picked semantically from the live inventory snapshot. Pass computed
values from design_compute_component_value where relevant.
Blocks and their required params (all also accept pins to
override default pin names, refdes_prefix, sheet):
decouplingpower_net, ground_net, lib_ref [, count, value, footprint] -- N bypass caps.pullupsignal_net, rail_net, lib_ref [, value].pulldownsignal_net, ground_net, lib_ref [, value].series_resistornet_a, net_b, lib_ref [, value].voltage_dividerrail_net, ground_net, lib_ref_top, lib_ref_bottom [, value_top, value_bottom, output_net] -- fresh midpoint net.rc_lowpassinput_net, ground_net, lib_ref_r, lib_ref_c [, value_r, value_c, output_net].rc_highpassinput_net, ground_net, lib_ref_r, lib_ref_c [, value_r, value_c, output_net] -- series C + shunt R (AC coupling).led_indicatoranode_net, cathode_net, lib_ref_r, lib_ref_led [, value_r, mid_net].crystalxin_net, xout_net, ground_net, lib_ref, cap_lib_ref [, value, cap_value] -- crystal + a matched pair of load caps (one shared cap_value keeps the legs equal).pi_filterinput_net, ground_net, lib_ref_l, lib_ref_c [, value_l, value_c, output_net] -- shunt C, series L/ferrite, shunt C.mosfet_low_sidecontrol_net, load_net, ground_net, lib_ref_r, lib_ref_fet [, value_r_gate, value_r_pulldown, pulldown, fet_pins] -- gate series R + gate pull-down + FET switching a load low-side.mosfet_high_sidecontrol_net, load_net, rail_net, lib_ref_r, lib_ref_fet [, value_r_gate, value_r_pullup, pullup, fet_pins] -- gate series R + gate pull-up + PMOS switching a load high-side (source at the rail).
Call design_list_circuit_blocks for the full per-block
parameter contract.
Net endpoints the block does NOT own (a pullup's signal, an RC input, a divider rail) should already exist in the plan; the block only creates the nets it fully populates. If you point a block at a net that ends up with a single pin, the inline ERC reports it as a floating net for you to complete.
Args: plan_json: the DesignPlan as a JSON string or dict. block: block name (see the list above). params: block parameters (see per-block requirements above).
Returns:
{ok, plan, added: {refdes, nets, extended_nets}, notes, validation} where plan is the augmented DesignPlan dict
ready for the next design_add_circuit_block or
design_execute_plan, and validation is the same payload
design_validate_plan returns. ok is False on a bad
block name / missing param / schema error, with errors.
| Name | Required | Description | Default |
|---|---|---|---|
| block | Yes | ||
| params | Yes | ||
| plan_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses what is created and mutated (unique refdes, pins tied to nets, power/ground and role tagging), what the block will not do (it only creates nets it fully populates), and the failure mode (ok=False with errors on bad block name, missing param, or schema error). It also warns that single-pin nets surface as floating-net ERC findings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with a one-sentence summary, then rationale, then the block contract table, then notes, then Args/Returns — a sensible ordering. The per-block required-parameter list is long and partially duplicates the design_list_circuit_blocks contract it tells you to call, so the length is justified but not optimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three nested/complex parameters, an output schema, and no annotations, everything an agent needs to invoke it correctly is present: valid block names, per-block parameter requirements, preconditions about pre-existing nets, error semantics, and a pointer to the follow-up tools. Return-value explanation is a bonus on top of the existing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully: plan_json is defined as a DesignPlan in JSON-string or dict form, block is enumerated against the complete list of 12 valid block names, and params is spelled out per block with required fields separated from optional ones in brackets, plus shared overrides (pins, refdes_prefix, sheet). That is more than the schema could ever convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource — fold a canonical circuit block into a DesignPlan — and the following paragraphs explain exactly what it emits (topology, refdes allocation, pin-to-net wiring, role/power tagging). It is clearly distinguished from siblings like design_add_part and design_list_circuit_blocks, so an agent can tell which one to open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use case (replacing error-prone pin-by-pin boilerplate such as a decoupling network), routes to design_list_circuit_blocks for the full contract and design_compute_component_value for values, and states a prerequisite that endpoints the block does not own must already exist. There is no explicit statement of when NOT to use it (e.g., a single one-off part, which belongs to design_add_part), so it falls just 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.
design_add_partA
Add one part and wire its pins to named nets, in one call.
The atomic authoring primitive under the block/bus tools: place a
single arbitrary part -- an MCU, a connector, a regulator -- and
fold each pin into a net. connections is a pin->net map, the
shape a datasheet pinout reads in; pins that map to the same net
(an IC's five VCC pins) merge onto one net automatically, so you
never hand-maintain a net's pin list. Chain with
design_add_circuit_block (peripherals) and
design_connect_bus (wide interfaces) to author a whole netlist
without writing raw net JSON.
Naming-agnostic: you supply the part identity and net names chosen from the live inventory; this owns only the pin->net folding.
Args:
plan_json: the DesignPlan as a JSON string or dict.
refdes: the new part's designator (must be free in the plan).
lib_ref: its library symbol name.
connections: {pin: net_name} -- a net is created if absent
or merged into if present.
value / footprint / lib_path / sheet / manufacturer / mpn /
datasheet_url / role: standard Part fields.
power_nets / ground_nets: net names to flag power / ground when
this call creates them (an existing net keeps its flags).
net_roles: {net_name: role} for nets created here.
Returns:
{ok, plan, added: {refdes, nets, extended_nets}, notes, validation} -- same shape as design_add_circuit_block.
ok is False on a duplicate refdes / empty connections /
schema error.
| Name | Required | Description | Default |
|---|---|---|---|
| mpn | No | ||
| role | No | ||
| sheet | No | main | |
| value | No | ||
| refdes | Yes | ||
| lib_ref | Yes | ||
| lib_path | No | ||
| footprint | No | ||
| net_roles | No | ||
| plan_json | Yes | ||
| power_nets | No | ||
| connections | Yes | ||
| ground_nets | No | ||
| manufacturer | No | ||
| datasheet_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the burden well: it discloses that pins mapping to the same net merge automatically, that a net is created if absent and existing nets keep their power/ground flags, and that ok is False on duplicate refdes / empty connections / schema error. It never says whether plan_json is mutated in place or only returned in the response, which is a meaningful gap for a state-changing call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then scope, then chaining, then args and returns. Every paragraph earns its place, though the docstring-style 'Args:'/'Returns:' scaffolding and reST double-backticks are slightly heavier than needed for an agent-facing description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, nested-object, no-annotation mutation tool this covers what an agent needs: what it does, how it composes with siblings, the connection-map semantics, the failure conditions, and the return shape. The output schema exists and the description still names the keys and the ok=False causes, which is the right level of redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: all 15 parameters are addressed, with special attention on the non-obvious ones (connections as a pin->net map, power_nets/ground_nets only flagging nets created by this call, net_roles scoped to nets created here). The bundled 'value / footprint / lib_path / sheet / manufacturer / mpn / datasheet_url / role' sentence merely labels eight fields as 'standard Part fields' without explaining any of them, which is the main shortfall.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Add one part and wire its pins to named nets, in one call.' It explicitly positions itself as 'the atomic authoring primitive under the block/bus tools', which separates it from design_add_circuit_block and design_connect_bus, both named in the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context ('place a single arbitrary part -- an MCU, a connector, a regulator') and explicitly names the two recurring alternatives it chains with, plus the 'naming-agnostic' constraint that the caller must supply inventory-chosen names. It stops short of stating when NOT to use it in favor of the block/bus tools, but the chaining guidance makes the division of labor clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_apply_hierarchyA
Rewrite a DesignPlan onto the sheets a hierarchy proposes.
Stage 6 of the autonomous flow (schematic emit,
reference/autonomy-roadmap.md), the second half of the hierarchy
step: take the result of design_plan_hierarchy and produce a
NEW plan with sheets = [top sheet, *child sheets], every
part's sheet re-homed per the hierarchy, and every zone moved
with its parts (part-less zones park on the top sheet). The input
plan is never mutated; a non-split hierarchy returns the plan
unchanged. Feed the returned plan to design_validate_plan and
then design_execute_plan; emit the hierarchy's
top_sheet_ops separately to draw the top sheet. Pure Python.
Args:
plan_json: DesignPlan as a JSON string or dict.
hierarchy: The dict returned by design_plan_hierarchy.
Returns:
{"ok": True, "plan": {...rewritten DesignPlan...}, "sheets": [names], "summary": "..."} or
{"ok": False, "reason": "..."} on a malformed plan or
hierarchy.
| Name | Required | Description | Default |
|---|---|---|---|
| hierarchy | Yes | ||
| plan_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: discloses the input is never mutated, a non-split hierarchy returns the plan unchanged, part-less zones park on the top sheet, and it's pure Python. It also documents the failure result shape (ok:False, reason).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first sentence, then the pipeline. The stage/roadmap references add context but are slightly verbose for an agent deciding how to call it; still every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers behavior, params, return shape, and error case even though an output schema exists. Nothing an agent needs in order to call it correctly or sequence it in the flow is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: plan_json is 'DesignPlan as JSON string or dict' and hierarchy is 'the dict returned by design_plan_hierarchy'. It could state more about expected plan structure but the semantics of both params are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Rewrite a DesignPlan') and resource ('onto the sheets a hierarchy proposes'), and explicitly positions itself as the second half of the hierarchy step consuming design_plan_hierarchy output. An agent can distinguish it from design_plan_hierarchy and design_execute_plan 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pipeline: take the result of design_plan_hierarchy, feed the returned plan to design_validate_plan then design_execute_plan, and emit top_sheet_ops separately. It names prerequisites and next steps with specific siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_audit_schematicA
Structured visual/layout audit of the active schematic.
Call AFTER design_execute_plan and BEFORE design_validate
so layout problems are fixed first; ERC violations downstream are
less noisy. Detects three classes of issue, each with enough
geometry for the planner to compute a corrective move:
overlaps - pairs of components whose bboxes intersect
wire_crossings - wire segments that cross a component body (excluding pin-to-pin connections)
stacked_ports - 3+ power/ground glyphs of the same net huddled inside
cluster_radius_mils
Args: project_path: Optional .PrjPcb path. None uses the focused project. cluster_radius_mils: Radius for stacked-port clustering. Default 600 mils.
Returns:
SchematicAuditReport dict: {ok, project_path, overlaps[], wire_crossings[], stacked_ports[], notes[]}.
ok=True iff every list is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | ||
| cluster_radius_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the three detection classes with the geometric rule for each (bbox intersection, wire over component body excluding pin-to-pin, 3+ same-net power glyphs inside cluster_radius_mils) and the ok=True semantics. It stops short of stating explicitly that it is non-mutating and whether a project must be compiled/focused first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and ordering rule, then bulleted detection classes, then Args/Returns. Every sentence earns its place functionally, though the Returns block restates an output schema that already exists and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, non-mutating audit tool with an output schema, nothing an agent needs is missing: ordering, detection semantics, defaults, fallback behavior for the focused project, and the success condition. The explicit Returns section is extra, not a gap-filler.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: project_path is documented as optional .PrjPcb with None meaning the focused project, and cluster_radius_mils as the stacked-port clustering radius with a stated default of 600 mils. Both parameters gain meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Structured visual/layout audit of the active schematic') and then enumerates exactly what it detects: overlaps, wire_crossings, stacked_ports. An agent can distinguish this from design_validate or audit_find_* siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering constraint — call AFTER design_execute_plan and BEFORE design_validate — and explains why (downstream ERC violations are less noisy when layout is fixed first). That is real when-to-use guidance, not just context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_autonomy_guideA
The autonomous spec-to-board loop protocol, in one call.
Returns how to drive a full design run with the harness: the loop
(start session → design_next_action → execute → log → repeat), the
13 pipeline stages with their tools and exit gates, the hard
constraints, and how to resume after context loss. Read this once
before an autonomous run; design_next_action then guides each step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does explain the informational content returned and the protocol it describes. It does not explicitly state that the tool is read-only and side-effect-free, but the nature of a guide tool and the presence of an output schema make that omission minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the tool's identity, then efficiently lists what it returns and how to use it. Every sentence earns its place, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no required fields, and an output schema, the description is complete: it explains the tool's purpose, contents, and position in the workflow. Nothing an agent needs in order 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to add beyond the schema. The baseline for a zero-parameter tool is 4, and the description appropriately avoids unnecessary parameter discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the autonomous spec-to-board loop protocol) and what it returns (the loop, 13 pipeline stages, constraints, resume guidance). It explicitly distinguishes itself from the sibling `design_next_action`, which is used per-step after this one-time read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit timing and alternatives: read this once before an autonomous run, then `design_next_action` guides each step. The agent knows exactly when to call this versus the per-step tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_bom_fileA
Consolidated BOM from a .SchDoc/.PrjPcb on disk: OFF by default.
Offline FALLBACK, same opt-in as design_review_file. Parses the
Altium file directly (no Altium, no license) and groups components
into purchasable BOM lines, one per distinct (mpn, value, lib_reference), designators grouped and naturally sorted, quantity
summed. A .PrjPcb aggregates all its sheets.
Prefer the live-Altium proj_get_bom / proj_export_bom_html
when a session is available. Use this for a file on disk or a CI
artifact.
Enable with EDA_AGENT_HEADLESS_REVIEW=1.
Returns {file, line_count, part_count, lines} where each line is
{quantity, designators, mpn, manufacturer, value, lib_reference, datasheet}: or {"error": ...} if disabled or unreadable
(missing file, a suffix other than .SchDoc/.PrjPcb, or a project
whose sheets cannot be resolved). A design read with zero parts
adds a warning: an empty BOM is not proof of an empty design.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden and does so: it discloses the disabled-by-default gate and how to enable it, that no Altium install/license is required, the exact grouping/aggregation behavior, the error conditions (missing file, wrong suffix, unresolvable project sheets), and the zero-parts warning caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key fact (what it does, that it is off by default), and every sentence adds real information. It is dense and somewhat long, with the return-shape block slightly redundant given the output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the gating env var, parsing source, aggregation semantics, alternatives, return structure, error modes, and the empty-BOM caveat. Nothing an agent needs to call it correctly is missing, despite the very large sibling surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'path' param is undocumented in the schema, but the description compensates by constraining valid inputs to .SchDoc/.PrjPcb files and explaining that a .PrjPcb aggregates all sheets. It stops short of stating whether relative vs absolute paths are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+source ('Consolidated BOM from a .SchDoc/.PrjPcb on disk'), states the exact grouping key, and explicitly names the siblings it differs from (proj_get_bom / proj_export_bom_html). An agent can differentiate it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('Prefer the live-Altium proj_get_bom / proj_export_bom_html when a session is available. Use this for a file on disk or a CI artifact'), plus the opt-in condition via EDA_AGENT_HEADLESS_REVIEW=1 and the OFF-by-default default state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_compose_netlistA
Apply many authoring operations to a plan in ONE call.
The bulk form of the authoring primitives -- the same reason you prefer a batch Altium tool over looping the singular one. Instead of one round-trip per part/block/bus, pass an ordered list and this threads the plan through all of them, then validates once. Each operation sees the previous one's result, so a part added early is available to a bus wired later. Build a whole board in a single call.
Args:
plan_json: the DesignPlan as a JSON string or dict.
operations: ordered list of op dicts, each with an "op" key:
* ``{"op": "add_part", "refdes", "lib_ref", "connections",
...}`` -- plus any optional add-part field (``value``,
``footprint``, ``lib_path``, ``power_nets``,
``ground_nets``, ``net_roles``, ...).
* ``{"op": "add_block", "block", "params"}`` -- see
``design_list_circuit_blocks`` for each block's params.
* ``{"op": "connect_bus", "endpoints", "net_names"?,
"net_prefix"?, "start_index"?}``.Returns:
{ok, plan, added: {refdes, nets, extended_nets}, notes, validation} for the FINAL plan -- same shape as the single-op
tools. On a bad operation, {ok: False, errors: [...]} where
the message names the failing operation's index.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes | ||
| operations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses key behavior: ordered execution, each operation seeing the previous result, one validation pass, and an error shape naming the failing operation index. It omits atomicity/rollback behavior on partial failure and whether the input plan is mutated, which matters for an authoring tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and batching rationale are front-loaded, followed by structured Args and Returns sections. A few phrases such as 'same reason you prefer a batch Altium tool' and 'Build a whole board in a single call' are somewhat redundant but do not overwhelm the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no annotations and a minimal input schema, the description supplies operation-level shape, execution order, validation timing, and return/error format. Remaining gaps are atomicity semantics and full nested parameter details, but the output schema helps cover return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning; it defines plan_json and operations structure, enumerates add_part/add_block/connect_bus op keys, lists optional add_part fields, and points to design_list_circuit_blocks. It leaves some nested shapes such as connections, endpoints, and net_names unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Apply many authoring operations to a plan in ONE call,' and frames itself as the 'bulk form of the authoring primitives.' This clearly distinguishes it from singular siblings such as design_add_part and design_connect_bus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this instead of 'one round-trip per part/block/bus' and contrasts batching with looping the singular tools. It does not state when a single-op tool or a validation-only tool would be preferable, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_compute_component_valueA
Compute a manufacturable component value, snapped to an E-series.
Use this instead of doing the arithmetic by hand: it applies the
standard sizing equation, snaps to the nearest IEC 60063 preferred
value, and reports the ACHIEVED result plus the error so you can see
if the snap is good enough or a tighter series is needed.
Args:
kind: Which calculation:
- "nearest": snap value to the nearest preferred value.
- "feedback_divider": regulator FB divider
v_out = v_ref*(1+Rtop/Rbot); needs v_out, v_ref;
optional r_bottom_ohms to fix the low side.
- "resistor_divider": unloaded divider
v_out = v_in*Rb/(Rt+Rb); needs v_in, v_out.
- "led_resistor": series resistor; needs v_supply,
v_forward, i_led_ma.
- "rc_lowpass": first-order RC; needs f_cutoff_hz and
exactly one of r_ohms / c_farads.
- "crystal_load_caps": symmetric crystal load caps; needs
c_load_pf (datasheet CL), optional c_stray_pf (default
5 pF per leg).
- "i2c_pullup": bus pull-up window (NXP UM10204); needs
v_bus, c_bus_pf, t_rise_ns (1000 standard / 300
fast / 120 fast-plus).
- "divider_tolerance": worst-case output window of an
unloaded divider; needs v_in, r_top_ohms,
r_bottom_ohms, optional tol_pct (default 1).
- "opamp_gain": Rf/Rin (or Rg) for a gain stage; needs
gain and config (inverting / non_inverting).
- "buck_inductor": buck inductor; needs v_in, v_out,
i_out_a, f_sw_khz, optional ripple_pct (default 30).
- "capacitor_energy": stored energy; needs c_farads,
voltage.
- "holdup_cap": bulk hold-up capacitance; needs i_load_a,
t_s (hold-up time), v_drop (allowed sag).
- "discharge_resistor": bleeder; needs c_farads,
v_initial, v_final, t_s (discharge time).
- "junction_temp": Tj = Ta + P*theta_JA; needs power_w,
theta_ja, optional t_ambient (default 25).
- "max_power": thermal derating; needs tj_max,
theta_ja, optional t_ambient.
- "required_theta_ja": package/heatsink sizing; needs
power_w, tj_max, optional t_ambient.
series: E-series name (E6/E12/E24/E48/E96). Default E96 for
dividers/precision, pass E24 for jellybean R/C.
Returns:
{"ok": True, ...fields..., "summary": "..."} or
{"ok": False, "error": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| t_s | No | ||
| gain | No | ||
| kind | Yes | ||
| v_in | No | ||
| v_bus | No | ||
| v_out | No | ||
| v_ref | No | ||
| value | No | ||
| config | No | inverting | |
| r_ohms | No | ||
| series | No | E96 | |
| tj_max | No | ||
| v_drop | No | ||
| i_out_a | No | ||
| power_w | No | ||
| tol_pct | No | ||
| v_final | No | ||
| voltage | No | ||
| c_bus_pf | No | ||
| c_farads | No | ||
| f_sw_khz | No | ||
| i_led_ma | No | ||
| i_load_a | No | ||
| theta_ja | No | ||
| v_supply | No | ||
| c_load_pf | No | ||
| t_ambient | No | ||
| t_rise_ns | No | ||
| v_forward | No | ||
| v_initial | No | ||
| c_stray_pf | No | ||
| r_top_ohms | No | ||
| ripple_pct | No | ||
| f_cutoff_hz | No | ||
| r_bottom_ohms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does most of it: it discloses the sizing equation applied, IEC 60063 snapping, that the ACHIEVED value plus error is reported, and the failure mode (`ok: False` with an error string). It also documents non-obvious defaults (5 pF stray, 30% ripple, 25 °C ambient). It doesn't state that the tool is a pure/side-effect-free computation or how inputs are validated when a required per-kind argument is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long, but almost every line earns its place as the de facto schema documentation for 15 calculation kinds, and the core purpose and series guidance are front-loaded. The indented per-kind block is well structured, though a small amount of prose (e.g. the repeated "needs ...") could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 35-parameter, single-required-field multiplexed calculator, the description covers dispatch, per-kind required inputs, defaults, series selection and error signaling. Since an output schema exists, the return-value explanation is a bonus rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema gives bare types with titles like `r_bottom_ohms`, yet the description supplies meaning for every one of the 35 parameters via the per-kind breakdown, including which are conditional ("exactly one of `r_ohms` / `c_farads`") and which are optional with defaults. This is exactly the compensation a low-coverage schema requires.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ("Compute a manufacturable component value, snapped to an E-series") and immediately distinguishes it from the manual alternative. The enumerated `kind` list makes the full scope of the tool concrete and unmistakable against siblings like `pcb_calc_impedance` or `pcb_calc_trace_width_for_current`, which are PCB-geometry calculators rather than part-value sizing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it ("Use this instead of doing the arithmetic by hand") and gives per-kind selection guidance on which inputs each mode needs, plus practical guidance on choosing `series` (E96 for dividers/precision, E24 for jellybean R/C). It stops short of naming when NOT to use it or pointing at a specific sibling calculator for overlapping cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_connect_busA
Wire a parallel bus across two+ parts in one call.
A wide interface -- an 8-bit data bus between an MCU and a display, an address bus to a memory -- is otherwise N near-identical net objects where bit i of one side is easily misaligned with bit i+1 of the other. This joins the i-th pin of every endpoint into one net per bit, so alignment is structural and the whole bus is one call. It creates NO parts: the endpoints reference parts already in the plan. The nets share one part-set -- the signature the pipeline uses to DRAW a >=4-bit bus as a bus glyph automatically.
Args:
plan_json: the DesignPlan as a JSON string or dict.
endpoints: one dict per part on the bus, {"refdes": str, "pins": [pin, ...]}. Every endpoint must list the same
number of pins (the bus width); bit i joins pins[i] of
each endpoint.
net_names: explicit name per bit (length must equal the width);
omitted -> f"{net_prefix}{start_index+i}" (D0, D1, ...).
net_prefix: prefix for auto-named bits.
start_index: first bit number for auto-naming.
Returns:
{ok, plan, added: {nets, extended_nets}, notes, validation}
-- same shape as design_add_circuit_block. ok is False
on a bad endpoint / width mismatch / schema error.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoints | Yes | ||
| net_names | No | ||
| plan_json | Yes | ||
| net_prefix | No | D | |
| start_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden and does so well: it discloses the mutation scope (creates nets and extended_nets, creates no parts), a downstream side effect (shared part-set triggers automatic bus-glyph drawing for >=4-bit), and failure modes (ok False on bad endpoint / width mismatch / schema error). It does not mention idempotency, permissions, or whether existing nets are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-call benefit and the misalignment rationale are front-loaded before the Args block, and every parameter note earns its place. The middle explanatory sentence about misaligned bits is slightly rhetorical but justifies the tool's existence, so it is only marginally verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with an output schema, the description covers purpose, part-creation semantics, parameter shapes, naming behavior, return shape, and failure conditions. An agent can invoke it correctly without opening the schema, which is the standard for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must compensate, and it does: endpoints is documented with its exact shape ({"refdes", "pins"}), the equal-width constraint, and the bit-i-to-pins[i] join rule; net_names length constraint is stated; net_prefix and start_index are tied to the auto-naming pattern 'D0, D1, ...' with default prefix D. This adds real meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Wire a parallel bus across two+ parts in one call', followed by a concrete scenario (8-bit data bus between an MCU and a display, an address bus to memory). It is clearly distinguishable from sibling net/part tools like sch_place_bus and design_add_circuit_block because it operates on existing parts and produces one net per bit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the situation where this is the right tool ('otherwise N near-identical net objects where bit i of one side is easily misaligned') and states the constraint 'It creates NO parts: the endpoints reference parts already in the plan'. No sibling tool is named as an alternative, so it stops short of a full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_datasheet_checklistA
Return the datasheet-first discipline checklist for design review.
Use this when you need the rules without pulling the full snapshot. The rules also ship inside the _review_guidance block of design_review_snapshot - no need to call this separately if you already ran a snapshot.
Returns: Dict with datasheet_rules (list of rules) and a short action_required summary.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does carry the burden, and it discloses that this is a pure read of static rules plus the overlap constraint with design_review_snapshot. It does not discuss cost, caching, or whether the checklist is version/state dependent, which is a minor gap for a rule-producing tool but nothing an agent would trip over.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the routing condition, then returns. The trailing 'Returns:' block is mildly redundant because an output schema exists, but it is short and does not obscure the key decision information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument, read-only checklist tool with an output schema, the description covers purpose, the sibling overlap, and the payoff of calling it. An agent has everything needed to decide whether to invoke it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline of 4 applies. The description correctly adds no parameter discussion, which is the right call here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the datasheet-first discipline checklist for design review') and immediately differentiates itself from the sibling that carries the same content (design_review_snapshot). An agent can tell exactly what this produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('when you need the rules without pulling the full snapshot') and an explicit when-not-to-use ('no need to call this separately if you already ran a snapshot'), naming the alternative block (_review_guidance) that supersedes it. This is textbook routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_describe_circuitsA
Report the electrical behaviour of each recognised sub-circuit.
Recognises the parametric blocks in a DesignPlan (voltage / feedback
dividers, RC low/high-pass filters, crystal load networks) and computes
each one's characteristic from the chosen component values: a divider's
ratio, a filter's cut-off, a crystal's load capacitance. Use it to
verify a block does what you intended -- it catches the
wrong-but-consistent value error (a divider of two valid resistors that
produces the wrong ratio) that connectivity and equality checks miss.
Most parameters are ratios / time-constants that need only the values, not a supply voltage, so this works on the plan alone. No Altium.
Returns {"ok": True, "circuits": [{motif, parts, summary, params}]};
blocks whose values are missing or unparseable are skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does substantial work: it describes computation over the plan, notes that no supply voltage or Altium is needed, gives the return structure, and explains that missing or unparseable blocks are skipped. It still does not explicitly state read-only/no-mutation behavior, but the overall behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and most sentences add useful information about recognized blocks, verification value, assumptions, and skipped blocks. It is somewhat longer than necessary, especially since an output schema exists, but it remains well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter analysis tool with an output schema, the description is fairly complete: it covers purpose, recognized circuit types, computation, usage context, plan-only operation, and skip behavior. The main remaining gap is the lack of explicit plan_json structure and mutation-safety wording.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It does identify the input as a DesignPlan containing component values, but it does not describe the accepted plan_json format, required fields, or whether a JSON string versus object is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: report the electrical behavior of each recognized sub-circuit and compute characteristics from component values. It also distinguishes the tool from connectivity/equality checks by explaining the wrong-but-consistent value error it catches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use it to verify that a parametric block does what was intended. It also clarifies that it works from the DesignPlan alone and does not need Altium, but it does not explicitly name sibling alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_edit_planA
Edit an existing plan -- the MODIFY complement to the add tools.
Authoring is iterative: a review turns up a wrong value, a part to drop, two nets that should be one. Fix it with edits instead of re-emitting the whole plan, and let the tool own the error-prone bookkeeping (deleting a part scrubs it from every net; merging nets moves and de-dupes pins). Ordered ops, each sees the previous result; validates once at the end so a now-floating net surfaces.
Operations (each a dict keyed by "op"):
{"op": "set_part", "refdes", <field>: <value>, ...}-- changevalue/footprint/mpn/manufacturer/lib_ref/status/sheet/role/ ... on a part.{"op": "delete_part", "refdes"}-- remove a part; nets it emptied are dropped, nets left with one pin are flagged innotesas floating.{"op": "set_net", "net", <flag>: <value>, ...}-- change a net'sis_power/is_ground/role/force_label/force_wires(fix a forgotten power/ground flag).{"op": "connect_pin", "net", "refdes", "pin"}-- tie a part's pin to a net (fix an unconnected pin); makes the net if new.{"op": "disconnect_pin", "net", "refdes", "pin"}-- remove a pin from a net.{"op": "rename_net", "old", "new"}-- rename a net.{"op": "merge_nets", "into", "from"}-- foldfromintointo(keepinginto's flags), then dropfrom.
Args: plan_json: the DesignPlan as a JSON string or dict. operations: the ordered edit ops.
Returns:
{ok, plan, notes, validation} for the edited plan -- same
validation shape as the add tools. On a bad op,
{ok: False, errors: [...]} naming the operation's index.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes | ||
| operations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly. It discloses ordered op execution, single validation at the end, automatic bookkeeping effects (deleting a part scrubs it from every net; merging nets de-dupes pins), and the exact error return shape with operation index on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with a front-loaded purpose and a bulleted operation list that earns its space. Some motivational framing (e.g., the iterative authoring narrative) could be trimmed, but overall the structure is clear and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a multi-operation plan editor and the presence of an output schema, the description is complete. It covers purpose, operation schemas, side effects, ordering, validation timing, and failure behavior, leaving no critical gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains plan_json as a JSON string or dict and fully enumerates every operation type with its keys and semantics, effectively documenting the otherwise opaque operations array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: edit an existing plan. It also positions the tool as the MODIFY complement to the add tools, which helps distinguish it from design_add_part and design_connect_bus. However, it does not explicitly differentiate from other plan-related siblings such as design_preview_plan, design_validate_plan, or design_execute_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: iterative authoring, fixing a wrong value, dropping a part, or merging nets, and advises using edits instead of re-emitting the whole plan. It does not explicitly state when not to use this tool or name competing alternatives like design_execute_plan, but the scenario is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_execute_planA
Instantiate a DesignPlan in Altium.
Two execution paths:
use_canvas=True(default): the new canvas-based pipeline. Plan -> SymbolExtractor -> SchematicCanvas (all in Python) -> one-shot batched emit to Altium. Layout decisions are made before any IPC; an SVG preview is written next to the project file so you can sanity-check the schematic without opening it.use_canvas=False: the legacy executor that interleaves layout with Altium IPC. Kept as a fallback while the new path stabilises.
Both halt early if the plan contains any needs_creation parts. Resolve those first by either picking an existing-lib equivalent or branching into a library-authoring sub-task.
Args:
plan_json: Either a DesignPlan JSON string, or the DesignPlan
as a JSON object/dict. The MCP framework auto-deserializes
JSON-object literals to dicts before the tool sees them,
so both shapes are accepted.
project_path: Absolute path to the target .PrjPcb. Created
if it does not exist.
use_canvas: Pick the execution path. Default True runs
the new canvas pipeline; pass False to fall back to
the legacy executor.
placement_hints: Optional {refdes: {"x": int, "y": int, "rotation": int}} partial anchors. Hinted refdes pin
to the supplied position; others run through the
algorithmic placement (Sugiyama + multi-try scoring).
Used by the agent-in-loop refinement workflow:
1. Run design_preview_plan -> see SVG + score.
2. If layout is bad, identify specific refdes that
should sit elsewhere; build hints dict.
3. Call design_preview_plan again with hints ->
iterate until score is acceptable.
4. Call design_execute_plan with the same hints
to emit the refined layout.
mode: How to reach the sheet. "auto" (default) EDITS a
sheet this tool has drawn before, moving only the parts
whose position changed, placing the new ones, deleting
the ones the plan dropped, and leaving every other
component exactly as it is. It draws from scratch when
there is no prior sheet. This is what makes re-running a
changed plan safe on a schematic somebody has worked on.
"full" re-places every component, discarding any
hand edit; use it when you want the sheet redrawn.
"delta" refuses rather than redraw.
The edit path only knows what is in the plan. To keep a
part where a person dragged it, read the sheet back with
``design_hints_from_sheet`` and pass the result as
``placement_hints``.Returns:
Result dict with ok / project_path / sheets_touched / placed
(list of placements) / failures / needs_creation / notes.
Canvas-path additions: canvas (the SchematicCanvas dict
snapshot) and preview_svg_path (where the SVG was written).
On an edit, delta lists the refdes added, moved, replaced,
removed and untouched; placed then covers only the parts
actually placed, which on an edit is the new ones.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| plan_json | Yes | ||
| use_canvas | No | ||
| project_path | Yes | ||
| placement_hints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses early halting on needs_creation, SVG preview output, that auto edits an existing sheet safely, that full discards hand edits, that delta refuses, and that the edit path only knows what is in the plan. These are exactly the mutation and fallback behaviors an agent needs before invoking a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the two execution paths and then moves through args and returns in a predictable structure. It is longer than necessary in places, particularly repeating use_canvas details and including a Returns section despite an existing output schema, but the length is largely justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex five-parameter mutation tool with no annotations, the definition covers all parameters, execution-path behavior, early-exit conditions, placement refinement workflow, mode semantics, and return values. An agent has enough information to call it correctly and to know when to use sibling tools first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: plan_json accepted shapes, project_path semantics including creation, use_canvas default and path choice, placement_hints structure and refinement workflow, and mode enum meanings are all explained. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: instantiate a DesignPlan in Altium. It distinguishes the canvas and legacy execution paths and references sibling tools such as design_preview_plan and design_hints_from_sheet, so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly documents when to use use_canvas=True versus False, what mode="auto"/"full"/"delta" do, and when to stop because of needs_creation parts. It also gives a concrete agent-in-loop workflow with design_preview_plan and design_hints_from_sheet for placement refinement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_generate_bomA
Derive the bill of materials from a plan's parts in one call.
Every design needs a BOM, and it is mechanical to build from parts
you already authored -- this rolls them up so you do not hand-group
refdes (redundant with the parts, and easy to miscount). Parts with
an mpn consolidate by (manufacturer, mpn) -- one orderable
line each; parts without an mpn consolidate by (lib_ref, value, footprint) -- so every 100 nF 0402 cap is one line. Deterministic
(natural-sorted, R2 before R10). Pure Python, no Altium.
lines_without_mpn flags lines that still need a manufacturer
part number before the BOM is orderable -- the gaps to fill.
Args:
plan_json: the DesignPlan as a JSON string or dict.
set_on_plan: when True (default), the returned plan carries
the generated BOM in its bom field, ready for
design_execute_plan; the parts are unchanged.
Returns:
{ok, bom: [{refdes_list, manufacturer, mpn, description, qty}], summary: {line_count, total_parts, lines_without_mpn}, plan?}.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes | ||
| set_on_plan | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so: it declares the tool pure/deterministic, natural-sorted ordering (R2 before R10), no Altium involvement, and that set_on_plan only attaches a bom field while leaving parts unchanged. Missing only error behavior on malformed plans, which is a minor gap for a pure function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the Args/Returns blocks make it scannable. A few phrases are conversational filler ('every 100 nF 0402 cap is one line', 'easy to miscount'), which cost some density but also carry real semantic information about grouping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists and would have excused omitting return values, the description documents the exact response shape, including the lines_without_mpn flag meaning and the optional plan field. For a 2-parameter derived-data tool this leaves nothing material unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: plan_json is defined as 'the DesignPlan as a JSON string or dict' (matching the anyOf), and set_on_plan's True default and returned-plan side effect are spelled out. The consolidation keys tied to mpn/no-mpn parts also clarify what the input needs to contain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Derive the bill of materials from a plan's parts') and immediately scopes the input as a DesignPlan rather than a live project. The 'Pure Python, no Altium' line implicitly separates it from project-backed BOM tools like proj_get_bom or proj_export_bom_html, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the conditions well: use it when parts already exist on a plan and you want an orderable rollup, and points at design_execute_plan as the downstream consumer of the returned plan. It stops short of naming an explicit exclusion (e.g. 'use proj_get_bom for an existing Altium project'), leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_get_disciplineA
Read the design discipline + DesignPlan JSON schema.
ALWAYS call this first when starting a design task. The result
contains the hard rules the planner must follow (net-label-driven
wiring, datasheet-first part choice, NDA isolation, etc.) plus
the JSON schema that design_execute_plan enforces on input.
Returns:
A dict with discipline (markdown text) and
schema (DesignPlan JSON schema as a dict).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the exact return shape (a dict of 'discipline' markdown and 'schema') and previews the rule content (net-label-driven wiring, datasheet-first parts, NDA isolation). It stops short of describing size, failure modes, or whether the discipline is versioned, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the imperative ordering, then a compact Returns block. The parenthetical rule examples slightly overlap with the Returns section but each phrase adds distinct information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and zero inputs, the description is more than sufficient for an agent to call the tool correctly and to know what it will get back. The only missing piece is any note on staleness or cost, which is minor for a static rules read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is no parameter semantics to explain. The baseline for a zero-param tool applies, and nothing in the description muddies it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the design discipline + DesignPlan JSON schema.' It names the paired sibling (design_execute_plan) and its enforcement role, so an agent can distinguish it from design_* planner tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'ALWAYS call this first when starting a design task' gives an unambiguous activation condition tied to a clearly defined moment in the workflow. No alternative read path is named, but none is needed for a mandatory first step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_hints_from_sheetA
Current sheet positions, as placement_hints for a re-run.
THIS IS HOW YOU EDIT A SCHEMATIC WITH THE ENGINE. Editing by hand means choosing coordinates, which is what sch_place_components refuses. Do this instead:
design_edit_planto change the plan (add the part, change a value, add a net).design_hints_from_sheetto capture where everything currently sits.design_execute_planwith those hints. Every existing part stays exactly where it is, and only the new or changed ones are placed, by the engine rather than by you.
Positions come back as BODY CENTRES, the frame placement_hints
expects, converted from the symbol origins Altium reports. Pass
the returned hints through unchanged; do not round or adjust
them, and drop a refdes from the dict only when you deliberately
want the placer free to move that part.
Needs the <project>.canvas.json snapshot that
design_execute_plan writes, which is what records the library
symbol behind each refdes.
Args: project_path: Absolute path to the .PrjPcb whose sheet to read.
Returns:
ok / hints ({refdes: {x, y, rotation}}) / unmatched
(refdes present in the snapshot but not readable now) /
notes.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses important behavior: positions are body centres converted from symbol origins, the snapshot dependency (canvas.json written by design_execute_plan), and what unmatched means. It doesn't explicitly state that the tool is read-only/non-destructive, but the framing ('capture where everything currently sits') strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses a numbered workflow for structure. Every sentence is useful, but some phrasing is slightly verbose (e.g., 'Editing by hand means choosing coordinates, which is what sch_place_components refuses') and could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (coordinate conversion, dependency on a snapshot file), the description covers all critical details an agent needs: the workflow position, coordinate semantics, snapshot requirement, and handling of hints. The output schema exists, so return values needn't be fully explained, but the description still summarizes them helpfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so for the sole parameter by defining project_path as the absolute path to the .PrjPcb whose sheet to read, adding meaning beyond the schema's bare title. Minor gaps (e.g., whether the project must be open) remain, but the essential semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's specific purpose: capturing current sheet positions as placement_hints for a re-run. It explicitly names siblings (design_edit_plan, design_execute_plan, sch_place_components) and positions itself in a 3-step workflow, so an agent can distinguish its role 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance via a numbered workflow (step 2), says to do this instead of hand-editing, and provides a key usage rule: pass hints unchanged and drop refdes only when the placer should be free. This covers both invocation context and parameter handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_job_resultB
Fetch a finished job's result payload (None until it's done).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose the key non-obvious trait — that the return is None while the job is unfinished — but says nothing about whether the payload is consumed/cleared on read, what happens with an unknown job_id, or whether the call is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the most important constraint (None until done) is included rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be explained. Still missing is the surrounding workflow: no pointer to design_job_status for polling, no statement on error behavior for invalid or expired job_ids, in a family of three job tools where the ordering matters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single job_id parameter, and the description never says where a job_id comes from (presumably design_job_start) or what format it takes. The parameter name is fairly self-explanatory, which keeps this from a 1, but the description adds no meaning beyond the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fetch a finished job's result payload"), which cleanly separates it from a status tool. It does not name its siblings (design_job_start / design_job_status), so an agent must infer the workflow from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical "None until it's done" implies the caller should wait for completion before using this tool, which is real usage guidance. However, it never explicitly points to design_job_status as the way to check completion, nor states what to do while the job is running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_job_startA
Start a long engine run as a background job; returns its id.
For work that can exceed the MCP tool timeout (routing a dense
board). Poll design_job_status, then design_job_result when done.
Args:
kind: registered job kind. Currently: route (offline A*
router; params needs a geometry dict, optional
rules / net_classes / grid_pitch_mils).
params: keyword arguments for the engine.
Returns:
{"job_id": ..., "kind": ...} or {"error": ...} for an
unknown kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses key behavior: it is asynchronous, returns a job id, must be polled, and returns an error for an unknown kind. It does not cover cancellation, concurrency, or job lifetime, but it provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the action and return value, and later lines cover timing, polling, arguments, and errors without wasted text. The Returns section is slightly redundant with the output schema, but overall it is well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existing output schema, return values need not be fully explained, yet the description still summarizes them. For an async job-start tool with a free-form params object, it supplies the essential context: timeout rationale, polling workflow, supported kind, and error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply semantics; it explains that kind is a registered job kind, names the current route kind, and describes route's required geometry dict plus optional rules/net_classes/grid_pitch_mils. That is strong for params, though future kinds remain open-ended.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Start a long engine run as a background job; returns its id.' It clearly distinguishes this from design_job_status and design_job_result by naming them as follow-up tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it for work that can exceed the MCP tool timeout, such as routing a dense board, and names the exact polling sequence: design_job_status then design_job_result. This gives when-to-use and the correct alternative workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_job_statusA
Status of a background job (or all jobs if job_id is blank).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral weight. It does disclose a non-obvious trait — a blank job_id returns all jobs — which is real added value. But it says nothing about whether the call blocks, what happens for an unknown/expired job_id, whether the all-jobs listing is paginated, or that this is a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the primary behavior and followed by the conditional edge case. Nothing is wasted and nothing needs reordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation is unnecessary, and the parameter is covered. However, for a job-lifecycle tool sitting alongside design_job_start and design_job_result, the description omits the lifecycle relationship (start → poll status → fetch result), which is the main gap an agent would need filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema description coverage, so the description must compensate — and it does, defining job_id's semantics precisely (empty/blank → list all jobs). It doesn't state the id format or where to obtain a job_id (presumably from design_job_start), which keeps it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Status of a background job', with the additional scope that a blank job_id returns all jobs. It implicitly contrasts with design_job_result (which fetches output) but never names that sibling, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this is the polling/lookup tool for jobs created by design_job_start and that design_job_result should be used to retrieve output, but the description never says so. No explicit 'use this when' or exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_layout_schematicA
Compute the schematic layout for a DesignPlan, as pure data.
THE ONE SCHEMATIC ENGINE. Every schematic tool now runs the same
canvas pipeline, so whenever you are asked to draw or lay out a
schematic, reach for this family and nothing else: this tool for
the geometry as data, design_preview_plan for the same layout
rendered to SVG, design_execute_plan to place it in Altium.
There is no longer a second engine to choose between.
It used to run a second, standalone engine whose placements and score described a layout nobody would ever see. That engine is no longer reachable: measured over ten held-out corpus sheets it lost the shared objective on seven and produced four pairs of OVERLAPPING BODIES where this pipeline produced none, so the shorter wire it appeared to draw was partly bought by stacking parts on top of one another.
Runs OFFLINE and never reaches Altium, so it works on every
backend. That costs one thing and the result says which: symbol
geometry is synthesised from the plan's pin lists rather than
read from a library, so symbols comes back "synthetic"
and execution_accurate is False. The placement and routing
RULES are the ones that execute. When you need the exact
geometry, use design_preview_plan (same pipeline, real
symbols, renders SVG) or design_execute_plan to emit.
Args:
plan_json: A DesignPlan as a JSON string or a JSON object/dict.
sheet: Sheet name to report (default "main").
grid_mils: Accepted for compatibility; the canvas pipeline
snaps to its own 100-mil grid.
fr_iterations: Accepted for compatibility; the pipeline sweeps
its own force-directed budget and scores the results.
placement_hints: Optional {refdes: {"x", "y", "rotation"}}
pinned positions, same as design_execute_plan.
render_png: Optional path for a preview image of the layout.
Returns:
Dict with ok / sheet / engine ("canvas") /
execution_accurate (True) / summary / placements /
net_representation / wires / net_labels /
power_ports / junctions / score / notes /
failures. On a bad plan: {"ok": False, "errors": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
| sheet | No | main | |
| grid_mils | No | ||
| plan_json | Yes | ||
| render_png | No | ||
| fr_iterations | No | ||
| placement_hints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavior absent from annotations: it runs offline, never reaches Altium, synthesizes symbols from pin lists, and returns synthetic symbols. However, it internally contradicts itself by saying execution_accurate is False earlier and then listing execution_accurate (True) in the Returns section, which is a material inconsistency for an agent interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core routing decision and uses clear sections for engine behavior, arguments, and returns. It is somewhat long and includes historical benchmark narrative about the removed engine that is not essential for invocation, but the structure remains usable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no annotations and 0% schema description coverage, the description is largely complete: it covers offline execution, synthetic symbols, arguments, and error behavior. The main gap is the self-contradictory execution_accurate value, which prevents it from being fully reliable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does document all six arguments. It explains plan_json as a JSON string or object, sheet as a report target, grid_mils and fr_iterations as compatibility arguments, placement_hints as pinned refdes positions, and render_png as a preview path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: compute the schematic layout for a DesignPlan as pure data. It explicitly distinguishes this tool from design_preview_plan (SVG) and design_execute_plan (Altium placement), so an agent can identify it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: use this family for schematic drawing/layout, this tool for geometry as data, design_preview_plan for rendered SVG, and design_execute_plan for Altium emission. It also states that there is no second engine to choose between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_learn_from_layoutA
Capture your placement edits as training data.
Workflow:
Run
design_execute_plan(canvas path): it writes a<project>.canvas.jsonsnapshot alongside the .PrjPcb.Open the schematic in Altium, drag components to taste, save.
Call this tool. It reads the snapshot + current Altium positions, diffs them, and appends one row per moved component to
%USERPROFILE%\.eda-agent\placement_edits.jsonl.
Each row carries: design_id, refdes, part_role, part_lib_ref, anchor_refdes, anchor_role, anchor_lib_ref, dx_mils, dy_mils, rot_delta_deg, design_size, ts.
Anchor = highest-pin-count netlist neighbor on a non-power / non-ground net (or spatial-nearest fallback). Captures the relational placement preference, not just "I moved this 200 mils right".
The accumulating log feeds placement_priors.json (the
relative-anchor priors used by the pipeline's placement pass).
Args:
project_path: Same project path you passed to
design_execute_plan.
Returns: Dict with ok, rows_appended, refdes_moved, refdes_unchanged, log_path, notes.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so: it discloses the write side effect, the exact log path (%USERPROFILE%\.eda-agent\placement_edits.jsonl), the append semantics, the full column list of each row, and the anchor-selection rule (highest-pin-count netlist neighbor on a non-power/non-ground net, with spatial-nearest fallback). That is far more than a restatement of the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then a scannable numbered workflow, then semantics, then args/returns. Every section is purposeful, though the explicit 'Returns:' block partially duplicates the existing output schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool that writes a training-data log, the description covers preconditions, side effects, output location, record schema, and downstream consumption. With an output schema present, the brief returns summary is sufficient; nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must supply meaning, and it does: project_path is defined as 'Same project path you passed to design_execute_plan,' which is a real constraint (the snapshot must correspond to that project). It stops short of stating the expected path form or what happens if no snapshot exists for that path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Capture your placement edits as training data') and immediately grounds it in a concrete artifact: it diffs a .canvas.json snapshot against live Altium positions and appends rows to a JSONL log. The relationship to the sibling design_execute_plan is made explicit, so an agent can place this tool in the pipeline without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The numbered workflow gives explicit preconditions (design_execute_plan must have run first to produce the snapshot, the user must have dragged components and saved) and the exact moment to call it. It also names the downstream consumer (placement_priors.json / the pipeline's placement pass), which tells the agent why and when this step matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_lint_reportA
Run all design-lint checks and return a consolidated violation report.
Sequences the individual audit.* checks the way a pre-release
review would: compile-gate first, then schematic-side rules, then
PCB-side rules, then optional ERC/DRC. Each section's raw result
is preserved so an agent can drill in; a top-level summary
gives counts per check.
Returns structured JSON instead of dumping to the Messages panel (Altium's panel is fine for human review but the agent needs a machine-readable shape).
Checks executed:
component_param_visibility-- per-class parameter visibility (cap voltage, IC MPN, etc).power_port_orientation-- ground down / rails up.find_floating_ports-- SCH ports not connected to a pin or sheet entry.tented_via_ratio-- PCB tented vs untented via surfaces.find_bad_connections-- PCB tracks / arcs with dangling endpoints withinbad_connection_tolerance_mils.find_signal_vias_without_return-- PCB signal vias with no nearby ground/power via for return-current.drc(only ifrun_drc=True) -- Altium's Design Rule Check, full project.
Args:
run_drc: If True, also runs Altium's DRC and includes its
violations. Off by default because DRC mutates the .DRC
report file and can take ~5-10s on a busy board.
bad_connection_tolerance_mils: Coord tolerance for
find_bad_connections. Default 1.0; raise to surface
only gross misalignments.
Returns:
Dict with:
- summary: per-check {checked, violations} (best
effort -- missing/failed checks listed under _failed)
- sections: per-check raw result objects under their
section name
- totals: overall violations count across all
sections (does NOT include DRC raw count -- DRC items
are listed separately because severity / fix-cost
differs)
| Name | Required | Description | Default |
|---|---|---|---|
| checks | No | ||
| run_drc | No | ||
| bad_connection_tolerance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does it well: it discloses the DRC side effect on the .DRC report file, the runtime cost, best-effort semantics with failed checks surfaced under `_failed`, and the fact that `totals` excludes DRC counts. Those are exactly the non-obvious traits an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the sequencing rationale, then structured into checks/args/returns sections. The Returns block largely restates the output schema and the per-check list is verbose, but every item is concrete rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return documentation is partly redundant though it adds the meaningful caveat that totals exclude DRC. Combined with the detailed check inventory and the DRC cost/side-effect warning, the only real hole is the undocumented `checks` parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It thoroughly documents `run_drc` and `bad_connection_tolerance_mils` (default 1.0, raise to surface only gross misalignments), but the `checks` array parameter is never mentioned — the 'Checks executed' list reads as a fixed sequence, leaving it unclear whether an agent can subset the checks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run all design-lint checks and return a consolidated violation report') plus the ordering model (compile-gate, schematic, PCB, optional ERC/DRC). That clearly separates it from the single-purpose siblings like audit_find_bad_connections or pcb_run_drc, which it composes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context ('the way a pre-release review would') and a conditional rule for run_drc (off by default because it mutates the .DRC report file and takes ~5-10s). It does not explicitly name the alternative to use when an agent wants a single check, leaving the drill-in path implicit in 'raw result is preserved so an agent can drill in'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_list_circuit_blocksA
List the canonical circuit blocks and their parameter contracts.
Discoverability for design_add_circuit_block: returns every block
with its summary, required params, optional params (already folding
in the universal sheet / lib_path / pins), and which nets it
creates. Call this to author with the exact parameter names instead
of guessing -- a mistyped optional key is silently ignored by the
block, so getting the names right up front avoids an incomplete
part the ERC can't catch. Pure Python, no Altium.
Returns:
{ok, blocks: [{name, summary, required, optional, creates_nets}]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: "Pure Python, no Altium" discloses that no host application or design state is touched, and the silent-ignore failure mode explains a non-obvious behavioral hazard in the paired write tool. Return shape is also described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the rationale, then the return shape — a sensible order with little waste. The explicit "Returns:" block is mildly redundant given an output schema already exists, costing it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-param discovery tool with an output schema needs very little, and this description still adds the workflow rationale and the silent-ignore trap. Nothing an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so the baseline is 4. The description does useful work by explaining what each returned block entry contains (required, optional, creates_nets) and that universal keys like sheet/lib_path/pins are already folded in, though these are output semantics rather than input params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("list the canonical circuit blocks and their parameter contracts") with the scope of each returned entry enumerated. It also names the sibling it exists to support (design_add_circuit_block), so an agent can place it in the workflow without further inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to call it: "Call this to author with the exact parameter names instead of guessing." It also gives the condition that makes this necessary rather than optional — a mistyped optional key is silently ignored — which is effectively a when-not-to-guess rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_live_noteA
Log a decision to the live view, before acting on it.
The Layout tab lists decisions newest first next to the board, so the user sees what is about to happen and why, and can stop it. Call this BEFORE the step it describes, one decision per call, in a sentence or two: what you will do and the reason (the datasheet figure, the rule, the measurement).
Args:
section: what the decision is about, a short label such as
placement, routing, rules or a block's name.
text: the decision and its reason.
Returns:
The logged entry {"seq", "time", "ts", "section", "text"},
or {"error": ...} when text is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| section | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it says the entry appears in the Layout tab newest-first, that the user can see and stop the described action, and that empty text returns an error. It does not cover whether notes can be edited or deleted, but the key side effect and error behavior are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core instruction and timing, then adds useful UI context, calling convention, parameter definitions, and return behavior. Every sentence supports correct invocation, and the structure mirrors the agent's decision process.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter logging tool with no annotations, the definition is nearly complete: it explains purpose, timing, side effect, parameter meaning, return shape, and error condition. The main missing context is sibling differentiation among the live-view/session tools, which leaves some routing ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does: section is defined as a short label such as placement, routing, rules, or a block name; text is defined as the decision plus its reason. Both parameters are required and both are explained with format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Log a decision to the live view." It is clear what the tool does and when in the workflow it applies, but it does not explicitly distinguish itself from nearby siblings such as design_live_view or design_live_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong usage timing: call it BEFORE the step it describes, one decision per call, with a sentence or two explaining what will be done and why. It does not name alternate tools or state when not to use this one, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_live_snapshotA
Publish a board to the live view as its next version.
The placement and routing jobs publish on their own, and their
apply tools republish what they wrote. Use this for any other
board state: the board as it is in the EDA now (expect_file),
a board saved as LayoutBoard JSON (LayoutBoard.save, .json
or .json.gz), or the last board again with a note. The Layout
tab highlights what changed since the version before.
Only expect_file calls the bridge: it reads the focused board
exactly (pcb.get_layout_model), a few seconds on a large board.
It is never done on its own, because reading some boards has
crashed Altium's scripting engine.
Args: note: what this snapshot shows; also logged as a decision. board_json_path: a LayoutBoard JSON file. expect_file: full path of the focused board, to read it from Altium as it is now. The read refuses if another board is focused. (Neither: republish the board the last engine job, apply or snapshot in this server published.)
Returns:
{"version", "board", "status": {nets, routed, partly, not_started}, "changes": {added, moved, removed}, "seconds", "url"}, or {"error": ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| expect_file | No | ||
| board_json_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that only expect_file calls the bridge, that the read takes a few seconds on a large board, that it refuses if another board is focused, and why it is never invoked standalone (past scripting-engine crashes). It does not say whether published versions can be reverted or what permissions are needed, which is the only remaining gap for a state-mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then behavior, then Args/Returns, with no filler sentences. It is on the long side with some nested parentheticals and indirection around 'the last engine job', but nearly every clause adds decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all three invocation modes, the causal caveat about the bridge read, failure/refusal behavior, and error shape, so an agent has everything needed to call it correctly. An output schema exists, so the brief return summary is a bonus rather than a requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: every parameter gets meaning beyond its name — note is also logged as a decision, board_json_path accepts .json or .json.gz, expect_file must be the full path of the focused board and fails on focus mismatch. The mutually-exclusive default case is also spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (publish a board to the live view as its next version) and immediately scopes it against the placement/routing jobs and their apply tools that publish on their own. An agent can tell exactly what this tool is for relative to design_live_view and the job apply tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates the three cases this tool is for — the board as it is in the EDA now (expect_file), a saved LayoutBoard JSON, or a re-publish with a note — and states the alternative path (jobs/apply tools publish themselves). The 'Neither: republish the last board' case removes the last ambiguity about default behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_live_viewA
Open the live layout view and return its URL.
Makes sure the local dashboard is running (it usually is, started with the MCP server) and points at its Layout tab, which draws the board as the in-house placer and router change it: parts, pads, tracks per layer, vias, pours, blocks and planned lanes, with new and moved items glowing for 30 s and removed copper fading out. Next to it is the decision log, newest first, and a status line (routed n / N nets, k partly). Give the URL to the user so they can watch while you work. Reads files only; no bridge call.
Args: open_browser: also open the URL in the default browser.
Returns:
{"url", "dashboard": "running"|"started"|"disabled"|"failed", "version", "board", "status"}, plus "reason" when the
dashboard is not up. version is 0 until a board has been
published.
| Name | Required | Description | Default |
|---|---|---|---|
| open_browser | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it says the tool reads files only, makes no bridge call, may ensure the local dashboard is running, and can open a browser. It also discloses dashboard states such as running, started, disabled, and failed, plus the version-zero behavior before a board is published.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the argument explanation is clear. However, the middle paragraph spends substantial space on visual details like glowing items and fading copper, which are informative but not essential for selecting or invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete for a read-only viewing tool: it explains the URL result, dashboard running states, version semantics, and the reason field when the dashboard is unavailable. Output schema exists, and the description still adds useful return-value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the single parameter is explicitly explained: open_browser also opens the URL in the default browser. That is sufficient added meaning for a one-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Open the live layout view and return its URL." It is easy to distinguish from a generic snapshot tool, though it does not explicitly name or contrast with its closest sibling, design_live_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear implied usage: give the URL to the user so they can watch while you work. However, it does not say when not to use it or when to prefer design_live_snapshot, design_live_note, or other viewing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_load_fab_profileA
Validate a fab capability profile and echo the normalized form.
Stage 8 of the autonomous flow (rules & stackup,
reference/autonomy-roadmap.md): before synthesizing design rules,
the fab's published limits are captured as a FabProfile dict --
transcribed from the fab's capability page (cite it in source),
NEVER recalled from memory. This tool is the schema gate: it
validates the dict (all dimensions MILS, copper weight oz/ft^2,
stackups with copper outer layers and no adjacent copper plies) and
returns the normalized profile for design_synthesize_rules.
Args:
profile: FabProfile as a JSON object/dict: name, optional
source citation, copper_layer_counts, the seven
min_*_mils floors, and optional stackups.
Returns:
{"ok": True, "profile": {...}, "stackups": [names], "summary": "..."} or {"ok": False, "reason": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly succeeds: it discloses the concrete validation rules (MILS dimensions, oz/ft^2 copper weight, copper outer layers, no adjacent copper plies) and both success and failure response shapes. It only implies read-only/pure behavior rather than stating it, and doesn't say whether failed validation raises or just returns ok:false beyond the shape shown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the never-from-memory rule are front-loaded, and the Args/Returns blocks map cleanly to the schema and response. It is somewhat verbose (roadmap path citation, docstring-style formatting) but every section carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single nested-object parameter with no annotations, the description supplies the domain vocabulary, units, validation constraints, return shape, and downstream consumer — enough to call it correctly. Only the exact min_* key naming and explicit purity statement are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it enumerates the expected keys (name, source citation, copper_layer_counts, seven min_*_mils floors, optional stackups) and their unit conventions. It stops short of giving exact key names for the seven min_* fields, leaving macro-pattern inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (validate + echo normalized form) against a named resource (FabProfile) and explicitly positions itself as the 'schema gate' feeding design_synthesize_rules. An agent can distinguish it from any sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear sequencing context (Stage 8, before synthesizing design rules) and a hard constraint on data provenance (transcribe from the fab capability page, never recall from memory). It stops short of naming when NOT to use it or a sibling alternative to skip to, but the operational context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_next_actionA
Decide the single next action for an autonomous design run.
Reads the session journal and returns the next 13-stage pipeline step
server-side, so a client need not memorize the workflow: loop
"call design_next_action -> do what it says -> design_session_log the
result" until status is complete or blocked.
Returns a dict with status (proceed | retry | blocked | complete),
the stage, its goal, suggested_tools (exact tool names),
the exit_gate that marks it done, and, on blocked, the
open_question to put to the user. Bounded retries: a stage that
fails repeatedly escalates to blocked instead of looping forever.
The layout stages (placement, routing, pours_tuning, verification)
have measured gates: the reply also carries gate, the numbers
and the values that pass, and last_gate, the verdict on numbers
already logged for the stage. A stage logged ok whose logged numbers
fail its gate comes back as retry, with the failing numbers in
guidance. A stage logged with no numbers is taken as logged.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the bounded-retry policy and escalation to 'blocked', the gate-evaluation behavior (a stage logged ok but failing its gate returns 'retry' with failing numbers in 'guidance'), and the edge case that a stage logged with no numbers is taken as logged. That is exactly the non-obvious behavior an agent needs to avoid misinterpreting a 'retry' response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core decision, then the loop protocol, then the return contract, then gate semantics — a sensible escalation of detail. It runs a bit long and partly restates the output schema, but each paragraph adds a distinct operational fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return-value enumeration is supplementary rather than required; the real gaps are the undocumented session_id and the absence of any statement about failure when no session exists or how the tool resolves an implicit active session. Otherwise complete for a stateful pipeline-driver tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'session_id' (with an empty-string default) is never mentioned in the description. The phrase 'reads the session journal' hints that the tool is session-scoped, but nothing explains what session_id means, whether an empty value resolves to the active session, or what happens if it is wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'decide the single next action for an autonomous design run' — and makes the mechanism explicit: it reads the session journal and computes the next 13-stage pipeline step server-side. This clearly separates it from siblings like design_session_status (inspection) or design_autonomy_guide (reference material).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit operating protocol: loop 'call design_next_action -> do what it says -> design_session_log the result' until status is complete or blocked, which tells the agent both when to call and when to stop. It never names a competing tool or states when *not* to use this one, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_plan_from_sheetA
Read a DesignPlan back off a schematic, including one you did not draw.
Use this when you are asked to change a schematic that has no
<project>.canvas.json beside it: a sheet drawn by hand, or
one from an older project. It gives you the plan the rest of the
design tools take, so an edit becomes "change the plan, lay it
out again" instead of dragging symbols around one at a time.
The plan is reconstructed from what is actually drawn: the components give the parts, the compiled netlist gives the nets, and the power-port glyphs say which nets are rails. It is validated before it is returned.
WHAT A SCHEMATIC DOES NOT RECORD, so you must supply it:
roleon each part. This is the tag that lets the placer recognise a decoupling bank, a crystal cluster, an op-amp motif. A plan without roles lays out noticeably worse. Read the returned part list and netlist and assert the roles yourself before laying it out.zoneon each part, if you want functional blocks.Single-pin nets, which the plan schema cannot express. They come back in
dropped_pins.
Then: edit the plan, call design_layout_schematic to see it,
and design_execute_plan to apply it. Pass
design_hints_from_sheet output as placement_hints if you
want the existing positions kept.
Args: project_path: The .PrjPcb the sheet belongs to. Its compiled netlist is what supplies the nets. sheet_document: Full path to the .SchDoc to read. Defaults to the active document.
Returns:
ok / plan (a DesignPlan dict, or None on a refusal) /
parts_read / nets_read / dropped_pins / notes.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | ||
| sheet_document | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well. It explains how the plan is reconstructed, that it is validated before return, what is not recorded (roles, zones, single-pin nets in dropped_pins), and that a refusal returns plan=None.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loads the core purpose, then uses structured sections for missing information, follow-up steps, args, and returns. Most sentences earn their place, though it is somewhat verbose for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of reconstructing a plan from drawn geometry and netlist data, the description covers the important gaps an agent must know: roles must be supplied, zones optional, dropped pins reported, and edits should flow through layout and execute tools. The output schema exists, but the description still usefully calls out key return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: project_path is documented as the .PrjPcb whose compiled netlist supplies nets, and sheet_document as the full .SchDoc path defaulting to the active document. Both parameters gain meaning beyond their bare names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it reads a DesignPlan back off a schematic, including hand-drawn or older sheets without canvas metadata. This clearly distinguishes it from nearby design/plan tools by focusing on reconstruction from an existing schematic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition: use it when changing a schematic with no <project>.canvas.json beside it, such as a hand-drawn or older-project sheet. It also explains the follow-up workflow with design_layout_schematic and design_execute_plan, though it does not explicitly name the alternative tool for the canvas.json-present case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_plan_hierarchyA
Propose a multi-sheet hierarchy for a dense DesignPlan.
Stage 6 of the autonomous flow (schematic emit,
reference/autonomy-roadmap.md): a plan past ~20 parts stops fitting
one readable sheet and dense single sheets are the known short-risk
regime. This tool partitions the parts by signal connectivity
(min-cut, zones kept atomic), names each child sheet from its
dominant zone role, derives the inter-sheet ports from the signal
nets the cut severs (power/ground rails are continuous through
power ports and never become sheet entries), and emits the
top-sheet op list in the exact parameter shapes of
sch_place_sheet_symbol / sch_place_sheet_entry /
sch_generate_toc. Apply the result to the plan with
design_apply_hierarchy before design_execute_plan.
Deterministic; pure Python, no Altium.
Args:
plan_json: DesignPlan as a JSON string or dict.
max_parts_per_sheet: Split threshold (default 20). At or below
it the plan stays single-sheet (split=False).
Returns:
{"ok": True, "split": bool, "top_sheet": str, "sheets": [{name, refdes, zones, part_count}], "ports": [{net, from_sheet, to_sheet, io_type}], "top_sheet_ops": [{tool, params}], "cut_nets": int} (op coordinates are MILS) or
{"ok": False, "reason": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes | ||
| max_parts_per_sheet | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it states the operation is a pure-Python, deterministic, no-Altium proposal (i.e. non-mutating), discloses the algorithm's invariants (zones kept atomic, power/ground rails continuous through power ports and never sheet entries), and notes op coordinates are in MILS. It also gives the failure shape ({ok: False, reason}).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line purpose, then stage context, algorithm, workflow ordering, and structured Args/Returns blocks — every section is scannable and the critical routing sentence (apply before execute) is not buried. Length is justified by the number of non-obvious invariants it discloses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, non-mutating planning tool with no annotations, the description covers trigger, algorithm, determinism, output fields, units, failure mode, and the required follow-up call. The Returns block largely restates the existing output schema, but that redundancy does no harm and nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it explains plan_json accepts a JSON string or dict, and that max_parts_per_sheet is a split threshold defaulting to 20 with the exact at-or-below behavior (split=False). It never states what fields a DesignPlan must contain or what happens with a malformed plan.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ("Propose a multi-sheet hierarchy for a dense DesignPlan") and the body specifies the mechanism: min-cut partitioning by signal connectivity, child sheet naming from dominant zone role, and inter-sheet port derivation. It clearly positions itself as a non-mutating proposal step whose output feeds design_apply_hierarchy, which separates it from the execute/apply siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete trigger condition (plans past ~20 parts, dense single sheets being the known short-risk regime) and an explicit downstream workflow: apply with design_apply_hierarchy before design_execute_plan. It does not distinguish itself from the closely named sibling design_suggest_partition or design_preview_plan, so an agent must still infer which of the two proposal tools to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_preview_planA
Render a DesignPlan to SVG without emitting to Altium.
Same pipeline as design_execute_plan(use_canvas=True) minus
the place + wire + save IPC pass. Symbol extraction still
consults Altium on cache miss (it has to read the SchLib), but
no project is created and nothing is placed. Use this to
sanity-check a layout cheaply before committing to a full emit.
Args:
plan_json: DesignPlan as JSON string or dict.
output_svg_path: Where to write the SVG. Default:
<repo>/.symbol_cache/preview.svg.
placement_hints: Optional {refdes: {"x", "y", "rotation"}}
partial anchors, same as design_execute_plan: hinted
refdes pin to the supplied position, the rest run through
algorithmic placement. Iterate preview→hints→preview to
refine a layout before a full emit.
Returns: Dict with ok / preview_svg_path / canvas (snapshot) / counts {placements, wires, labels, power_ports, junctions} / notes / failures.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes | ||
| output_svg_path | No | ||
| placement_hints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the hidden side effect that symbol extraction still consults Altium on cache miss (reads SchLib), that no project is created and nothing is placed, that an SVG file is written, and it lists the return dict keys (ok / preview_svg_path / canvas / counts / notes / failures).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavioral contrast is front-loaded in the first sentence, and the Args/Returns structure is scannable. It is slightly long for a three-parameter tool, with some restatement between the prose and the Args block, but every section still carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers pipeline differences, side effects, parameter formats, and iteration workflow; an output schema exists so the return-value enumeration is redundant but harmless. Minor gaps remain, such as whether the output directory must exist or whether an existing SVG is overwritten, but nothing blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all three parameters: plan_json accepts a JSON string or dict, output_svg_path has a stated default of <repo>/.symbol_cache/preview.svg, and placement_hints is explained structurally ({refdes: {x, y, rotation}}) with semantics of hinted-vs-algorithmic placement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (render a DesignPlan to SVG) and immediately scopes it against the sibling pipeline: 'Same pipeline as design_execute_plan(use_canvas=True) minus the place + wire + save IPC pass.' An agent can distinguish this preview tool from design_execute_plan without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to sanity-check a layout cheaply before committing to a full emit' gives an explicit when-to-use, and the exclusion (full emit via design_execute_plan) is named. It even prescribes a workflow loop: 'Iterate preview→hints→preview to refine a layout before a full emit.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_review_fileA
Offline FALLBACK review of a .SchDoc/.PrjPcb: OFF by default.
This is NOT the preferred way to review a design. It parses the Altium file directly (OLE reader) with no running Altium and no license, so it only covers the netlist-free, component-level subset (missing MPN / datasheet / manufacturer, placeholder values, designator collisions, missing / unannotated designators, incomplete title block). It cannot compile a netlist or run ERC, and an offline parser can misread a file.
Prefer the live-Altium tools whenever a session is available:
design_lint_report, proj_run_erc, design_review_snapshot,
and the audit_* family run Altium's own engines and see
connectivity this reader cannot. Reach for this tool only when Altium
genuinely can't be opened (a file on disk, a CI runner).
Because of that, this surface is disabled by default. To enable
it, set the environment variable EDA_AGENT_HEADLESS_REVIEW=1.
Without it the tool returns an error explaining the opt-in.
Args:
path: a .SchDoc sheet or a .PrjPcb project (reviews all
its sheets).
Returns the review report {file, component_count, findings, summary, ...}: or {"error": ...} if disabled or unreadable.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses the OLE parser, missing fields/subset coverage, inability to compile netlist or run ERC, the risk of misreading, the disabled-by-default behavior, the exact env var (EDA_AGENT_HEADLESS_REVIEW=1), and the error return when disabled. This is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the critical fact (fallback, off by default) followed by limitations, alternatives, and enablement. It is long but every block earns its place given the tool's risk profile; only minor redundancy between the coverage-list and the Returns section keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still sketches the return shape ({file, component_count, findings, summary}) and the error case. Combined with the coverage limitations and enablement instructions, an agent has everything needed to call it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one required param, so the description must compensate; it does by explaining 'path' accepts a .SchDoc sheet or a .PrjPcb project (which reviews all its sheets). That adds real meaning beyond the bare 'string' schema type, though it does not cover path format/absolute-vs-relative nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line names a specific verb and resource ('Offline FALLBACK review of a .SchDoc/.PrjPcb') and immediately scopes it against the preferred path. It explicitly distinguishes itself from named siblings (design_lint_report, proj_run_erc, design_review_snapshot, audit_*), so an agent can pick it apart from alternatives without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when NOT to use it ('NOT the preferred way', prefer live-Altium tools whenever a session is available) and when to reach for it ('only when Altium genuinely can't be opened (a file on disk, a CI runner)'). It names the concrete alternatives and the enabling condition, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_review_planA
One-call offline pre-flight: bundle every plan-level analysis.
Runs, on the plan alone (no Altium), the checks and reports the agent would otherwise call one by one, so the planner can vet a design in a single step before emit:
stats: part counts by kind, IC / passive split, power & ground rails, average net degree, the widest signal net (a routing hotspot).erc: the ERC-lite report (floating nets, unconnected parts, missing decoupling, malformed values, matched-value mismatches);passedis False only on a hard error.circuits: the computed behaviour of each recognised block (divider ratios, filter cut-offs, crystal load).placement_constraints: the match / keepout groups that would be auto-derived forpcb_plan_placement(plan_json=...).net_classes: each net's class (power / ground / differential / clock / analog / ... / signal) grouped for PCB net-class setup.
Returns {"ok": True, "passed": <erc.passed>, ...sections...} or
{"ok": False, "errors"/"error": ...} on a schema problem.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load well: it discloses that it runs offline, enumerates the analyses performed, and explains that 'ok' is False on schema problems while 'passed' is False only on a hard ERC error. It does not explicitly say it is read-only or non-mutating, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the one-sentence purpose and then uses a clean bulleted breakdown of the bundled analyses. The length is justified by the tool's complexity and every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-analysis tool, the description covers behavior, bundled checks, and failure semantics well, and an output schema exists. The main gap is the lack of any explanation of the plan_json input, which leaves the sole parameter underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, plan_json, has 0% schema description coverage, and the description does not explain its accepted format or structure. It references plan_json indirectly in the placement section but adds no meaningful semantics about the input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'bundle every plan-level analysis' on the plan alone with no Altium. It also gives the purpose — vetting a design in one step before emit — which distinguishes it from review tools that need a live project or file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the tool as an offline pre-flight to use before emit and says it replaces calling checks one by one. It does not explicitly name alternatives or when-not conditions, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_review_snapshotA
Fetch a comprehensive design-review snapshot in ONE tool call.
THIS -- the compiled netlist + part data it returns -- is the
BASIS of a design review, not a render. Judge connectivity, part
values, ratings, and pin functions from these sections (and the
cited datasheets), never from sch_render_svg / pcb_render_svg
/ design_visual_review, which are geometry-only and exist for
when an image is genuinely needed (layout/placement). A picture
can show a wire that shares no net, or hide a net that is
electrically correct -- so the review reads the data here.
PREFER THIS over running 8-12 individual review queries. A normal review (components, nets, rules, diff, messages, stats, unrouted, BOM) is one round-trip instead of one LLM turn per section. That's the single biggest time cost on a full review.
CRITICAL, datasheet discipline (enforced via _review_guidance): Before drawing ANY conclusion about a component's pin function, voltage rating, or electrical spec, fetch the actual manufacturer datasheet and verify. The schematic symbol, footprint, and parameter fields are NOT ground truth - they are often wrong or outdated. Every proposed fix must cite the datasheet section or page you relied on.
The response's _unique_parts field is the checklist of
components whose datasheets you must have read before
reviewing. Do not skip this step.
CRITICAL, review-quality discipline (enforced via _review_guidance): A finding must ADD analysis the raw sections do not. Run ERC and DRC, but do NOT relay their raw output as findings - investigate each violation after the datasheet review, drop the false positives, and surface the real ones as specific, traced findings (a genuine ERC/DRC violation can be a top finding - never dropped). Do NOT emit "verify X" / "confirm X" as a finding - that hands the analysis back to the user. Every finding names the exact parts/pins/nets, is backed by a netlist fact or a cited datasheet, states a concrete consequence and fix, and is something you would raise in a real design review. The full rules are in _review_guidance["review_quality_rules"].
Args: sections: Which snapshot sections to include. Defaults to the standard review set (project_info, design_stats, components, nets, design_rules, unrouted, diff, messages, board_stats, fab_stats). Available extras: "bom", "drc", "erc", "unconnected_pins", "project_options". include_bom: Convenience - adds "bom" to sections if True (default). BOM is the best source of manufacturer part numbers for datasheet lookup. run_drc: If True, runs DRC (slow, 30-90 s) and includes results. Off by default - assume the user already ran it, or run it separately when asked. run_erc: If True, runs ERC and includes results. Off by default. force_recompile: SaveAll + invalidate SmartCompile cache + recompile before gathering any sections. Use this when the user has been editing schematics in the Altium UI and you need a guaranteed-fresh netlist. Costs one extra ~5-10 s compile up-front.
Returns: Dict with one key per requested section, plus: - _review_guidance: datasheet + review-quality rules Claude must follow when turning sections into findings - _unique_parts: list of {manufacturer, part_number, designators} to fetch datasheets for - _sections_failed: sections that errored (partial results are still usable)
| Name | Required | Description | Default |
|---|---|---|---|
| run_drc | No | ||
| run_erc | No | ||
| sections | No | ||
| include_bom | No | ||
| force_recompile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses time costs (DRC 30-90 s, extra compile 5-10 s), defaults (run_drc/run_erc off because the user likely already ran them), partial-failure behavior via _sections_failed, and the enforced review discipline. This is strong behavioral context for a mutation-adjacent, slow tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and usage are front-loaded, but the two long 'CRITICAL' discipline blocks are verbose and partly restate content the description says is in _review_guidance. They earn their place behaviorally, but the definition could be tightened without losing invocation-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex snapshot tool with an output schema, the definition covers selection, defaults, costs, failure modes, and review expectations. Nothing an agent needs to call it correctly or interpret partial results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for all five parameters: it explains the default section set and available extras for sections, the convenience behavior of include_bom, the cost/default of run_drc and run_erc, and when force_recompile is warranted. This adds meaningful semantics the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a comprehensive design-review snapshot') and explicitly contrasts it with render/visual siblings and with running many individual queries. An agent can immediately tell what this returns and why it exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('PREFER THIS over running 8-12 individual review queries') and when-not-to-use ('never from sch_render_svg / pcb_render_svg / design_visual_review, which are geometry-only'). It also names the conditions for the alternatives (image genuinely needed for layout/placement).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_session_logA
Append one event to a design-session journal.
event is one of: stage_enter (needs stage),
stage_result (stage + status = ok|blocked|failed),
plan_revision (revision), artifact (path, kind),
blocked (question), resolved (text = answer),
note (text). Returns the updated derived state.
data (a dict, or JSON text) goes with a stage_result or a
note. On a stage_result it is the evidence for the exit gate:
for placement, routing, pours_tuning and verification, pass the
pcb_layout_audit result (and the pcb_calc_length_match or
proj_run_erc reply under its own tool name) and the reply
carries gate, the verdict on those numbers. A stage logged ok
whose numbers fail its gate is sent back by
design_next_action. topic files a note under a section of
design_session_report: placement, stackup, critical_routes,
power, planes (fan-out and via-in-pad too), silkscreen,
verification, simulation, issue, or decision.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| kind | No | ||
| path | No | ||
| text | No | ||
| event | Yes | ||
| stage | No | ||
| topic | No | ||
| status | No | ||
| question | No | ||
| revision | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonable work: it discloses that this appends exactly one event, that it returns derived state, and — critically — that a stage_result marked ok with failing gate numbers will be rejected and sent back by design_next_action. That is a non-obvious behavioral consequence an agent could not infer from the schema. It omits error/failure modes and whether session_id is required vs implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in one sentence, then structured as event list, then data/gate semantics, then topic routing. Dense but every block earns its place. Slightly verbose in the gate paragraph, where the parenthetical about pcb_calc_length_match/proj_run_erc is hard to parse on first read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description correctly limits itself to 'returns the updated derived state'. For an 11-parameter, 0%-documented schema this is close to adequate, with the remaining gaps being session_id semantics and the absence of an allowed-value list for `stage` — the one input the agent must supply correctly on almost every call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for most of the 11 params: it maps stage, status (ok|blocked|failed), revision, path, kind, question, text, data (dict or JSON text), and topic (with an enumerated section list) to the events that require them. Missing meaning for session_id and no valid-value guidance for `stage` or `kind`, which leaves genuine guessing room.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Append one event to a design-session journal') and then enumerates the exact event vocabulary (stage_enter, stage_result, plan_revision, artifact, blocked, resolved, note), which distinguishes it from every sibling journaling/status tool. An agent can tell immediately what this writes and to what.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is conveyed indirectly through the event taxonomy: each event name carries its own trigger (use stage_result to log a gate outcome, blocked to raise a question, resolved to answer one). It also cross-references design_next_action and design_session_report, showing downstream consumers. It never explicitly states preconditions (e.g. that a session must be started) or contrasts against design_live_note, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_session_reportA
Write up a design run from its session journal, as markdown.
Assembled only from what the run recorded: the requirement, each
stage's outcome with the gate numbers logged for it, decisions,
audit results, simulations and open issues. The body sections come
in a fixed order: placement strategy, stack-up and impedance,
critical routes (lengths, skews, layer changes, return vias,
exceptions), power paths, planes and fan-out (where via-in-pad was
used and why), silkscreen policy, verification results, simulations,
open issues. A section nothing was logged for says so in one line.
Notes reach a section through their topic (see
design_session_log).
Args: session_id: the session to report; blank uses the most recently active one. output_path: also write the markdown to this file. Its folder must exist, and a path inside the installed eda_agent package is refused. Blank writes nothing.
Returns:
{"session_id", "markdown", "path"} (path is "" when
nothing was written), or {"error": ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that missing data yields a one-line 'nothing logged' statement, that session_id blank resolves to the most recently active session, that output_path's folder must exist, that paths inside the installed eda_agent package are refused, and that blank writes nothing. The return shape is also disclosed. It does not state whether an existing file is overwritten or whether the run is mutated, which keeps it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The what/scope leads, followed by contents, args, and returns, so it is well front-loaded. The enumerated list of body sections is long but functional, telling the agent exactly what the output contains; still, it is the one part that could be trimmed without losing call-critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter, no-annotation tool with an output schema, the description covers purpose, data provenance, section ordering, empty-section behavior, both parameters with edge cases, and the return/error shape. An agent has everything needed to invoke it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry everything, and it does: session_id is defined including its blank/default fallback to the most recently active session, and output_path is defined with side effects, the folder-existence requirement, the forbidden package path, and the blank no-write behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb phrase ('write up a design run from its session journal, as markdown') plus an explicit statement that the content is assembled only from what the run recorded. This clearly separates it from design_session_log (which records) and design_live_note / design_review_snapshot siblings without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the context (produce a report from an already-recorded session journal) and points to design_session_log for how notes get their topic, which helps the agent understand the data flow. However, it never explicitly says when to prefer this over design_live_note, design_review_snapshot, or app_get_report, nor does it state prerequisites such as needing a session to exist first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_session_resumeB
Resume a design run: state plus a plain-language next-action hint.
Surfaces any open blocking question first (answer it before proceeding), otherwise names the next pipeline stage to work on. Use this at the start of a fresh client session to pick up where the last one stopped.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the whole behavioral burden. It does disclose useful behavior: the blocking question is surfaced first and takes priority, otherwise the next pipeline stage is named. But it never says whether resuming is read-only or has side effects, nor what happens when session_id is omitted (it defaults to an empty string).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the returned value, then the priority rule, then the usage trigger. Roughly 50 words with no filler, though the parenthetical 'answer it before proceeding' could be folded more tightly into the priority sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, and the description's main job — explaining the resume semantics and priority ordering — is done. However, the missing session_id semantics and the unstated read/write character of the operation leave real gaps for a session-state tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions session_id at all. The one parameter has a default of empty string, and the description gives no clue whether that means 'resume the most recent session' or 'error out' — exactly the ambiguity the description should resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Resume a design run') plus an explicit statement of what comes back: state plus a plain-language next-action hint. It is clear what the tool does, but it never names the adjacent siblings (design_session_start, design_session_status, design_next_action) that an agent would have to weigh it against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger condition: 'Use this at the start of a fresh client session to pick up where the last one stopped,' and adds sequencing guidance ('answer it before proceeding'). It stops short of stating when NOT to use it, e.g. versus design_session_start for a brand-new run or design_session_status for mid-run polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_session_startA
Open a durable design-session journal for an autonomous run.
The journal is append-only state that survives context compaction,
client restarts, and model switches, so any later client can resume
the run from recorded fact instead of chat history. Call this once at
the start of a spec-to-board task, then log stage results as you go
and read design_session_resume to know what's next.
Args: requirement: the design requirement text this run implements. session_id: optional explicit id; defaults to a timestamp.
Returns:
{"session_id": ..., "state": {...}}.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| requirement | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden, and it does well: it discloses that the journal is append-only and survives context compaction, client restarts, and model switches, which is exactly the kind of non-obvious persistence semantics an agent needs. Gaps remain on side effects (does it write a file on disk, is it idempotent, does an existing id overwrite state) and on failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the durable-journal rationale, then lifecycle guidance, then Args/Returns. Slightly redundant: the Args and Returns blocks restate what the schema and the existing output schema already declare, but they are short enough to earn limited blame.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter session-initialization tool with no annotations, the description covers purpose, lifecycle placement, persistence guarantees, and follow-up siblings; an output schema exists so the return-shape note is a bonus rather than a need. The one thing an agent still cannot infer is behavior on session-id collision or reuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents both parameters: `requirement` as the design requirement text and `session_id` as an optional explicit id defaulting to a timestamp. That fully closes the coverage gap, though it adds no format or length constraints beyond what the type already implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Open a durable design-session journal for an autonomous run") plus a stated scope ("spec-to-board task"). It also implicitly distinguishes itself from its siblings design_session_log ("log stage results") and design_session_resume ("read ... to know what's next"), so an agent can tell it apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this once at the start of a spec-to-board task, then log stage results as you go and read `design_session_resume` to know what's next" gives clear when-to-use and routes to the right follow-up tools. What is missing is the negative case: what to do if a session already exists (resume instead of start?) or what happens if a duplicate session_id is supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_session_statusA
Read a design session's derived state (stage map, artifacts, ...).
With no session_id the most recently active session is used.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but 'Read' clearly implies a non-mutating operation. The description adds the useful default-session behavior, but it does not explicitly confirm read-only safety or describe any constraints beyond the default selection rule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted language. The core read behavior is front-loaded, followed immediately by the default-session rule that affects invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return-value details need not be in the description. Still, given the large family of session-related siblings, the description could better clarify what 'derived state' includes and when this differs from session report/log tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the single optional parameter, and it does: omitting session_id selects the most recently active session. It does not document the expected session_id format, but the behavioral meaning is otherwise clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb and resource: 'Read a design session's derived state,' with examples 'stage map, artifacts.' It is clearly a read-oriented status tool, though it does not explicitly distinguish itself from siblings like design_session_report or design_session_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the session_id default behavior, which implies its use for reading status without an explicit session reference. However, it does not state when to choose this tool over related session tools such as design_session_report, design_session_resume, or design_job_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_snapshot_inventoryA
Open a list of SchLib files and return what components live in them.
NDA scope: only pass paths to the user's own neutral standard libraries. Do NOT pass project-local library paths from another client engagement, design knowledge cannot cross NDA boundaries.
Large libraries (passives/connectors can hold hundreds of parts)
easily exceed the tool-output token budget, so the RETURNED set is
filtered and capped. The FULL inventory is always cached to
<workspace>/inventory.json for the dashboard regardless of
these limits.
Args:
library_paths: Absolute paths to .SchLib files to scan.
name_filter: Case-insensitive substring; keep only components
whose lib_ref or description contains it (e.g. "10k",
"NE555"). Empty = no filter.
limit_per_library: Cap components returned per library
(default 60; 0 = unlimited). Each library reports
total and returned so you know if it was capped.
include_descriptions: Drop the (often long) description
field from the returned rows to save tokens. Default True.
Returns:
Inventory dict: {"libraries": [{"path", "total", "returned", "components": [...]}]}. Each component carries
lib_ref, designator_prefix, pin_count, description (unless
suppressed), and footprint when available.
| Name | Required | Description | Default |
|---|---|---|---|
| name_filter | No | ||
| library_paths | Yes | ||
| limit_per_library | No | ||
| include_descriptions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that results are filtered and capped due to token budget, that the returned per-library total/returned reveals truncation, and that the full inventory is always written to <workspace>/inventory.json as a side effect. That side-effect disclosure is exactly the kind of context annotations would otherwise have to provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then the NDA constraint, then the truncation/caching behavior, then Args and Returns in a predictable docstring layout. Nothing is decorative; each block maps to something the agent needs before calling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter read tool with no annotations, the description covers purpose, scope restriction, truncation semantics, caching side effect, parameter meaning and return shape. An output schema exists so the Returns block is bonus rather than a gap-filler.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all four parameters with defaults, units and worked examples ("10k", "NE555"; 0 = unlimited). The one weak spot is include_descriptions, whose wording ('Drop the ... description field ... Default True') reads ambiguously against the parameter name, leaving a small chance of misinterpreting the boolean polarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource: open SchLib files and return the components inside them, which is clearly distinct from the active-library lib_* tools. It stops short of naming a sibling (e.g. lib_get_components) to distinguish which inventory path to take, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an explicit when-not constraint with a rationale: do not pass project-local library paths from another client engagement because design knowledge cannot cross NDA boundaries. However, no alternative tool is named for the active-library case (lib_get_components, lib_search), so the agent must infer the routing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_solve_netlist_fileA
Reconstruct a .SchDoc's netlist geometrically: OFF by default.
Offline FALLBACK, same opt-in as design_review_file. Parses the
file (no Altium, no license) and rebuilds the compiled netlist from
geometry (pins, wires, power ports, junctions, and by-name net
labels), then runs connectivity ERC (single_pin_net floating
pins, net_short rail shorts).
Prefer the live-Altium path (proj_get_nets / proj_run_erc)
whenever a session is available: Altium's own compiler is ground
truth. Use this only when Altium can't be opened.
Validated envelope: wire + power port + junction + net-label
connectivity (live Altium 24/24; pipeline buck 7/7). It faithfully
reports a net the schematic left floating; cross-sheet connectors are
out of scope. A single sheet only (a .SchDoc), not a project.
Enable with EDA_AGENT_HEADLESS_REVIEW=1.
Returns {file, net_count, nets, pin_count, findings}: or
{"error": ...} if disabled or unreadable.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well: it discloses that the tool is OFF by default, requires EDA_AGENT_HEADLESS_REVIEW=1, parses without Altium or a license, rebuilds connectivity from geometry, and runs specific ERC checks. It also documents limitations such as single-sheet .SchDoc scope and cross-sheet connectors being out of scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and mostly waste-free, with the core purpose and default-off status stated immediately. Some details, such as validation hit rates, are useful for trust but slightly ancillary for invocation, and the dense line breaks make it less clean than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an offline geometric netlist reconstruction and the absence of annotations, the description is complete: it covers gating, parsing behavior, scope, limitations, preferred alternatives, and error behavior. The output schema exists, so the included return-shape note is a bonus rather than a necessity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the lone path parameter. It adds meaningful constraints by specifying a single .SchDoc sheet rather than a project, which is valuable beyond the bare string schema, though it does not clarify path format or resolution rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: reconstruct a .SchDoc netlist geometrically. It clearly frames the tool as an offline fallback and distinguishes it from live-Altium alternatives, so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to prefer live-Altium tools such as proj_get_nets and proj_run_erc whenever a session is available, and to use this only when Altium cannot be opened. It also names the enabling environment variable and opt-in condition, leaving little ambiguity about when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_suggest_diff_pair_tracesA
Recommend a controlled-impedance trace width for every differential pair in a plan.
Detects the differential pairs (nets with role differential) and
sizes each to target_ohms (90 USB / 100 HDMI/LVDS) for the supplied
stackup and edge-to-edge spacing_mils via the IPC-2141 impedance
inverse -- the trace geometry for every pair in one call instead of
identifying pairs and running pcb_calc_trace_width_for_impedance by
hand. The stackup and target are board-level decisions you supply; pure
Python, no Altium.
Returns {"ok": True, "pairs": [{nets, endpoints, width_mils, spacing_mils, target_ohms, feasible}]} or {"ok": False, ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| geometry | No | microstrip_diff | |
| copper_oz | No | ||
| plan_json | Yes | ||
| target_ohms | No | ||
| spacing_mils | No | ||
| dielectric_constant | No | ||
| dielectric_height_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses key traits: pure Python, no Altium dependency, IPC-2141 inverse calculation, and a return structure including ok/feasible flags. It implies a read-only recommendation but does not explicitly state that it does not modify the design, leaving a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with its main purpose and remains reasonably efficient. The two-paragraph structure separates behavior/return from the core recommendation. It could be tightened slightly but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no schema descriptions, no annotations, output schema present), the description covers the high-level behavior well. However, it does not fully compensate for the missing parameter documentation, particularly plan_json structure and geometry options, leaving an agent to guess on non-default calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains target_ohms with practical examples and mentions spacing_mils as edge-to-edge, and refers generically to 'supplied stackup'. However, it leaves plan_json format, geometry options, copper_oz, dielectric_constant, and dielectric_height_mils largely undocumented, so several parameters remain opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Recommend a controlled-impedance trace width for every differential pair in a plan.' It clearly distinguishes itself from sibling pcb_calc_trace_width_for_impedance by noting it handles all pairs in one call instead of by hand. The core function is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames usage: use this tool when you need widths for all differential pairs in a plan, and names the alternative (running pcb_calc_trace_width_for_impedance manually). It also notes that stackup and target are board-level inputs you supply. No explicit when-not conditions are given, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_suggest_partitionA
Suggest how to split a design into balanced functional groups.
Computes a min-cut partition (Kernighan-Lin style) of the plan's
components into n_groups balanced groups that MINIMISE the number
of nets crossing between groups -- so each group is internally
well-connected and few signals span the boundary. Use it to group a
PCB into functional ROOMS, or to decide how to break a design with
SEPARABLE blocks across schematic sheets.
Note: a HUB-centric design (one IC fanning out to many peripherals)
does not separate cleanly -- the hub is connected to everything, so
the cut stays high and per-sheet density barely drops. Partitioning
helps when the netlist has genuinely distinct functional blocks; read
cut_nets (low = clean) and group_sizes to judge before acting.
Power/ground rails (nets touching more than max_fanout parts) are
excluded from the connectivity graph -- they route as planes and
connect nearly everything, so the split follows the SIGNAL structure.
Pure data; touches nothing. Assign the returned groups to part
sheet (or zone) fields yourself if you act on the suggestion.
Args: plan_json: A DesignPlan (dict or JSON string). n_groups: Number of groups to split into (default 2). max_fanout: Nets above this pin count are treated as rails and ignored for partitioning (default 8).
Returns:
{ok, n_groups, groups: {idx: [refdes...]}, cut_nets, boundary_nets: [names...], group_sizes, summary}. cut_nets
is how many nets cross the boundary (lower is cleaner);
boundary_nets names them -- those become cross-sheet labels or
off-sheet connectors if you split there.
| Name | Required | Description | Default |
|---|---|---|---|
| n_groups | No | ||
| plan_json | Yes | ||
| max_fanout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it declares the tool is pure data and touches nothing, explains the min-cut algorithm, discloses that power/ground rails above max_fanout are excluded, and warns about poor separation in hub-centric designs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured and front-loaded: purpose first, then caveats, then Args and Returns. Most sentences add value, though the prose is more expansive than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists, the description adds useful interpretation of the result fields: cut_nets as a cleanliness metric, boundary_nets as cross-sheet/off-sheet candidates, and group_sizes for judging splits. The combination of purpose, caveats, parameters, and return guidance is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully by explaining plan_json as a DesignPlan dict or JSON string, n_groups as the number of balanced groups (default 2), and max_fanout as the rail-exclusion threshold (default 8).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: it suggests how to split a design into balanced functional groups using a min-cut partition. It also explains the algorithm and intended outcomes (rooms/schematic sheets), making the tool's niche clear even without naming siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance (grouping a PCB into rooms, splitting separable blocks across sheets) and an explicit when-not caveat about hub-centric designs. It does not name alternative sibling tools such as hierarchy-planning tools, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_synthesize_rulesA
Synthesize PCB design rules + stackup ops from a fab profile.
Stage 8 of the autonomous flow (rules & stackup,
reference/autonomy-roadmap.md): turn the validated fab profile, the
plan's net classes, and a few board-level targets into the concrete
pcb_create_design_rule and pcb_modify_layer parameter dicts,
dispatched verbatim after pcb_create_net_class creates classes
named after the synthesized groups. Every number traces to a
profile field or a verified calculator (IPC-2221 width inverse,
IPC-2141 impedance inverse); a rule whose inputs are missing is
skipped with a note, never guessed. Pure Python, no Altium.
Args:
profile: FabProfile as a dict (see design_load_fab_profile).
plan_json: Optional DesignPlan (JSON string or dict). When given
and net_class_map is not, net classes are derived from
the plan (flags + net roles, naming-agnostic).
net_class_map: Optional explicit {net_name: class} map;
takes precedence over plan_json derivation.
options: Optional synthesis targets: stackup (name, default
first), class_current_a ({class: amps} -> per-class
width rules), delta_t_c, track_margin, layer,
copper_oz, geometry, diff_pair_target_ohms
(required for differential rules),
diff_pair_spacing_mils.
Returns:
{"ok": True, "rules": [...], "stackup_ops": [...], "notes": [...], "stackup": name|None, "net_classes": {...}}
-- rule values are INTEGER MILS -- or
{"ok": False, "reason": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| options | No | ||
| profile | Yes | ||
| plan_json | No | ||
| net_class_map | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that it is 'Pure Python, no Altium' (no live-app side effects), that rules with missing inputs are 'skipped with a note, never guessed,' and that output values are INTEGER MILS. It doesn't state idempotency or repeat-call behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, followed by flow context, args, and returns in a scannable structure. The Returns block restates what the existing output schema already covers, which is some redundancy, and the roadmap reference is decorative padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param tool with untyped nested objects and an output schema, the description supplies the missing parameter semantics, the upstream dependency (fab profile from design_load_fab_profile), and failure shape ({ok: false, reason}). What the FabProfile must contain is deferred to the sibling tool, which is reasonable but leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and every parameter is opaque (nested objects with additionalProperties), yet the Args block defines all four, including the precedence rule between plan_json and net_class_map and the accepted sub-keys of `options` (stackup, class_current_a, delta_t_c, diff_pair_target_ohms as required for differential rules). This adds substantial meaning the schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+input: 'Synthesize PCB design rules + stackup ops from a fab profile.' It also names the concrete outputs it produces (pcb_create_design_rule and pcb_modify_layer parameter dicts), which cleanly distinguishes it from those sibling tools that actually apply rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Places the tool explicitly in a workflow ('Stage 8 of the autonomous flow'), states dispatch ordering ('dispatched verbatim after pcb_create_net_class creates classes'), and gives precedence between plan_json and net_class_map. It stops short of explicitly naming when NOT to use it versus calling pcb_create_design_rule directly, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_validateA
ERC + connectivity sanity report on the focused project.
Runs run_erc, project.get_messages, and get_unconnected_pins, then bundles the output into a structured ValidationReport that the planner can read and respond to. Schematic-only in this slice, PCB validation is a separate later slice.
Args: project_path: Optional absolute path to a .PrjPcb. If omitted, uses the focused project.
Returns:
ValidationReport dict: {passed, project_path, errors, warnings, notes} where each error/warning is an Issue with
{category, severity, text, refdes, pin, net, sheet}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the composite execution (three underlying operations), the structured ValidationReport shape, and the schematic-only limitation. It does not state whether running ERC has side effects such as forcing a recompile or how expensive the call is, which is the main remaining behavioral unknown for a tool that shells out to three operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then composition, scope caveat, and Args/Returns sections. The Returns block restates a ValidationReport shape that an output schema already defines, so it is slightly redundant, but the description remains tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional parameter with an output schema present, the description covers what an agent needs: what is run, what is returned conceptually, and the schematic-only scope. Only the side-effect/cost profile of invoking the underlying checks is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does fully: project_path is documented as an optional absolute path to a .PrjPcb with explicit fallback behavior ('if omitted, uses the focused project'). Format and default semantics are covered beyond the bare string type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('ERC + connectivity sanity report') and clarifies it is an aggregation of run_erc, proj_get_messages, and get_unconnected_pins into one ValidationReport, which separates it from calling those siblings individually. It also scopes itself to schematic-only work. It does not, however, differentiate itself from other high-level review siblings such as design_audit_schematic, design_lint_report, or review_design.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Schematic-only in this slice, PCB validation is a separate later slice' gives a clear when-not boundary, and the framing that the planner reads the report implies a planning/review workflow. But it never says when to prefer this over run_erc, proj_get_erc_violations, or the audit/review siblings, leaving the selection decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_validate_planA
Validate a candidate DesignPlan JSON against the schema + cross-check.
Run this before design_execute_plan to catch schema problems
and cross-references that the executor will reject. Cheap; no
Altium round-trip.
Args: plan_json: Either a JSON string of the DesignPlan, or the DesignPlan as a JSON object/dict. The MCP framework auto-deserializes JSON-object literals to dicts before the tool sees them, so both shapes are accepted.
Returns:
{"ok": True, "summary": "..."} on success, or
{"ok": False, "errors": [...]} listing the specific
problems. The planner can read these and revise.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and mostly meets it: 'cheap; no Altium round-trip' signals no side effects and no external mutation, and the exact response envelope for both success and failure is given. What is missing is an explicit statement that the call is non-mutating/read-only in all cases and whether it logs or caches anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the sequencing instruction, then a compact Args/Returns block. Every sentence adds information; the auto-deserialization note is short and prevents a real input-shape mistake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, prerequisite ordering, accepted input shapes, success/failure return shapes, and cost characteristics. Although an output schema exists, the description's short return summary is complementary rather than redundant, and nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only offers an anyOf of string/object, so the description does real work: it explains that both a JSON string and an already-deserialized dict are accepted and why. It does not describe what a well-formed DesignPlan must contain, which the agent must learn elsewhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+object: validate a candidate DesignPlan JSON against the schema plus cross-references. It is clearly distinct from design_execute_plan (which it precedes) and from design_validate, since the object is a plan document rather than a live design.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to run it before design_execute_plan and why (to catch problems the executor will reject). That routes the agent correctly against the main alternative, but there is no stated when-not-to-use or cost-free alternative for a quick field-only check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_validate_requirementA
Validate a structured DesignRequirement before planning starts.
Stage 1 of the autonomous flow (requirement capture & architecture,
reference/autonomy-roadmap.md): capture what the board must do as a
DesignRequirement dict, run this gate, and only move on to part
selection / DesignPlan construction when it returns ok. Every fact
the requirement does NOT state goes into open_questions as a
question for the user -- it is never guessed -- and validation fails
while any question remains unresolved.
Checks beyond the schema: unresolved open questions, no outputs, no power source, inverted temperature / IO-voltage ranges, comms IO without a protocol, and supply rails or power outputs whose magnitude exceeds every stated power input (a boost / inverting stage the user must confirm). Pure Python, no Altium.
board_intent (stackup, impedance targets, peak currents,
fastest edge, enclosure, assembly, finish, test strategy) is all
optional and never fails validation. Where the rest of the
requirement makes one of them matter and it is missing, notes
carries a suggested question to ask the user.
Args:
requirement: DesignRequirement as a JSON object/dict. Units are
SI with the unit in the field name (voltage_v,
current_a, temp_min_c); mechanical dimensions are
MILLIMETRES (board_size_mm, height_max_mm).
Returns:
{"ok": True, "issues": [], "notes": [...], "summary": "..."}
when the requirement is planning-ready (summary is the
labelled-line block to embed in DesignPlan.summary), or
{"ok": False, "issues": [...]} / {"ok": False, "errors": [...]} (schema problems) listing what to resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| requirement | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it lists the concrete validation checks, states that board_intent is optional and never fails validation, explains that notes suggest user questions, and clarifies that the tool is pure Python with no Altium interaction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is long but well structured and front-loaded: purpose, stage context, validation rules, optional fields, args, and returns are clearly separated. Every section adds information an agent needs for this complex gate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex validation behavior, minimal input schema, and output schema, the description provides enough detail to call the tool and interpret ok/failure responses. It covers validation checks, optional vs failing fields, unit conventions, and return shapes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it defines the requirement as a DesignRequirement JSON object, explains SI unit conventions with field-name suffixes, specifies millimetres for mechanical dimensions, and gives example field names such as voltage_v and board_size_mm.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: validate a structured DesignRequirement before planning starts. It also positions the tool as Stage 1 of the autonomous flow, distinguishing it from downstream planning or part-selection steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: run this gate before part selection / DesignPlan construction, and proceed only when it returns ok. It also states that unresolved open_questions block validation, which tells the agent exactly what must be resolved first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_visual_reviewA
Render the active design and return it as a viewable image plus a critique rubric -- the first step of a visual self-check loop.
SCOPE: layout and placement ONLY -- schematic readability /
spread / flow, PCB part placement, silkscreen, spacing, overlaps.
This is NOT a connectivity or part-correctness review. Do NOT use
it to decide what connects to what, whether a value/rating is
right, or whether a pin is wired -- those come from the netlist +
part data (design_review_snapshot, proj_get_nets,
proj_get_connectivity_many, proj_get_erc_violations), never
from the image. The rubric below is deliberately about geometry;
treat every electrical question as out of scope here.
Renderers are exports; this turns them into feedback. It draws
the active SchDoc or PcbDoc, rasterizes it to PNG (headless Edge)
so you can actually look at it with the Read tool, and returns a
document-specific rubric (what to look for) and
loop_protocol (render -> look -> critique -> cross-check ->
fix -> re-render). Each rubric item names the existing audit
tool(s) that measure it exactly, so vision finds candidates and
the audits confirm and locate them.
Use it as a loop: call this, Read the returned png_path,
critique against rubric, run the named audits for anything
suspicious, fix with the normal tools (for PCB placement,
pcb_plan_placement), then call this again to confirm. A couple
of iterations is usually enough.
Args:
target: "auto" (detect the active document), "schematic",
or "pcb".
output_path: Where to write the SVG (.png sits beside it).
Defaults to the transient <workspace>/renders/ dir; the
scratch .raster.svg used for the screenshot is deleted
automatically (kept out of your folder).
rasterize: Also produce a PNG so the image is directly
viewable (default True). If no browser is found the SVG is
still returned with a rasterize_note.
width: Raster width in pixels (height follows the aspect).
margin_mils: Override the render margin.
layers: PCB only -- restrict to these layer names.
Returns:
Dict with ok, target, doc, svg_path,
png_path (None if rasterization was skipped/failed),
counts, bbox, rubric, loop_protocol,
next_step.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| layers | No | ||
| target | No | auto | |
| rasterize | No | ||
| margin_mils | No | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so well: it discloses that rasterization uses headless Edge, that the scratch .raster.svg is auto-deleted, that the SVG is still returned with a rasterize_note if no browser is found, and that defaults write to a transient <workspace>/renders/ dir. This is exactly the behavioral context an agent needs for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and scope, then a loop protocol, then Args and Returns in clean sections. It is longer than strictly necessary -- the multi-clause SCOPE and rubric-preamble sentences could be trimmed -- but almost every line adds callable guidance, so waste is low given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no annotations and 0% schema coverage, the description covers the full picture: what is rendered, how it rasterizes, what the rubric and loop_protocol contain, what fixes to use (pcb_plan_placement), and expected iteration count. An output schema exists, yet the Returns summary adds useful orientation without redundant field-by-field detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 params, so the description must compensate, and it documents every one: target's three accepted values (auto/schematic/pcb), output_path semantics (.png beside SVG, transient default), rasterize default and fallback, width in pixels, margin_mils override, and layers (PCB only). No parameter is left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Renders the active design... returns it as a viewable image plus a critique rubric') and then tightly bounds the purpose with a SCOPE paragraph. It clearly distinguishes itself from siblings like design_review_snapshot, sch_render_svg, and pcb_render_svg by framing itself as the vision-feedback step, not a connectivity review.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (visual self-check loop), when-NOT-to-use ('NOT a connectivity or part-correctness review... Do NOT use it to decide what connects to what'), and names the correct alternatives (design_review_snapshot, proj_get_nets, proj_get_connectivity_many, proj_get_erc_violations). The loop protocol (render -> look -> critique -> cross-check -> fix -> re-render) removes all ambiguity about sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footprint_check_packageA
Check a package description for numbers that cannot be right.
Run this on every package transcribed from a datasheet, before drawing a footprint from it. Offline.
Sanity checks (each finding names the dimensions, their values and
citations, and why the combination is impossible or unusual):
limits in order; lead width below the pitch; each row of pins fits
the body it comes out of; lead span larger than the body for
leaded parts; the foot shorter than the lead's reach and two
terminals fitting the span; the exposed pad inside the body and
clear of the terminals; ball diameter below the pitch; values 25.4
times off their neighbours (mils typed as mm); pin counts the
family can have; the vendor land pattern consistent with itself.
error is impossible, warning unusual.
Cross-check, when the package carries the datasheet's recommended
land pattern as vendor: the IPC pattern computed from the
package against it, per quantity (pitch, span, land length and
width, tab, exposed pad, grid land), with both numbers, both
citations and the difference. Beyond the tolerance measured
between real vendor patterns and IPC, or a factor of two apart,
the pair is reported as a likely transcription error in one of the
two sources.
Args: package: the PackageSpec as an object or JSON text, the same schema lib_create_footprint_from_package takes.
Returns:
{ok, errors, warnings, findings, cross_check, examined, notes}. ok is true when no sanity finding is an error and
the cross-check (if it ran) agreed.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it declares the tool is offline, enumerates the sanity checks performed, explains error versus warning severity, defines the cross-check tolerance logic, and specifies the `ok` result semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, then organized into sanity checks, cross-check behavior, Args, and Returns. It is somewhat long and dense, but the length is largely justified by the complexity of the checks and output semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, no annotations, and an output schema, the description is complete enough for correct invocation. It explains the input format, the checks performed, cross-check behavior, and the returned fields including `ok`, `errors`, `warnings`, `findings`, and `cross_check`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides no description for the single `package` parameter, so the description must compensate. It does by stating that the parameter accepts a PackageSpec as an object or JSON text and by referencing the same schema used by `lib_create_footprint_from_package`, though it does not enumerate the PackageSpec fields directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: check a package description for impossible numbers. It clearly scopes the tool as an offline sanity checker to run before drawing a footprint, which distinguishes it from sibling footprint creation and rendering tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage timing: run on every package transcribed from a datasheet, before drawing a footprint. It does not explicitly name when not to use it or point to alternatives such as lib_audit_footprint_vs_package, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footprint_render_packageA
Draw the land pattern a package gives, to compare with its datasheet.
Offline. Renders the footprint the engine would build (lands with their numbers, paste windows, silkscreen with the pin 1 dot, assembly outline, courtyard, origin and a 1 mm scale bar) and draws the package's terminals over the lands as dashed green outlines, so a land that misses its terminal shows. A caption gives the pattern's pitch, span and land sizes. Read the returned image next to the datasheet's package drawing and recommended land pattern.
Args:
package: the PackageSpec as an object or JSON text.
density: L, N or M (least, nominal, most).
path: where to write the SVG; default
<workspace>/renders/<name>_<density>.svg.
png: also write a PNG beside it through the headless browser
the board renders use, when one is installed.
Returns:
{ok, svg_path, png_path, name, density, metrics, warnings},
with rasterize_note when no PNG could be made.
| Name | Required | Description | Default |
|---|---|---|---|
| png | No | ||
| path | No | ||
| density | No | N | |
| package | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the load and does well: it discloses that it is offline and non-invasive ("the footprint the engine would build"), that it writes an SVG to a default path unless overridden, and that PNG output depends on an installed headless browser with a rasterize_note fallback plus warnings. It does not explicitly state that nothing in the library or project is mutated, leaving the side-effect profile slightly implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose comes first in a single punchy sentence, then the rendered contents, then Args/Returns blocks that are each one or two lines. Nearly every clause carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, what the image shows, the validation workflow, all four parameters and the failure mode for PNG. The Returns block partially duplicates an existing output schema, and the undocumented shape of PackageSpec is the one substantive completeness gap for a tool whose required argument is that opaque object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and mostly does: it defines density's L/N/M as least/nominal/most, explains the path default template, and documents png's conditional browser dependency. The biggest remaining gap is package, whose accepted form (object or JSON text) is stated but whose PackageSpec fields are never described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it draws the land pattern the engine would build for a PackageSpec, including lands, paste windows, silkscreen, courtyard, origin and scale bar. That is far more specific than a name restatement, but among siblings like footprint_check_package and lib_audit_footprint_vs_package it never explicitly says how it differs from those audit tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: render, then read the image next to the datasheet's package drawing and recommended land pattern, with dashed green terminal outlines exposing lands that miss their terminal. It stops short of naming an alternative tool or stating when-not to use it, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_board_infoB
Object counts and net-class summary for the open board, from the
active backend (or the one named by backend).
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose one genuinely useful behavioral trait: the data comes from the active backend unless one is named, which tells the agent the result is context-dependent. It says nothing about whether the call is read-only, whether it is cheap or expensive, or what happens if the board is closed or no backend is available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the payload is stated before the backend caveat. The RST-style double-backtick markup around backend is an artifact that slightly hurts readability but costs no length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter) and an output schema exists, so return values need not be explained. However, with zero annotations and a crowded field of near-duplicate board-info siblings, the description should at minimum clarify read-only status and how it differs from proj_get_board_info and pcb_get_board_statistics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single backend parameter has no description in the schema. The prose compensates partially by implying that omitting backend means the active backend is used, but it gives no hint about valid values, accepted naming, or failure modes for an unknown backend name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource and payload: object counts plus a net-class summary for the open board. That is specific enough for an agent to know what comes back, but it draws no boundary against close siblings such as proj_get_board_info, pcb_get_board_statistics, or pcb_get_fab_stats, all of which plausibly return similar data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus the many board-statistics siblings, no prerequisites, and no exclusions. The only usage-adjacent content is the parenthetical about the backend parameter, which is about invocation, not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_footprint_arcA
Add an arc to the current footprint.
Args: x_center: Center X in mils y_center: Center Y in mils radius: Arc radius in mils start_angle: Start angle in degrees end_angle: End angle in degrees width: Line width in mils layer: Layer name. Default "TopOverlay" (silkscreen). Any Altium layer accepted, e.g. "Mechanical1".."Mechanical16" for pin-1 / assembly markers. footprint_name: footprint to write into. Empty uses the editor's current footprint; a name makes that footprint current first and refuses if it cannot. units: "mil" (default) or "mm", for every length and coordinate here, kept exact rather than rounded to whole mils.
Returns: Dictionary confirming arc addition
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | TopOverlay | |
| units | No | mil | |
| width | No | ||
| radius | Yes | ||
| x_center | Yes | ||
| y_center | Yes | ||
| end_angle | No | ||
| start_angle | No | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose useful behavior: layer defaults and accepted values, footprint_name targeting behavior including refusal on failure, and exact unit handling. However, it does not state whether the change is saved immediately, what permissions or document state are required, or what happens on partial failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then structured as a compact argument list. Every sentence serves to explain a parameter or behavior, with no redundant prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers all parameters and key behavioral quirks despite no annotations and no schema descriptions, and the output schema already documents the return shape. The main remaining gap is arc orientation/direction semantics for start and end angles, plus persistence or save-state expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates by documenting every one of the nine parameters with units, defaults, and practical meaning. It adds particularly useful detail for layer, footprint_name, and units that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: adding an arc to the current footprint. It clearly distinguishes footprint arcs from symbol arcs via the resource name, but it does not explicitly contrast itself with siblings such as lib_add_symbol_arc or pcb_place_arc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any stated preconditions for adding an arc. The footprint_name behavior is described, but that is parameter semantics rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_footprint_padA
Add a pad to a footprint: the named one, or the current one.
Args:
designator: Pad designator (e.g., "1", "2")
x: X coordinate in mils
y: Y coordinate in mils
x_size: Pad X size (default 60 mil)
y_size: Pad Y size (default 60 mil)
hole_size: Drill hole size (0 for SMD). A drilled pad
is forced through-hole (MultiLayer); a hole-less pad is
SMD on layer.
shape: Pad shape -- "round", "rectangular", "octagonal", or
"roundrect" (rounded-rectangle, the modern IPC SMD
default). An oval/obround is "round" with x_size != y_size.
layer: Layer for an SMD pad ("TopLayer"/"BottomLayer"); ignored
for through-hole pads (always MultiLayer).
rotation: Pad rotation in degrees
corner_radius: Corner radius percentage for shape="roundrect"
(Altium stores RR radius as a %; 25 is typical).
footprint_name: footprint to write into. Empty uses the
editor's current footprint; a name makes that footprint
current first and refuses if it cannot, since otherwise
the primitives land in whichever footprint another call
left current.
units: "mil" (default) or "mm", for every length and
coordinate here. Millimetres are kept exact: 1.625 mm
used to arrive as 64 mil and read back as 1.6256 mm.
Returns: Dictionary confirming pad addition
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| layer | No | TopLayer | |
| shape | No | rectangular | |
| units | No | mil | |
| x_size | No | ||
| y_size | No | ||
| rotation | No | ||
| hole_size | No | ||
| designator | Yes | ||
| corner_radius | No | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it discloses that a drilled pad is forced through-hole/MultiLayer, that layer is ignored for through-hole, that a missing footprint_name silently depends on ambient editor state (and the tool refuses rather than misfiling), and that mm values are preserved exactly. Minor gaps: no mention of what happens on duplicate designators or failure modes beyond the footprint case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a scannable Args list with the most consequential semantics attached to each parameter. Slight bloat in asides ('used to arrive as 64 mil and read back as 1.6256 mm') that explain history rather than behavior, costing a bit of density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutating primitive tool with no annotations, the description is nearly complete, and an output schema exists so return values needn't be described. What is missing is small but real: error conditions (duplicate designator, invalid shape string, out-of-range rotation) and any ordering/idempotency notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: all 12 parameters get meaning, including defaults (60 mil size, layer TopLayer, corner_radius 25), enum-like values for shape, the roundrect radius being a percentage, the oval-is-round-with-unequal-sizes trick, and units applying to every length. This adds substantially more than the schema's bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Add a pad to a footprint', and immediately qualifies the target ('the named one, or the current one'). This is a concrete primitive-creation operation distinguishable from siblings like lib_add_footprint_pads (batch), lib_set_pad_properties, and lib_add_footprint_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context, notably the footprint_name semantics: empty means the editor's current footprint, a name makes that footprint current first and refuses if it cannot. That is real guidance about preconditions. It stops short of explicitly contrasting with the sibling batch tool lib_add_footprint_pads or stating when to create a footprint first (lib_create_footprint).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_footprint_padsA
Add MANY pads to the current footprint in ONE call.
PREFER THIS over looping lib_add_footprint_pad. A 64-pad QFP
built one pad at a time is 64 LLM turns and 64
PreProcess/PostProcess+save cycles; with this tool it's one turn,
one PreProcess/PostProcess, one save. Pad coords are NOT snapped
to a grid (footprints use fine pitches like 50 mils / 0.5 mm).
Args: pads: List of pad dicts, each with: - designator (str, required) -- e.g. "1", "2", "A1" - x, y (int, mils), pad centre - x_size, y_size (int, mils, default 60) - hole_size (int, mils, default 0 = SMD) - shape (str, default "rectangular"), one of round / rectangular / octagonal / roundrect (modern IPC rounded-rectangle SMD). Oval = round with x_size!=y_size. - corner_radius (int %, default 25) for shape="roundrect" - rotation (float deg, default 0) - layer (str, default "TopLayer"). Only used for SMD pads (hole_size=0); a drilled pad is forced through-hole (MultiLayer). Use "BottomLayer" for bottom-side SMD. Optional, written only when given: - hole_length (slot length, above hole_size: a slotted hole hole_size wide, along the pad's X before rotation) - plated (false: a non-plated hole) - paste_expansion, mask_expansion (a manual expansion that overrides the design rule; minus the larger pad side closes the paste opening) The reply counts them (slots, unplated, expansions) and any write this Altium build refused (property_failures).
Example, a 4-pad 0402 + corner pad in one call: lib_add_footprint_pads(pads=[ {"designator": "1", "x": -25, "y": 0, "x_size": 30, "y_size": 40}, {"designator": "2", "x": 25, "y": 0, "x_size": 30, "y_size": 40}, ])
footprint_name picks the footprint to write into. Empty uses
the editor's current footprint; a name makes that footprint
current first and refuses if it cannot, since otherwise the
primitives land in whichever footprint another call left current.
units is "mil" (default) or "mm" for every pad in the call:
one land pattern, one unit, so half a footprint cannot be drawn
in the wrong one. Millimetres are kept exact.
Returns: Dict with added, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| pads | Yes | ||
| units | No | mil | |
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load well: it discloses that coordinates are NOT grid-snapped, that drilled pads are forced to MultiLayer regardless of the layer key, that unit selection applies to the whole call so a pattern can't be half-mm, and that refused writes surface as `property_failures`. It does not state what happens to pre-existing pads with the same designator (overwrite vs duplicate) or any permission constraints, which is the remaining gap for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the actionable directive and the why, then the parameter reference — a sensible order for a tool of this complexity. It is long, and the example is mildly inconsistent (advertised as "a 4-pad 0402 + corner pad in one call" but shows only two pads), which costs a point without undermining usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-param mutation tool with 0% schema coverage, the description supplies everything the agent needs: full nested pad-key reference, unit scoping, footprint targeting rules, and failure reporting. Return semantics are covered by the existing output schema, so the brief 'Returns:' line is the right amount.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (pads is an untyped array of open objects), so the description must supply everything — and it does, enumerating every pad key with type, unit, default, and non-obvious semantics (hole_size=0 means SMD, oval = round with x_size!=y_size, corner_radius is percent, hole_length runs along X before rotation, negative paste_expansion closes the opening). It also documents the two top-level params' scoping behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+cardinality ("Add MANY pads to the current footprint in ONE call") and explicitly contrasts with the sibling `lib_add_footprint_pad`, so an agent can route without opening either schema. The batched nature and the target (footprint pads) are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit directive ("PREFER THIS over looping lib_add_footprint_pad") backed by a concrete cost rationale (64 turns vs one turn, one PreProcess/PostProcess and save). It also states the selection rule between the two `footprint_name` modes, including that a named footprint 'refuses if it cannot' become current rather than writing to the wrong one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_footprint_regionsA
Add solid polygon regions to a PcbLib footprint in ONE call.
What a footprint needs beyond pads and lines: paste windows over an exposed pad (on TopPaste, with the pad's own paste closed by a negative paste_expansion in lib_add_footprint_pads), or any filled shape on a mechanical or overlay layer.
Args:
regions: list of {"layer": ..., "points": [[x, y], ...]},
three or more points each, relative to the footprint
origin. The layer is REQUIRED: there is no default,
because a solid shape defaulted onto copper is a short.
footprint_name: footprint to write into. Empty uses the
editor's current footprint; a name makes that footprint
current first and refuses if it cannot.
units: "mil" (default) or "mm", for every point, kept exact.
Returns:
Dict with added, failed, bad_points, unknown_layers, total. A
region refused here before sending is listed in
refused with the reason.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | mil | |
| regions | Yes | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden and largely meets it: it discloses the side effect that a named footprint is made current first and the call refuses if that fails, that regions are validated locally and refused with a reason before sending, and that units are kept exact. It does not say whether repeated calls duplicate regions or how existing regions relate to new ones, leaving a minor gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The batch capability and the core use case are front-loaded in the first two sentences, and the Args/Returns block is scannable. Slightly verbose in the docstring-style listing, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still adds the refusal semantics ('refused' with the reason) that matter for error handling. For a three-parameter batch-add tool with a validation step, everything an agent needs to call it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: it specifies the regions dict shape ({layer, points}), the minimum of three points, coordinates relative to the footprint origin, and why layer has no default (a solid shape defaulted onto copper is a short). It also defines footprint_name's empty-string behavior and the mil/mm unit options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add solid polygon regions to a PcbLib footprint') plus the batch scope ('in ONE call'). The second paragraph distinguishes it from sibling primitives (lib_add_footprint_pads, lib_add_footprint_track/tracks) by naming the shapes and layers it covers that those do not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios: paste windows over an exposed pad, or filled shapes on mechanical/overlay layers, and cross-references lib_add_footprint_pads for the complementary negative paste_expansion step. It stops short of explicit exclusions (e.g. 'do not use for copper pours / use pcb_place_polygon_rect on a board'), so the alternative-selection guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_footprint_textA
Add a text primitive to a PcbLib footprint.
Trap baked into this handler: in a PcbLib, adding a primitive
only to the footprint does NOT register it with the placement
editor -- the text shows up only after a save+reload. This
tool adds the text to BOTH the footprint and the underlying
board, then broadcasts PCBM_BoardRegisteration to both, which
is the pattern that registers the primitive reliably.
Args:
text: The string to place. Required.
x, y: Coordinates in mils, relative to the FOOTPRINT's origin,
which is what the handler has always actually done
(Footprint.X + MilsToCoord(x)). The old wording said
"board origin" and that was wrong: a PcbLib footprint sits
at Altium's library origin, 50000 mils out, so the two
readings differ by more than a metre. The pad, track and
arc tools wrote absolute board coordinates and produced
footprints whose geometry was nowhere near them; they now
match this one.
size: Text height in mils. 50 is a common silkscreen size;
drop to 30-40 for tight footprints.
width: Stroke width in mils. 8 reads cleanly at 50 mil
size; scale with size.
rotation: Rotation in degrees (0, 90, 180, 270 typical).
layer: Layer name resolved by GetLayerFromString
(TopOverlay, BottomOverlay, TopSolder,
BottomSolder, Mechanical1 ... Mechanical32).
use_ttfont: True for TrueType; default False is the
vector stroke font that fab houses prefer.
mirror: Mirror the text. Set this for anything on a BOTTOM
layer, or it reads backwards on the finished board;
audit_find_mirrored_pcb_text reports both halves of
the mistake (bottom text unmirrored, top text mirrored).
library_path: Optional .PcbLib to focus before adding.
Defaults to the active document.
component_name: Optional footprint name to switch to before
adding. Defaults to the currently active footprint.
units: "mil" (default) or "mm", for every length and
coordinate here, kept exact rather than rounded to
whole mils.
Returns:
Dict with success, footprint, text, layer,
x, y.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| size | No | ||
| text | Yes | ||
| layer | No | TopOverlay | |
| units | No | mil | |
| width | No | ||
| mirror | No | ||
| rotation | No | ||
| use_ttfont | No | ||
| library_path | No | ||
| component_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the handler writes to both the footprint and the underlying board and broadcasts PCBM_BoardRegisteration, and that a naive add would require save+reload to appear. The mirror pitfall (bottom-layer text reads backwards unless mirrored) plus the pointer to audit_find_mirrored_pcb_text as the detector is exactly the kind of behavioral context annotations could not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: purpose, then the registration trap, then per-argument detail. Some length is unavoidable given 12 undocumented parameters, but the editorial digression about the old "board origin" wording being wrong and the pad/track/arc tools producing misplaced geometry is history rather than instruction and could be trimmed to a single clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no annotations, the description covers invocation context (library/footprint targeting, units), behavioral side effects, the mirror correctness rule, and coordinate semantics. An output schema exists and the Returns block still names the keys, so nothing an agent needs before calling is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 12 parameters, so the description must compensate entirely and does — every parameter is documented with units, defaults and semantics. The x/y clarification (relative to the footprint origin, not the library origin 50000 mils away) and the note that pad/track/arc tools now match this convention resolve an ambiguity that would otherwise silently misplace geometry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening sentence gives a specific verb and resource ("Add a text primitive to a PcbLib footprint"), which cleanly separates it from board-level text placement (pcb_place_text) and from the other lib_add_footprint_* family members (pad, track, arc). The scope word "PcbLib" is the discriminator an agent needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "trap" paragraph explains precisely why this tool exists rather than a simpler add call — the primitive must be registered with the placement editor, which plain footprint adds do not do. Typography guidance (50 mil default silk size, 30-40 for tight footprints, width 8 at size 50, mirror for bottom layers) gives concrete usage context. It never explicitly names an alternative tool or says when NOT to use 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.
lib_add_footprint_trackA
Add a track to the current footprint (for silkscreen/courtyard).
Args: x1: Start X in mils y1: Start Y in mils x2: End X in mils y2: End Y in mils width: Track width in mils layer: Layer name. Default "TopOverlay" (silkscreen). Any Altium layer is accepted, e.g. "BottomOverlay" or "Mechanical1".."Mechanical16" for courtyard / assembly outlines. footprint_name: footprint to write into. Empty uses the editor's current footprint; a name makes that footprint current first and refuses if it cannot. units: "mil" (default) or "mm", for every length and coordinate here, kept exact rather than rounded to whole mils.
Returns: Dictionary confirming track addition
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| layer | No | TopOverlay | |
| units | No | mil | |
| width | No | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that the call mutates the current footprint, that a named footprint is made current first and the call 'refuses if it cannot', and that mm values are kept exact rather than rounded. Missing permission/edit-mode requirements and whether tracks can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Docstring layout with Args/Returns is front-loaded and each line earns its place; slightly verbose in repeating 'in mils' per coordinate, but that redundancy reinforces the units contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief 'Returns: Dictionary confirming track addition' is sufficient. For a mutation tool with no annotations and 8 parameters, the geometry, units, layer and target-footprint semantics are all covered; only permission/state prerequisites are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates fully: every parameter is documented with units (mils, or 'mil'/'mm' applying to all lengths), defaults (layer=TopOverlay, units=mil), accepted layer values (BottomOverlay, Mechanical1..16), and the empty-vs-named semantics of footprint_name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: 'Add a track to the current footprint' with the intended uses (silkscreen/courtyard) parenthesized. It never distinguishes itself from the sibling lib_add_footprint_tracks (plural batch version), which is the main risk of misselection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use context is implied ('for silkscreen/courtyard') and the layer parameter hints at mechanical/courtyard outlines, but there is no explicit when-to-use vs the batch lib_add_footprint_tracks or lib_add_footprint_regions/arc, and no prerequisites such as needing a footprint library open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_footprint_tracksA
Add MANY tracks to the current footprint in ONE call.
PREFER THIS over looping lib_add_footprint_track. A silkscreen
outline + assembly outline is 8+ segments; built one at a time
that's 8+ LLM turns and 8+ PreProcess/PostProcess+save cycles.
Batched it's one turn, one PreProcess/PostProcess, one save.
Args: tracks: List of track dicts, each with: - x1, y1, x2, y2 (int, mils) -- endpoints - width (int, mils, default 10) - layer (str, default "TopOverlay" silkscreen). Any Altium layer name, e.g. "BottomOverlay" or "Mechanical1".."Mechanical16" for courtyard/assembly.
Example, a 100x60 mil silkscreen rectangle in one call: lib_add_footprint_tracks(tracks=[ {"x1": -50, "y1": -30, "x2": 50, "y2": -30}, {"x1": 50, "y1": -30, "x2": 50, "y2": 30}, {"x1": 50, "y1": 30, "x2": -50, "y2": 30}, {"x1": -50, "y1": 30, "x2": -50, "y2": -30}, ])
footprint_name picks the footprint to write into. Empty uses
the editor's current footprint; a name makes that footprint
current first and refuses if it cannot, since otherwise the
primitives land in whichever footprint another call left current.
units is "mil" (default) or "mm" for every track in the
call, kept exact rather than rounded to whole mils.
Returns: Dict with added, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | mil | |
| tracks | Yes | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does it: it discloses per-call unit handling ('kept exact rather than rounded to whole mils'), that footprint_name makes a footprint current first and refuses if it cannot (preventing primitives landing in a stale footprint), and the turn/save-cycle implications of batching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the selection advice and the key constraint, and the worked example is genuinely useful. The turn/save-cycle point is repeated twice ('8+ PreProcess/PostProcess+save cycles' and 'one PreProcess/PostProcess, one save'), which is the only real redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batched mutation tool with no annotations and a generic item schema, the description covers what fills the batch, unit semantics, target-footprint selection and its failure mode, and expected return counts. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and tracks is an untyped object, so the description must compensate; it documents every track field (x1, y1, x2, y2, width default 10, layer default TopOverlay) with units and layer-name examples, plus footprint_name and units behavior. This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Add MANY tracks to the current footprint in ONE call.' It explicitly contrasts itself with the sibling lib_add_footprint_track, so the agent can distinguish the batch vs single-primitive tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'PREFER THIS over looping lib_add_footprint_track' names the alternative and gives the concrete condition (silkscreen outline + assembly outline = 8+ segments) plus the cost of not batching. This is explicit when-to-use guidance with a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_pinsA
Add MANY pins to the current symbol in ONE call.
PREFER THIS over adding pins one at a time (there is no singular variant). A 48-pin IC symbol built one pin at a time would be 48 LLM turns; with this tool it's one turn + one PreProcess/PostProcess + one save.
Args:
pins: List of pin dicts, each with:
- designator (str, required)
- name (str, required)
- x, y (int, mils), pin endpoint
- length (int, mils, default 200)
- rotation (int, default 0), 0/90/180/270
- electrical_type (str, default "passive"), one of
input/output/bidirectional/passive/open_collector/
open_emitter/power/hiz/io
- hidden (bool, default False)
- owner_part_id (int, optional). For multi-part
components (e.g. quad op-amp). 1..part_count picks a
specific sub-part; 0 shares the pin across all parts
(typical for V+ / V- power pins on a quad). Omit for
single-part symbols.
- symbol_outer_edge (str, optional). IEEE decoration on
the pin's outer edge. "dot" draws the inversion bubble
of an active-low pin. Omit for none.
- symbol_inner_edge (str, optional). Same, inner edge.
"clock" draws the clock wedge. The two are
independent, so an inverted clock sets both.
Either field also accepts any other TIeeeSymbol name
("schmitt", "open_collector", "active_low_input", ...)
or a bare ordinal.
- show_name / show_designator (bool, optional). Whether
the pin's name and number are DRAWN. Different from
hidden, which hides the pin itself: a resistor shows
both pins and neither label. Omit to leave Altium's
default.
Example, one stage of a dual op-amp (sub-part 1) with shared power pins (sub-part 0): lib_add_pins(pins=[ {"designator": "1", "name": "OUT1", "x": 0, "y": 0, "rotation": 180, "electrical_type": "output", "owner_part_id": 1}, {"designator": "2", "name": "IN1-", "x": 0, "y": 100, "rotation": 180, "electrical_type": "input", "owner_part_id": 1}, {"designator": "3", "name": "IN1+", "x": 0, "y": 200, "rotation": 180, "electrical_type": "input", "owner_part_id": 1}, {"designator": "8", "name": "V+", "x": 0, "y": 400, "rotation": 180, "electrical_type": "power", "owner_part_id": 0}, ])
Returns: Dict with added, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| pins | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that a call wraps PreProcess/PostProcess plus a save, and that results are reported as added/failed/total, implying partial success rather than all-or-nothing. It stops short of stating prerequisites (an open library and a set current symbol) or undo/rollback behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the batching rationale, then Args, then a realistic worked example — good structure. It is long, and the paragraph on symbol_outer_edge/symbol_inner_edge names every TIeeeSymbol option, which is more than most calls need, but little of it is truly wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an untyped schema, the description supplies everything needed to call it correctly: field list, defaults, enums, multi-part ownership rules, and a concrete example. An output schema exists, and the description still briefly names the returned counts, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the schema is just an untyped array of objects — so the description must compensate and does: it enumerates every pin-dict field with types, units, defaults, the full electrical_type enum, the 0-vs-1..part_count semantics of owner_part_id, and worked
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource and scope: 'Add MANY pins to the current symbol in ONE call.' The batch scope plus 'current symbol' distinguishes it cleanly from sibling tools like lib_get_pin_list and lib_set_pin_owner_part.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to PREFER this over adding pins one at a time and notes there is no singular variant, which stops the agent hunting for one. It quantifies the payoff with the 48-pin example, giving concrete grounds for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_symbol_arcA
Add an arc to the current library symbol.
Args: x_center: Center X coordinate in mils y_center: Center Y coordinate in mils radius: Arc radius in mils start_angle: Start angle in degrees (0 = right, 90 = up) end_angle: End angle in degrees width: Line width (0=zero, 1=small, 2=medium, 3=large) grid: snap grid (mils); arcs are glyph detail and don't need the 100-mil pin grid (rule 15), so the default is a finer 25 (e.g. inductor coils). Pass 100 for coarse, 0/1 for none.
Returns: Dictionary confirming arc addition
| Name | Required | Description | Default |
|---|---|---|---|
| grid | No | ||
| width | No | ||
| radius | Yes | ||
| x_center | Yes | ||
| y_center | Yes | ||
| end_angle | No | ||
| start_angle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It discloses the units, the angle convention and that it returns a confirmation dictionary, but omits whether the arc is committed immediately, whether it can be undone, what happens if no symbol is current, or what the confirmation contains beyond 'confirming arc addition'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by tight Args/Returns blocks; every parameter line earns its place. The grid explanation runs to three clauses and the Returns line is redundant given the output schema, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation is not required, and parameter semantics are covered thoroughly. What is missing for a mutation tool with zero annotation coverage is the state prerequisite (a current symbol in an open library) and any indication of persistence or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must do all the work and it does: every one of the 7 parameters is documented with units (mils, degrees), a coordinate convention (0 = right, 90 = up), an enumerated mapping for width (0-3 with named sizes) and an explicit rationale for the grid default of 25 versus 100 or 0/1. This adds substantial meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource: adds an arc to the *current library symbol*, which implicitly separates it from lib_add_symbol_lines, lib_add_symbol_rectangle and lib_add_footprint_arc. It never names those siblings or says how the arc primitive differs from them, so differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (glyph detail, inductor coils) and gives one concrete guidance note about the grid default, but there is no explicit when-to-use / when-not-to-use statement and no mention of the precondition that a current symbol must already be selected or created (lib_set_current_component / lib_create_symbol).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_symbol_linesA
Add MANY lines to the current symbol body in ONE call.
PREFER THIS over adding lines one at a time (there is no singular variant). A 12-line LED diode glyph drawn line-by-line would be 12 LLM turns + 12 IPC round-trips + 12 redraw passes; this tool does it in one turn with a single PreProcess/PostProcess pair and one editor redraw at the end.
Args:
lines: list of dicts, each with keys x1, y1,
x2, y2 (mils, int), width (int 0-3,
default 1).
grid: snap grid (mils) for the line endpoints. Glyph lines do
NOT need the 100-mil pin grid (rule 15), so the default is
a finer 25 mils for clean glyph detail; pass 100 for the
coarse grid or 0/1 to disable snapping.
Returns:
Dict with added, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| grid | No | ||
| lines | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it discloses the single PreProcess/PostProcess pair, the one-redraw-at-end behavior, and the partial-failure signal implied by added/failed/total counts. Gaps remain around prerequisites (a current symbol/component context must exist) and whether repeated calls accumulate on the same body.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the imperative and batch framing, then args. The 12-line LED diode example justifies the preference but runs long for the value it adds; trimming it to one clause would tighten the definition without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough to invoke correctly: every parameter is documented despite 0% schema coverage, and the return counts are described even though an output schema exists. The only meaningful omission is the context prerequisite — that a symbol body must already be the current component — which matters for a library-editing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema is essentially opaque (lines is an untyped object array with additionalProperties true), so the description must compensate — and it fully does, enumerating x1/y1/x2/y2 in mils as ints and width as int 0-3 defaulting to 1, plus the snap-grid semantics and disable values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Add MANY lines to the current symbol body in ONE call.' The batch framing plus the note that there is no singular variant makes it unmistakable which sibling (lib_add_symbol_arc, lib_add_symbol_polygon, etc.) it is and is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to prefer this over adding lines one at a time and notes the absence of a singular variant, which removes any ambiguity about routing. It also gives guidance on the grid choice (default 25 for glyph detail, 100 for coarse, 0/1 to disable). It stops short of stating when not to use it (e.g. only valid when a symbol body is current).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_symbol_polygonA
Add a polygon (filled shape) to the current library symbol.
Args: vertices: Comma-separated x,y coordinate pairs in mils. Example: "0,0,100,0,100,100,0,100" creates a square with vertices at (0,0), (100,0), (100,100), (0,100). Minimum 3 vertices (6 values) required. grid: snap grid (mils) for the vertices. A filled polygon is glyph detail (e.g. a diode triangle) and doesn't need the 100-mil pin grid (rule 15), so the default is a finer 25; pass 100 for coarse or 0/1 to disable snapping.
Returns: Dictionary confirming polygon addition with vertex count
| Name | Required | Description | Default |
|---|---|---|---|
| grid | No | ||
| vertices | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose validation (minimum 3 vertices), the default 25-mil snap and how to disable it (0/1), and the return shape (confirmation with vertex count). It does not say whether the polygon is appended vs. replaces existing geometry, whether it is undoable, or that it requires an active current symbol — significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then per-argument guidance with an inline example. The grid paragraph is slightly long for a snapping parameter, but the rule-15 justification earns its place by explaining an unusual default.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation tool with no annotations but an output schema, the description covers input format, validation, default behavior, and return value. What is missing is the operational precondition (an active current symbol) and any statement about how this polygon relates to existing symbol geometry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must do all the work, and it does: the vertices format, a concrete worked example, the 6-value minimum, and the meaning plus valid values of grid (default 25, 100 for coarse, 0/1 to disable) with the rationale for the non-standard default. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb + resource: adds a filled polygon of ordered vertices to the current library symbol. The parenthetical '(filled shape)' and the diode-triangle example distinguish it in spirit from lib_add_symbol_lines, lib_add_symbol_rectangle and lib_add_symbol_arc, but it never names those siblings explicitly, so the agent has to infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the glyph-detail remark and the rule-15 aside convey that this is for symbol artwork rather than pin-grid geometry. There is no explicit 'use this instead of X when Y', and no statement of the prerequisite that a current symbol must already be selected (lib_set_current_component) before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_symbol_rectangleA
Add a rectangle to the current symbol body.
ADD THE BODY BEFORE THE PINS. Altium exposes no z-order on
schematic primitives, so drawing order is insertion order and
there is no send-to-back to correct it afterwards. A rectangle
given a fill_color is SOLID, and one added after the pins paints
over the pin names; the only fix is rebuilding the symbol. Build
order is body, then pins, then anything drawn on top.
Args: x1: First corner X in mils y1: First corner Y in mils x2: Opposite corner X in mils y2: Opposite corner Y in mils fill_color: Fill color index (-1 = no fill) border_color: Border color index
Returns: Dictionary confirming rectangle addition
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| fill_color | No | ||
| border_color | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that z-order equals insertion order, that a filled rectangle added after pins paints over pin names, and that the only remedy is rebuilding the symbol. It does not mention permissions or library-state prerequisites, which keeps it shy 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical warning is front-loaded and the Args/Returns block is easy to scan. The middle paragraph restates the same z-order point three ways ('no z-order,' 'insertion order,' 'no send-to-back'), which is emphatic but slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation on a shared symbol body, it covers geometry units, fill semantics, ordering hazard, and the return value (an output schema also exists, so return detail is not required). The missing piece is the implicit prerequisite that a current component/symbol must be active first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: every parameter is named with units (mils) for coordinates and a semantic for fill_color (-1 = no fill). border_color is described only as a 'color index' with no default or -1 semantics explained, which is the one remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a rectangle to the current symbol body'), which cleanly separates it from siblings like lib_add_symbol_arc, lib_add_symbol_polygon, and lib_add_symbol_lines. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing guidance ('ADD THE BODY BEFORE THE PINS' and 'build order is body, then pins, then anything drawn on top'), which is real when-to-use context. It stops short of naming alternative tools or stating a prerequisite like lib_set_current_component, so it is clear but not fully routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_add_symbol_textA
Add MANY body-text items to the current symbol in ONE call.
PREFER THIS over adding text one at a time (there is no singular variant). Free text on a symbol is an Altium ISch_Label: the polarity marks, pin-group headings and "NC" annotations that carry meaning the geometry alone does not.
Args:
texts: List of text dicts, each with:
- text (str, required). Empty strings are refused,
not placed: an empty label is invisible and
unselectable, and only turns up later as a stray
object.
- x, y (int, mils)
- rotation (int, default 0), 0/90/180/270
- font_size (int, default 10). Altium's own font size,
the number its font manager takes. NOT mils, and not
converted from mils: the relationship between the two
is not documented anywhere this project can verify, so
a conversion here would silently resize every item.
- font_name (str, default "Arial")
- bold, italic (bool, default False)
- owner_part_id (int, optional). Same meaning as in
lib_add_pins: 1..part_count picks a sub-part, 0
shares the text across all of them. Omit for
single-part symbols.
Returns:
Dict with added, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| texts | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does so: it explains that empty strings are refused rather than placed (and why), that font_size is Altium's font-manager number and deliberately not converted from mils, and how owner_part_id values 0/1..part_count behave. That is exactly the non-obvious behavioral context an agent can't get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the batching recommendation and the object type, then structured args with per-field notes. The font_size and owner_part_id explanations run long, but each is justified by a real risk (silent resizing, sub-part misassignment), so nothing reads as filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, and params are fully documented. The only gap is that it references 'the current symbol' without stating that a component must be selected first (e.g. via lib_set_current_component) — a prerequisite an agent could miss.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%: the array's items are opaque objects with additionalProperties true, so the schema documents nothing. The description fully compensates by enumerating every field (text, x/y in mils, rotation with allowed values, font_size, font_name, bold/italic, owner_part_id) with types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add MANY body-text items to the current symbol in ONE call') and goes further by naming the underlying object type ('Altium ISch_Label') and its use cases (polarity marks, pin-group headings, NC annotations). This clearly separates it from lib_add_symbol_lines and lib_add_footprint_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'PREFER THIS over adding text one at a time (there is no singular variant)', which resolves the main batching decision. It also points to 'lib_add_pins' for the meaning of owner_part_id. It lacks any 'when not to use' note (e.g. lines vs. text), which keeps it below 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_audit_footprint_policiesA
Sweep a PcbLib and flag footprints that break the library's own conventions: inconsistent layer usage, pad rules, pin-1 markings, courtyard, silkscreen, 3D models, designator style.
For each policy dimension it learns the library's DOMINANT convention
across all footprints and reports every footprint that deviates (so it
works on any house style without hard-coded rules). Pass policy to
pin a dimension to a required value instead, e.g.
{"silk_layer": "Top Overlay", "courtyard": true}.
Each finding names the footprint, the dimension, and the expected vs actual value: enough to drive a fix, not just a report.
Designators are checked for presence, layer, height, and for sitting on
the footprint's AVERAGE PAD CENTRE rather than the library origin (which
is arbitrary). Tune the centring window with
policy={"designator_center_tol": <mils>}.
Geometry is read with the bulk library.get_library_geometry
command, which walks the library once and pages the result. A library
of ~1000 footprints is one pass and a handful of round trips rather
than one round trip (and one full library re-scan) per footprint.
Args: library_path: Optional .PcbLib to focus first; defaults to the focused library. policy: Optional explicit conventions to enforce; omitted dimensions are inferred from the library.
Returns {library_path, footprint_count, conventions, findings, summary}.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | No | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it explains the inference algorithm (dominant convention across all footprints, deviation reporting), the designator-centring rule against average pad centre rather than library origin, and the bulk-read performance characteristic (one pass, paginated, not one re-scan per footprint). It never explicitly says the tool is read-only/no mutation, which is the remaining gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and dimension list, then mode selection, then detail. Mostly every sentence earns its place, though the paragraph on the bulk geometry command is more implementation rationale than agent-facing guidance and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation is arguably redundant, but the description still notes the shape {library_path, footprint_count, conventions, findings, summary} and that findings carry expected vs actual values. Combined with the mode explanation and parameter guidance, an agent has enough to call this correctly; only the exhaustive policy key list is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and both parameters are free-form (policy is an open object), so the description must compensate and largely does: it explains `library_path` semantics (optional .PcbLib to focus, defaults to focused library) and gives concrete policy keys with example values ({"silk_layer": "Top Overlay", "courtyard": true}, {"designator_center_tol": <mils>}). It does not enumerate the full accepted key set, leaving some guesswork for the open object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Sweep a PcbLib and flag footprints') and immediately enumerates the policy dimensions checked (layer usage, pad rules, pin-1 markings, courtyard, silkscreen, 3D models, designator style). This clearly separates it from sibling audits that compare against an external reference (lib_audit_footprint_vs_datasheet, lib_audit_footprint_vs_package) because it explicitly audits against the library's own learned conventions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the two operating modes precisely: by default it infers the dominant convention, and passing `policy` pins a dimension to a required value. Also clarifies that `library_path` defaults to the focused library. It never names an alternative sibling tool or says when not to use it, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_audit_footprint_vs_datasheetA
Audit a footprint against the manufacturer's land pattern.
Deterministic comparison of the REAL pad geometry (read live from the .PcbLib) against a land-pattern spec transcribed from the manufacturer datasheet: pad count, every pad's position / size / shape / drill, the numbering sequence, pitch (implied by positions), the thermal pad, and its paste policy. Alignment is automatic (centroid + best of the four 90-degree rotations), so library origin and rotation conventions do not produce false errors; a MIRRORED pattern is deliberately not compensated and reports as position/sequence errors.
DATASHEET DISCIPLINE: the spec must be transcribed from the
manufacturer datasheet fetched in this conversation, and
spec.source must cite it (url + figure/page + part number).
Symbol metadata, distributor drawings, or memory of a package
are not acceptable sources. There are no built-in package
tables here, and that is intentional.
The spec (JSON object or string): source: {datasheet_url, reference, part_number} REQUIRED pads: [{name, x, y, w, h, shape?, hole?}] explicit, mm dual_row: {count, pitch, span, pad_w, pad_h, shape?} quad: {count, pitch, span_x, span_y, pad_w, pad_h, shape?} thermal_pad: {name, x, y, w, h, shape?} thermal_paste: 'full' | 'windowed' position_tol / size_tol: mm, default 0.05
dual_row expands with the SOIC/SOP convention (pin 1 top-left,
CCW); quad with the QFP/QFN convention (pin 1 top of left side,
CCW). For any other numbering give explicit pads. pad_w has
two meanings, kept for existing callers: in dual_row it is the
pad's X size, ACROSS the row; in quad it runs ALONG the row.
Returns: {ok, rotation_applied_deg, findings: [{check, severity, message, pad?, expected?, actual?}]} plus the footprint geometry under 'footprint' for reference. ok is true only with zero error-severity findings.
| Name | Required | Description | Default |
|---|---|---|---|
| spec_json | Yes | ||
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does so well: it discloses determinism, automatic centroid + four-rotation alignment, that mirroring is deliberately NOT compensated, that failures surface as position/sequence errors, and exact ok semantics (true only with zero error-severity findings). It does not state outright that the tool is read-only / mutates nothing, which is the one behavioral trait left to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then layered into comparison scope, datasheet discipline, spec grammar, and returns — a reader can stop early. It is long, and the Returns section partly duplicates the existing output schema, plus deep spec grammar arguably belongs in the schema rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity geometry audit this covers what an agent needs to construct a valid spec and interpret the result, including tolerance defaults and rotation handling. Remaining gaps are the two string parameters' resolution rules and an explicit read-only statement; return-value documentation is rightly light given an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does heavily for the hard parameter: it enumerates the entire spec_json shape (source REQUIRED, pads, dual_row, quad, thermal_pad, thermal_paste, tolerances with defaults) and even disambiguates pad_w's two meanings across dual_row vs quad. However, library_path and footprint_name — including how an empty library_path resolves and what name format is expected — get no explanation at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — audit a footprint's real pad geometry against a datasheet-transcribed land pattern — and immediately signals what it is not ("There are no built-in package tables here, and that is intentional"), which is the key axis separating it from lib_audit_footprint_vs_package and footprint_check_package. An agent can pick this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition for use (the spec must be transcribed from a datasheet fetched in this conversation, with url + figure/page + part number) and rules out symbol metadata, distributor drawings, and memory as sources. It never explicitly names a competing sibling and says "use X instead when...", so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_audit_footprint_vs_packageA
Audit an existing PcbLib footprint against its package drawing.
Where lib_audit_footprint_vs_datasheet compares pads with a land pattern typed in, this takes the PACKAGE (the same PackageSpec as lib_create_footprint_from_package) and checks the footprint is right for it. Reads only.
Checked: pad count, numbering and pin 1 (a mirror-image footprint,
the bottom-view mistake, is named as such); pitch exactly; row
span, land sizes and land centres against the IPC-7351B pattern
within the deviations measured between real vendor patterns and
IPC (a footprint drawn to the vendor's own pattern passes); every
land covering the centre of its terminal; holes against the leads;
paste on an exposed pad (closed opening plus windows covering 50
to 80 %) and on every land; manual solder mask settings; origin at
the package centroid; and, from the footprint's other primitives,
a courtyard that encloses the lands and the body, silkscreen off
the copper, an assembly outline that follows the body, and the
footprint height against the package's maximum. A turned footprint
is compared after turning it back. What could not be read is
listed under not_examined.
Run footprint_check_package on the package first: an audit against a misread package passes a footprint built from the same misread.
Args: footprint_name: the footprint in the library. package: the PackageSpec as an object or JSON text. density: L, N or M, the IPC pattern compared against. library_path: optional .PcbLib path; default the focused one. assembly_layer, courtyard_layer: the mechanical layers for those roles; empty picks them by the library's layer kind ("Assembly Top" / "Courtyard Top"), then by name.
Returns:
{ok, errors, warnings, findings: [{check, severity, message, pad?, expected?, actual?}], examined, not_examined, alignment, metrics, notes, package_check}. ok is true with no
error-severity finding.
| Name | Required | Description | Default |
|---|---|---|---|
| density | No | N | |
| package | Yes | ||
| library_path | No | ||
| assembly_layer | No | ||
| footprint_name | Yes | ||
| courtyard_layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: 'Reads only' declares the safety profile, the tolerance philosophy is disclosed ('within the deviations measured between real vendor patterns and IPC (a footprint drawn to the vendor's own pattern passes)'), and behavior on rotations and on unreadable items (not_examined) is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and sibling differentiation, then checks, prerequisite, args and returns in a predictable order; nearly every clause earns its place. It is long and the check list reads as a dense run-on, but the density is information, not filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema, return values needn't be explained, yet the description still summarizes the finding shape and the ok/not_examined semantics that determine how a result should be interpreted. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (titles only), yet the body defines every one of the six parameters, including the density enum values (L, N, M) and its default, the PackageSpec type and that it accepts an object or JSON text, and the fallback rule for assembly/courtyard layers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Audit an existing PcbLib footprint against its package drawing') and immediately distinguishes the sibling: 'Where lib_audit_footprint_vs_datasheet compares pads with a land pattern typed in, this takes the PACKAGE'. An agent can choose between the two tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the explicit contrast with the datasheet-audit sibling, plus a hard prerequisite with a reason: 'Run footprint_check_package on the package first: an audit against a misread package passes a footprint built from the same misread.' That is when-to-use, what-to-do-first, and why.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_audit_stylesA
Bulk visual-style audit across every component in a library.
Walks the focused .SchLib (or one specified by library_path)
component-by-component and emits each component's designator
style record. Comment / parameter_styles / pins are opt-in via
the with_* flags so the default response stays compact:
designator alone is ~120 bytes per component, so a 2000-symbol
library is ~240 KB without filters.
Filter mode: pass expect_designator_font_id and/or
expect_designator_color and the response only contains
components whose designator does NOT match the expected style.
That makes the audit case (find every symbol that doesn't use
Times New Roman 10pt navy) a single round-trip with bounded
output.
timeout overrides the bridge default. A 2000-symbol audit
with no opt-in flags finishes well under the 10s default; pass
a larger value if you flip on with_parameters and the lib
has heavy parameter dicts.
Args: library_path: .SchLib path. Defaults to focused doc. with_comment: Include comment style record per component. with_parameters: Include parameter_styles array per component. with_pins: Include pins array per component. expect_designator_font_id: Filter; trim components where designator.font_id equals this value. expect_designator_color: Filter; trim components where designator.color equals this BGR int (e.g. 8388608 for navy / 0x000080 in BGR-packed form). limit: Cap on emitted entries. Default 5000. timeout: Per-call bridge poll timeout override (seconds).
Returns: Dict with library_path, count (emitted), mismatch_count (subset that failed the filter), limit, truncated, filter_applied, and components: list of {name, designator:{...}, mismatched, comment?:{...}, pins?:[...], parameter_styles?:[...]}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| timeout | No | ||
| with_pins | No | ||
| library_path | No | ||
| with_comment | No | ||
| with_parameters | No | ||
| expect_designator_color | No | ||
| expect_designator_font_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it quantifies payload size (~120 bytes/component, ~240 KB for 2000 symbols), discloses the 10s bridge default and timeout override, and explains that filter mode trims output to non-matching components for bounded results. It does not explicitly confirm the operation is read-only or state failure/permission behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then filter mode, then Args/Returns, so the important information comes first and each section is scannable. It is long and repeats title-level parameter names in prose that also appear in the schema, but the length is largely justified by 8 undocumented params and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers invocation scope (focused doc vs library_path), opt-in cost model, filter behavior, timeout tuning, and the full return shape including count, mismatch_count, truncated, filter_applied and per-component fields. For an 8-param, annotation-free tool, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the Args block fully compensates by defining all eight parameters, including the non-obvious BGR int encoding for expect_designator_color (8388608 = navy) and the filter semantics of expect_designator_font_id. This adds meaning well beyond the bare schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Bulk visual-style audit across every component in a library') and scopes it to designator style records on a .SchLib, so an agent can tell it apart from single-item tools like lib_probe_designator. It never names a sibling alternative explicitly, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use context: opt-in flags for comment/parameters/pins keep the default compact, filter mode exists for the 'find every symbol that doesn't match' case, and it advises raising timeout when with_parameters is enabled on heavy libraries. It stops short of stating when NOT to use it or routing to a specific alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_auto_link_3d_modelsA
Batch-link STEP models to footprints by matching file names.
Enumerates every footprint in the PcbLib, scans model_dir for
.step/.stp files, and links each footprint whose name matches a model
file's stem (case-insensitive). Builds on lib_link_3d_model so the
same caveat applies: offsets/rotations are not set, adjust in the
library if a model needs repositioning.
Args: model_dir: Folder containing .step/.stp model files. library_path: Optional .PcbLib to focus first; uses the focused document otherwise.
Returns: {"linked": [{footprint, model}], "unmatched_footprints": [...], "unused_models": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_dir | Yes | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it describes enumerating every footprint, scanning .step/.stp files, case-insensitive stem matching, and the caveat that offsets/rotations are not set. It does not specify whether existing model links are overwritten or whether special permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and clearly structured with Args and Returns sections. The Returns section is somewhat redundant because an output schema exists, but it is not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch mutation tool with no annotations, the description covers the matching algorithm, required parameters, caveat, and return shape. The remaining gap is that it does not state what happens to pre-existing model links or whether the operation requires write permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by defining model_dir as the folder containing .step/.stp files and library_path as an optional .PcbLib to focus first, otherwise using the focused document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: batch-link STEP models to footprints by matching file names. It clearly distinguishes this batch auto-linking operation from the sibling single-link tool lib_link_3d_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: batch-link models by filename across a PcbLib, optionally focusing on a provided library path. It references lib_link_3d_model as the basis, implying the relationship, but does not explicitly state when not to use this tool versus manual or single linking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_batch_renameB
Batch rename components in a schematic library.
Each assignment renames one component from old_name to new_name.
Args: assignments: List of dicts with keys: - old_name: Current name of the component in the library - new_name: New name for the component library_path: Path to library (uses active library if not specified)
Returns: Dictionary with counts of renamed and failed assignments
| Name | Required | Description | Default |
|---|---|---|---|
| assignments | Yes | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it discloses that library_path falls back to the active library and that results report renamed vs failed counts, implying partial application. It does not say whether renames are atomic, what causes failures (collisions, missing components), or whether changes are saved immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded with the purpose, then the per-assignment semantics, args, and return. The Args/Returns framing is efficient; the 'Each assignment renames one component' line is slightly redundant with the Args list but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and an output schema present, the description covers parameters and return shape adequately. It is thin on failure/atomicity behavior and on how it relates to the single-rename sibling, which an agent would need before choosing it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% but the description compensates well, documenting the assignments list structure (old_name/new_name keys) that the raw schema leaves as untyped additionalProperties, and explaining the optional library_path default. This adds genuinely necessary meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Batch rename components in a schematic library') with clear batch scope. It does not distinguish itself from the sibling lib_rename_component, which performs a single rename, so an agent must infer the split from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and the closest alternative, lib_rename_component, is never mentioned. The batch framing implies its purpose, but nothing tells the agent when to prefer this over the single-rename sibling or over lib_move_components.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_batch_set_paramsA
Batch set parameters on library components.
Each assignment sets one parameter on one component. If the parameter exists it is updated; if not it is created.
Two param_name values are SPECIAL-CASED to component
properties rather than parameters:
"Description"setsComponent.ComponentDescription."Designator"sets the component's DEFAULT designator (Component.Designator.Text, e.g."U?"/"R?"). Use this to normalize library designator defaults in bulk (pairs withlib_get_components(with_designator=True)).
Args: assignments: List of dicts with keys: - component_name: Name of the component in the library - param_name: Parameter name (e.g., "Partnumber", "Manufacturer"), or the special "Description" / "Designator" property keys - param_value: Value to set library_path: Path to library (uses active library if not specified)
Returns: Dictionary with counts of updated, created, and failed assignments
| Name | Required | Description | Default |
|---|---|---|---|
| assignments | Yes | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it says existing parameters are updated, missing ones are created, and the return value counts updated, created, and failed assignments. It does not discuss atomicity, permissions, or whether partial failures roll back, leaving some mutation risk undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then organized into special cases, args, and returns. The structure is useful and mostly efficient, though the Returns section is somewhat redundant given the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter batch mutation with an output schema, the description covers the key operational context: assignment shape, create-vs-update behavior, special property names, active-library fallback, and result counts. Missing details about failure handling or atomicity are minor given the provided output schema and otherwise strong coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it defines the assignments list, names the required inner keys component_name, param_name, and param_value, gives examples, and explains the special Description and Designator keys. It also clarifies that library_path is optional and defaults to the active library.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: batch-setting parameters on library components, with one assignment per component. It also clarifies that assignments can target ordinary parameters or special-cased Description/Designator properties, making its scope distinguishable from nearby library-editing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use case, normalizing library designator defaults in bulk, and explicitly pairs itself with lib_get_components(with_designator=True). It does not enumerate when not to use it or name alternatives such as single-component setters, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_clear_source_libraryA
Unpin a SchLib's symbols from their source-library provenance.
Library-side sibling of sch_clear_source_library. Symbols
copied in from another library (a vendor pack, a stock library
like the built-in miscellaneous-devices set) carry three
provenance fields pointing at their ORIGIN: SourceLibraryName,
TargetFileName, and DesignItemId. Left stale, every placement
from your library re-links against a library that no longer
exists on the machine and lands in the state.
Per matching component: clears SourceLibraryName, resets TargetFileName to '*', and syncs DesignItemId to the LibReference (each independently switchable). This is the minimal fast path of what lib_normalize_implementations does inside its full model sweep, when you only need the provenance cleaned, use this. Deferred save: flush with app_save_all.
Args: library_path: absolute .SchLib path; empty = focused library. component_names: restrict to these LibReferences; None/empty = every component in the library. clear_target_file_name: reset TargetFileName to '*'. sync_design_item_id: set DesignItemId = LibReference where they differ.
Returns: {"library_path": ..., "total": inspected, "cleared_source_library": n, "cleared_target_file_name": n, "synced_design_item_id": n}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| component_names | No | ||
| sync_design_item_id | No | ||
| clear_target_file_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it: it discloses exactly what is mutated (SourceLibraryName cleared, TargetFileName reset to '*', DesignItemId synced), that each sub-operation is independently switchable, and that the save is deferred requiring app_save_all to flush. It does not state whether the change is undoable or what happens on partial failure, which is the remaining gap for an unannotated mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and rationale before the mechanics, and organized into prose + Args + Returns. It runs long and the wrapped 'Library-side sibling' fragment is slightly awkward, but every sentence (including the deferred-save warning) carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 4-parameter mutation with no annotations: motivation, scope, per-parameter behavior, deferred-save handling, and sibling routing are all present. An output schema exists, yet the description still summarizes the return counters, which is helpful rather than redundant given the plural per-field result keys.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely — and it does: empty library_path means the focused library, None/empty component_names means every component, clear_target_file_name resets to the literal '*', and sync_design_item_id sets DesignItemId = LibReference 'where they differ.' Each parameter gains semantics the bare schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Unpin a SchLib's symbols from their source-library provenance') and names the exact fields affected. It explicitly distinguishes itself from two siblings — sch_clear_source_library (the schematic-side counterpart) and lib_normalize_implementations (the full sweep) — so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative and the condition that selects it: use lib_normalize_implementations for a full model sweep, use this 'when you only need the provenance cleaned.' The opening sentence also states the failure mode that motivates calling it (stale provenance → <Not Found>), which tells the agent when the tool is warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_convert_designators_to_strokeA
Convert every TrueType .Designator in a PcbLib to a stroke font.
A TrueType PCB text will not persist a position change made through
XLocation: the write reads back changed, then Altium recomputes the
position from the TrueType layout on reload and it reverts. That is why a
handful of designators per library refuse to centre. Bold/Italic
are TrueType-only attributes (a stroke text cannot be bold), so a bold or
italic designator is the reliable TrueType tell.
This clears UseTTFonts, Bold and Italic on each such
designator, reads back to confirm, saves, and reloads. Afterwards those
designators are stroke and lib_fix_designators can centre them.
Returns {library_path, designators, converted, names, saved}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares the mutation (clears UseTTFonts, Bold and Italic), discloses the destructive consequence (stroke text cannot be bold, so those attributes are lost), describes verification and persistence side effects (reads back, saves, reloads), and even documents the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with the persistence rationale and the return shape following in a logical order. The TrueType-position explanation is longer than strictly required but earns its place by justifying why the conversion exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 are already covered, and the description nonetheless sketches them. Behavior, side effects and the sibling pipeline are all present; the one real hole is the semantics of library_path, which is undocumented in both schema and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one parameter, library_path, which the description never mentions. It does not say whether the path is optional, whether it defaults to the active library, or what form the path takes, so an agent must guess on the only input it has to supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Convert every TrueType .Designator in a PcbLib to a stroke font') and scopes it to a defined subset of objects. It also distinguishes itself from the neighbouring lib_fix_designators and lib_probe_designator by explaining the pipeline order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger ('a handful of designators per library refuse to centre', 'a bold or italic designator is the reliable TrueType tell') and states the follow-up step ('afterwards ... lib_fix_designators can centre them'). It stops short of an explicit when-not-to-use condition or a statement of prerequisites, so it is clear context rather than a full decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_copy_componentA
Copy a component WITHIN or BETWEEN schematic libraries.
Replicates the source component (all pins, graphics, parameters)
and adds it to the destination library. When dest_library is
omitted or equals source_library this behaves as the original
same-library duplicate. When dest_library differs, the
component is copied across libraries -- the source library is
focused for the replicate, then the destination is focused and
the clone is added there. The destination ends focused with the
new component selected. Save is deferred (call app_save_all to
flush).
Args:
source_name: lib_ref of the component to copy.
new_name: lib_ref for the clone. Defaults to source_name
(natural choice for cross-library copies that should
keep their identity).
source_library: .SchLib path to read from. Defaults to the
currently focused document.
dest_library: .SchLib path to write to. Omit (or pass the
same path as source_library) for a same-library
duplicate.
overwrite: When True, a component already named new_name
in the destination is removed first. Default False
returns NAME_EXISTS and changes nothing.
Returns:
Dictionary with success, source, new_name,
source_library, dest_library, same_library and
overwrote flags.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | No | ||
| overwrite | No | ||
| source_name | Yes | ||
| dest_library | No | ||
| source_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so well: it discloses focus changes (source focused for replicate, destination ends focused with new component selected), deferred save requiring app_save_all, and the NAME_EXISTS no-op behavior when overwrite is False. These are exactly the side effects an agent must know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured Args/Returns sections with zero filler. It is somewhat long, but each clause (focus behavior, save deferral, overwrite/NAME_EXISTS) adds distinct value, so length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, the description covers side effects, error modes, defaults, and even enumerates the return dictionary keys (though an output schema exists). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the five parameters is explained with defaults, accepted values (.SchLib path vs lib_ref), and semantics. The overwrite and new_name default behaviors are clarified beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (copy) and resource (component) and scopes it explicitly to WITHIN or BETWEEN schematic libraries. The name/title match and the precise 'replicates all pins, graphics, parameters' phrasing let an agent distinguish this from lib_copy_footprint or lib_move_components 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the branching logic clearly: dest_library omitted or equal to source_library yields a same-library duplicate, differing path yields a cross-library copy, and it points to app_save_all for persistence. It doesn't explicitly contrast against sch_replicate_component or lib_copy_footprint, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_copy_footprintA
Copy one footprint (all pads/primitives) into a PcbLib, optionally renaming.
Footprint analog of lib_copy_component: full-copies the footprint with no delete. source_library defaults to the focused PcbLib; dest_library defaults to the source. A same-library copy requires a different new_name. Errors if new_name already exists in dest unless overwrite.
Args: source_name: the footprint to copy. new_name: name for the copy (default source_name). source_library: source .PcbLib path (default the focused lib). dest_library: destination .PcbLib path (default source). overwrite: replace a same-named footprint already in dest.
Returns: {"success": true, "source": "...", "new_name": "...", "same_library": bool}.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | No | ||
| overwrite | No | ||
| source_name | Yes | ||
| dest_library | No | ||
| source_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden, and it does well: it discloses that this is a non-destructive full copy ('no delete'), how library defaults resolve to the focused PcbLib, and the exact failure mode on name collision plus the overwrite escape hatch. It does not say whether the destination library must be loaded/open or whether the operation is undoable, which leaves some mutation risk undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then behavior, then Args/Returns — easy to scan. Mild redundancy: the defaults for source_library, dest_library, new_name and overwrite are stated in the prose paragraph and repeated verbatim in the Args block, which costs a few lines without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with an output schema present, the description covers purpose, defaults, error conditions and overwrite semantics adequately. Remaining gaps are minor: no statement about required library/document state, and the Returns block partly duplicates what the output schema already defines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate entirely, and it documents all five parameters with defaults and meaning (source_name, new_name, source_library, dest_library, overwrite). The Args block adds resolution semantics the schema cannot express, e.g. source_library defaults to the focused PcbLib and dest_library defaults to the source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource + scope: 'Copy one footprint (all pads/primitives) into a PcbLib, optionally renaming.' It explicitly positions itself relative to a sibling ('Footprint analog of lib_copy_component'), so an agent can distinguish it from lib_move_footprints, lib_rename_footprint, and lib_copy_component 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions and selection logic: same-library copy requires a different new_name, and it errors if new_name already exists in dest unless overwrite is set. Defaults for source_library and dest_library are spelled out. What it lacks is an explicit 'use lib_move_footprints instead when you want to move rather than duplicate' routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_create_footprintC
Create a new PCB footprint in the active library.
Args: name: Footprint name description: Footprint description
Returns: Dictionary with created footprint information
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does not meet it. It does not say whether an active library must already be loaded, whether the new footprint is created empty (requiring lib_add_footprint_pad etc. afterwards), what happens on a name collision, or whether the creation is persisted or reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and the whole definition is short. The Args/Returns scaffolding adds little value given the schema and output schema exist, but the total length stays tight enough not to burden the reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, this is under-specified: the return value is covered by an output schema, but the description omits prerequisite state (active library), post-creation workflow (adding pads, saving), and failure modes. An agent could call it and be surprised by the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but the Args block only repeats the schema titles ('Footprint name', 'Footprint description') with no naming conventions, constraints, or default/exclusion behavior. Effectively zero information is added beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new PCB footprint') plus scope ('in the active library'), which is more than a restatement of the name. However, it gives no differentiation from near-identical siblings such as lib_create_standard_footprint and lib_create_footprint_from_package, so an agent cannot tell from the text which creator to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of the alternatives among the many sibling creation tools. The only contextual hint is 'active library', which is a scope statement rather than a usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_create_footprint_from_packageA
Create a COMPLETE footprint in the open PcbLib from a package drawing.
Takes the package as the datasheet draws it, not a pad list: the lands come from IPC-7351B (toe, heel and side fillets with the tolerance stack-up) for the family and density asked for. Writes the pads (rounded rectangles with their corner ratio, rotation, holes, slots, non-plated holes), paste windows over an exposed pad with the pad's own paste closed, silkscreen kept clear of the copper with a pin 1 dot, the body outline and a .Designator on the assembly layer, the courtyard, and the footprint height from the package's maximum A. Origin at the package centroid. Every length goes in millimetres, unrounded.
It then READS THE PADS BACK (lib_get_pad_geometry) and compares count, centres, sizes, rotation, shape, holes and any manual paste or mask expansion with what was sent, within one internal unit. A difference is a failure, not a warning.
DATASHEET DISCIPLINE: transcribe the package from the
manufacturer's drawing fetched in this conversation, each
dimension as min/nom/max with its page and figure, and name the
datasheet in source. The engine sizes lands from the
tolerances, so a nominal-only dimension gives a worse pattern and
says so in warnings.
Args:
package: the PackageSpec as an object (or its JSON text):
family (chip, melf, molded, sod, sot23, sot89, sot223,
dpak, soic, son, qfn, qfp, plcc, bga, lga, crystal2,
crystal4, dip, header, radial, axial, to220, to92,
connector, custom) and the dimensions it needs, each a
number, [min, max], [min, nom, max] or
{min, nom, max, cite}. Axes: two-row parts have their
rows LEFT and RIGHT, so lead_span_x is the tip to tip
span across them (JEDEC E) and body_y the body along
them (D); lead_length is the terminal along the span
(L), lead_width across it (b). Exposed pad:
ep_x/ep_y. source: {document, revision, page,
ref, url}.
name: footprint name; default the package's name, else a
generated one (e.g. SOIC-8-P1.27N).
density: L, N or M (least, nominal, most). Default: the
package's own, N unless it says otherwise.
description: appended to the generated description, which
already names the family, the standard, the density and
the source.
assembly_layer, courtyard_layer: mechanical layers for those
roles. Empty picks them BY ROLE from the library: the
layer whose kind is "Assembly Top" / "Courtyard Top",
else the one whose name says so (the same reading
lib_audit_footprint_policies uses). With neither, the
call refuses and lists the library's layers rather than
guessing a number.
drafting: overrides of the drafting rules, e.g.
{"silk_width": 0.15, "ep_paste_coverage": 0.6, "mask_expansion": 0.05}. A non-zero mask expansion is
written to every pad; at the default 1:1 the library's
design rule decides.
set_height: write the footprint height (package A max) with
the existing height setter.
Returns:
{ok, footprint, library_path, created, layers, readback, pads, courtyard_mm, warnings, notes, ipc, steps}. ok is
true only when every step succeeded and the readback matched.
A failure after the footprint was created says so: the
footprint exists and is incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| density | No | ||
| package | Yes | ||
| drafting | No | ||
| set_height | No | ||
| description | No | ||
| assembly_layer | No | ||
| courtyard_layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so thoroughly. It discloses pad construction, paste and mask behavior, silkscreen, courtyard, designator, height handling, centroid origin, millimetre units, readback verification, refusal behavior for missing layers, warnings for nominal-only dimensions, and failure semantics including incomplete footprints after partial creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but it is front-loaded with the core action and verification behavior and uses clear sections. Most sentences carry operational detail, though some prose is more elaborate than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter mutation tool with no annotations, 0% schema coverage, and an output schema, the description is highly complete. It explains inputs, generation behavior, validation, return fields, failure handling, and datasheet requirements, leaving little an agent needs to infer before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains the package object, family list, dimension formats, axis conventions, exposed pad fields, source citation structure, name defaulting, density values and defaults, description handling, layer selection by role or name, drafting override keys, and set_height behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: create a COMPLETE footprint in the open PcbLib from a package drawing. It immediately distinguishes the approach from a pad-list tool and from generic footprint creation by explaining that lands are derived from IPC-7351B using package dimensions, density, and tolerance stack-up.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong usage context: package must come from the manufacturer's drawing fetched in this conversation, dimensions must be transcribed with page/figure and named in source, and datasheet discipline is explicit. It does not explicitly route between sibling tools such as lib_create_footprint, lib_create_standard_footprint, or lib_audit_footprint_vs_datasheet, so it lacks direct when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_create_ic_symbolA
Create a COMPLETE, discipline-compliant IC symbol in ONE call.
You decide the functional grouping (inputs/power/control on the LEFT, outputs/status on the RIGHT -- discipline rule 18); this lays them out cleanly and emits the whole symbol: the body rectangle (Altium-yellow fill) plus every pin, grid-aligned with the top-left pin's wire-end at the origin (rule 14), in one create + one bulk add_pins + one rectangle.
Args:
name: Component name.
left_pins: Pins on the LEFT side, top-to-bottom. Each a dict
with designator, name, and optional electrical_type
(input/output/power/passive/...).
right_pins: Pins on the RIGHT side, top-to-bottom, same shape.
designator_prefix: e.g. "U".
description: Component description.
Returns: Dict with the symbol name, pin count, body extent, and the per-step bridge results.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| left_pins | Yes | ||
| right_pins | Yes | ||
| description | No | ||
| designator_prefix | No | U |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the composite write behavior (create + bulk pins + rectangle), the placement origin convention (top-left pin wire-end at origin per rule 14), and the resulting body fill. It doesn't cover what happens to an existing symbol of the same name, overwrite semantics, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the single-sentence purpose before the Args block, so an agent can stop reading early. Slightly verbose with inlined discipline-rule citations, but each sentence carries operational information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with zero annotation coverage, the description covers layout rules, pin semantics, and side effects well, and an output schema exists so return-value detail is not required (though a summary is still given). Left unpinned: symbol-name collision behavior and failure modes, which matter for a create tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it documents all five parameters and the nested dict shape of left_pins/right_pins (`designator`, `name`, optional `electrical_type` with enumerated examples), plus the default designator prefix. Minor gaps remain around ordering edge cases and duplicate designators.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a COMPLETE, discipline-compliant IC symbol in ONE call') with the scope of what gets emitted (body rectangle plus every pin). An agent can distinguish it from lib_create_symbol, lib_create_passive_symbol, and manual lib_add_pins composition by the 'IC' and 'complete in one call' framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'in ONE call' phrasing and the description of the internal steps (one create + one bulk add_pins + one rectangle) make clear this is the high-level alternative to assembling a symbol primitive-by-primitive. It doesn't explicitly name lib_create_symbol/lib_create_passive_symbol/lib_add_pins as the alternatives to avoid, so routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_create_passive_symbolA
Create a standard 2-pin PASSIVE symbol in ONE call.
Draws the recognizable glyph for a resistor / capacitor /
polarized_capacitor / inductor / diode / led / crystal / fuse,
with pin 1 on the left and pin 2 on the right. Composes
lib_create_symbol + lib_add_pins + the
glyph primitives (emitted as raw mils, so the LED's emission
arrows and the crystal's resonator keep their sub-100-mil detail).
Args: name: Component name (e.g. "R_0402"). kind: "resistor" | "capacitor" | "polarized_capacitor" | "inductor" | "diode" | "led" | "crystal" | "fuse" (aliases r/c/cap_pol/electrolytic/cp/l/d/xtal/f accepted). designator_prefix: default by kind (R/C/L/D/Y/F) if omitted. description: Component description.
Returns: Dict with the symbol name and per-step bridge results.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| description | No | ||
| designator_prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses the internal composition, that pin 1 is left and pin 2 right, and that primitives are emitted in raw mils to preserve sub-100-mil detail. It omits operational facts an agent would want for a write operation — whether a library must be open/current, what happens if the symbol name already exists, and whether it is destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its payoff are front-loaded in the first sentence, followed by the glyph list and composition note, with args in a scannable block. No sentence is filler, even the parenthetical about raw mils carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter creation tool with no annotations but an output schema (so return values need no prose), the description covers purpose, kinds, pin orientation and composition. The remaining gap is preconditions — current library, overwrite behavior — which matter for a symbol-creating call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: name with an example, kind with the full enum plus accepted aliases (r/c/cap_pol/electrolytic/cp/l/d/xtal/f), designator_prefix with its defaulting rule, and description. That fully covers all four parameters; only naming conventions for 'name' are left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a standard 2-pin PASSIVE symbol') plus the exact set of supported passives, and explicitly names the underlying primitives it composes (lib_create_symbol + lib_add_pins + glyph primitives), which distinguishes it from the generic sibling lib_create_symbol.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'In ONE call' plus the composition note tells an agent this is the shortcut that replaces chaining three siblings. Context of use is clear, but it never explicitly says to fall back to lib_create_symbol or lib_create_ic_symbol for parts outside the eight listed kinds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_create_standard_footprintA
Create a COMPLETE standard footprint in ONE call.
Composes parametric geometry with the bulk authoring tools: makes the footprint, then emits every pad + the silkscreen outline + the courtyard rectangle in two batched round-trips. Supply the package's recommended land-pattern dimensions from the datasheet (this carries no part library -- the numbers you pass ARE the footprint).
Args: name: Footprint name (e.g. "SOIC-8_3.9x4.9"). family: "chip" (2-pin passive) | "sip" (single-row header) | "dual" (SOIC/SOP/SON/SOT/DIP) | "header" (2-row pin/box header, IDC, SWD/JTAG -- column-major odd/even numbering) | "tab" (power/tab package: SOT-223, DPAK/D2PAK, TO-220 -- signal pins one side + a large tab pad opposite, pass tab_w & tab_h) | "quad" (QFP/QFN) | "bga" (ball grid -- pass rows & cols). SOT-23 is "dual" with pin_count=3. Through-hole (DIP/header/TO-220) = any family with hole > 0. pin_count: total pads (2 for chip; even for header; n signal pins for tab; divisible by 4 for quad; ignored for bga). rows, cols: BGA ball grid dimensions (bga family only). exposed_pad: centre thermal/exposed pad size (mils) for QFN/QFP (quad family); 0 = none. Gets designator pin_count+1. tab_w, tab_h: tab pad size (mils) for the "tab" family; the tab gets designator pin_count+1 (tie it to a signal pin in the schematic). skip: BGA ball designators to omit (depopulation), e.g. ["A1","E5"] (bga family only). pitch: pad centre-to-centre within a row (mils). pad_w, pad_h: pad size (mils). TWO MEANINGS, kept for the callers that rely on them: pad_w is the pad's X size in every family but quad, so in dual (rows left and right) and chip it runs ACROSS the row, along the span, while in sip, header and tab it runs along the row; in quad each side turns the pad and pad_w runs ALONG the row. For a footprint from a package drawing use lib_create_footprint_from_package, which sizes the lands by IPC-7351B from the terminal's lead_length (along the span) and lead_width (across it). row_span: centre-to-centre between the two rows / opposite sides (mils). Required for dual and quad. shape: pad shape (default "roundrect"); corner_radius is its %. silk: draw a silkscreen body outline (TopOverlay). courtyard: clearance (mils) past the extent for the courtyard rectangle (Mechanical1); 0 disables it. body_w, body_h: package body for the silk outline; default to the pad extent. hole: drill size (mils). >0 makes through-hole pads (DIP / header / axial): pin 1 rectangular, the rest round.
Returns: Dict with the footprint name, pad/track counts, extent, and the per-step bridge results.
| Name | Required | Description | Default |
|---|---|---|---|
| cols | No | ||
| hole | No | ||
| name | Yes | ||
| rows | No | ||
| silk | No | ||
| skip | No | ||
| pad_h | No | ||
| pad_w | No | ||
| pitch | No | ||
| shape | No | roundrect | |
| tab_h | No | ||
| tab_w | No | ||
| body_h | No | ||
| body_w | No | ||
| family | Yes | ||
| row_span | No | ||
| courtyard | No | ||
| pin_count | Yes | ||
| description | No | ||
| exposed_pad | No | ||
| corner_radius | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that it makes the footprint then emits every pad, silkscreen outline, and courtyard in two batched round-trips, and that no part library is involved. It also explains family-dependent behavior such as through-hole creation and pad orientation. It does not mention whether an existing footprint with the same name is overwritten or what errors occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses a well-structured Args/Returns format. It is long but justified by the 21 parameters and the need to explain family-dependent semantics. A few sentences could be tightened, but no content is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 21 parameters, no annotations, and an output schema, the description is complete enough: it explains the family system, through-hole creation, pad dimension nuances, and return shape. It omits error behavior and overwrite semantics, which would be useful for a creation tool. The output schema reduces the need to detail return values further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate—and it does extensively, explaining family-specific meanings for pad_w, row_span requirements, tab/exposed-pad designators, BGA skip lists, and hole behavior. The only parameter not covered is `description`, and default values are left to the schema. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Create a COMPLETE standard footprint in ONE call." It immediately distinguishes the tool from the manual alternative by naming lib_create_footprint_from_package and explaining when to use that instead. An agent can easily tell this apart from sibling footprint-creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: supply the datasheet's recommended land-pattern dimensions because "the numbers you pass ARE the footprint." It explicitly routes package-drawing-based creation to lib_create_footprint_from_package. However, it does not contrast with the sibling lib_create_footprint (manual footprint creation) or state any exclusion beyond the package-drawing case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_create_symbolA
Create a new schematic symbol in the active library.
Args:
name: Component name
designator_prefix: Default designator prefix (e.g., "U", "R", "C")
description: Component description
part_count: For multi-part components (quad op-amp, dual gate,
etc), the number of sub-parts. Pins added via lib_add_pins
with owner_part_id set to 1..part_count are assigned
to that sub-part; owner_part_id=0 shares the pin
across all sub-parts (the usual power-pin pattern on a
quad op-amp).
Returns: Dictionary with created symbol information
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| part_count | No | ||
| description | No | ||
| designator_prefix | No | U |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose non-obvious behavior around multi-part pin ownership (owner_part_id 0 vs 1..part_count), which is genuinely useful. It omits what happens on duplicate names, whether an existing symbol is overwritten, and any required library/permission preconditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, followed by a structured Args block. The part_count explanation is lengthy but earns its place because it encodes non-obvious sub-part semantics; nothing else is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return line is only a courtesy. For a library-mutating create tool with no annotations, the definition should still state preconditions and duplicate/overwrite behavior, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all four parameters are explained, including examples for designator_prefix and a detailed semantics of part_count that the bare integer schema conveys nothing about. The remaining three params get only terse glosses, which is acceptable but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Create a new schematic symbol in the active library'. It is clearly distinct from footprint-creation siblings, but it does not distinguish itself from the closer siblings lib_create_ic_symbol and lib_create_passive_symbol, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (you are building a symbol before adding pins), and the part_count note does sequence the workflow toward lib_add_pins. However there is no explicit statement of when to prefer this over lib_create_ic_symbol / lib_create_passive_symbol, and no prerequisites (e.g., that a library must be active) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_dblib_get_recordA
Every column of one row of a database library table.
The row is found by its key, the value in the table's key column
(key in a lib_dblib_search result; the column is
key_field in lib_dblib_info). The key is passed to the
database as a parameter, never as SQL text. lookup says how
the row was found: parameter when the database matched it,
scan when the parameterised query could not run and the
table was read and compared instead.
Args: library_path: Full path of the .DbLib file. table: A table the DbLib declares. key: The row's key value. key_field: Optional column to match instead of the DbLib's own key column; it must be a column of the table.
Returns:
{"library_path", "table", "key", "key_field",
"key_field_source", "lookup", "found", "match_count",
"rows_scanned", "scan_capped", "symbol_ref", "symbol_library",
"footprints": [{"ref", "library"}], "description",
"fields": {column: value}}. found False is an answer, not
an error: the key is not in that table. match_count above
1 means the key is not unique and the first row is shown.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| table | Yes | ||
| key_field | No | ||
| library_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does so well: it discloses that the key is bound as a parameter never as SQL text, that a fallback table scan may occur, that found=false is a valid answer rather than an error, and that match_count>1 returns the first row. It leaves scan_capped and the performance/consistency tradeoffs of scan mode unexplained, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then lookup semantics, then Args/Returns blocks — a clean structure with no filler. The Returns list is long, but since it is the only place those semantics are explained, it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything an agent needs for a 4-parameter lookup tool with no annotations: input sourcing, key-field override, SQL-safety note, lookup provenance, and the non-error not-found case. Although an output schema exists, the description still adds interpretive value about found/match_count rather than merely restating fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define every parameter — and it does: library_path as the full .DbLib path, table as a declared table, key as the row's key value, and key_field as an optional alternative match column with the constraint that it must belong to the table. This is meaningfully more than the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource+scope: 'Every column of one row of a database library table.' It names the sibling tools that produce its inputs (lib_dblib_search, lib_dblib_info), which makes it clearly distinct from the search and info tools in the same family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains how to obtain the key and key_field from lib_dblib_search / lib_dblib_info, and when key_field is applicable (must be a column of the table). It does not state exclusions (e.g., when to prefer lib_dblib_search instead, or cost implications of scan mode), so it falls short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_dblib_infoA
What a database library (.DbLib) declares, and how it connects.
A DbLib holds no symbols. It names a database (Access, Excel, SQL
Server, any ODBC or OLE DB source) and lists the tables whose rows
are the components; each row names a symbol in a .SchLib and
footprints in .PcbLibs. This reads the .DbLib file itself, inside
Altium, and with with_fields opens the database read-only to
list each table's columns. Call it first on an unfamiliar DbLib:
it says which column is each table's key, which carries the
symbol and which the footprints, which is what
lib_dblib_get_record and sch_place_dblib_component take.
THE PASSWORD IS NEVER RETURNED. connection.redacted is the
connection string with every Password / Pwd value replaced by
***, and has_password says whether there was one.
HOW EACH COLUMN WAS FOUND IS STATED. key_field_source is
key_setting or where_clause when the DbLib names it,
part_number_column when a column is called Part Number
(Altium's default), or first_column as a last resort; treat
the last as a guess. settings is the table's section of the
file as written, for anything the parsed fields do not cover.
Args: library_path: Full path of the .DbLib (or .SVNDbLib) file. lib_get_installed_libraries lists installed ones with library_type "database". with_fields: True (default) connects to the database to list every table's columns. False reads the file only and opens no connection: use it when the database is slow or unreachable, or to read the connection settings alone.
Returns: {"library_path", "connection": {"provider", "kind" (access / excel / sql_server / odbc / oracle / other), "data_source", "has_password", "redacted", "read_only"}, "left_quote", "right_quote", "search_path", "table_count", "tables": [{"name", "enabled", "schema", "key_field", "key_field_source", "key_field_found", "symbol_ref_field", "symbol_library_field", "description_field", "footprint_fields": [{"ref_field", "library_field"}], "fields" (null when not read), "field_count", "error", "settings"}], "sections", "fields_included", "connected" (null when no connection was attempted)}.
| Name | Required | Description | Default |
|---|---|---|---|
| with_fields | No | ||
| library_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so: read-only database open, password values replaced by *** with a separate has_password flag, per-table error capture, and connected=null when no connection was attempted. It goes further by disclosing the confidence semantics of key_field_source (key_setting/where_clause are authoritative, first_column is "a guess") — exactly the kind of context annotations could never carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Args and Returns blocks make it scannable and every paragraph is front-loaded with its point. It is somewhat over-long, and the Returns block substantially duplicates an output schema that is already available, which is the only real waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation is optional, yet the description still maps the response shape (connection, tables, key_field_source, fields_included, connected) well enough to reason about results. For a read-only inspection tool with two parameters, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does. library_path is defined down to accepted extensions (.DbLib/.SVNDbLib) and where to discover valid values; with_fields gets its default, its behavior in both states, and concrete conditions for disabling it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource statement: it reads a .DbLib file inside Altium and, with with_fields, opens the database read-only to list each table's columns. It also explains the DbLib content model (tables = rows = components pointing at .SchLib symbols and .PcbLib footprints), which distinguishes it from lib_dblib_search (search) and lib_get_installed_libraries (enumeration).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call it first on an unfamiliar DbLib" is an explicit routing rule, and it names the downstream tools (lib_dblib_get_record, sch_place_dblib_component) whose arguments this call supplies. It also gives the negative branch for with_fields=False: use it when the database is slow or unreachable, or to read settings alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_dblib_searchA
Search database libraries (.DbLib) for components, read-only.
Case-insensitive substring match against the columns of every row of every enabled table, in one DbLib or in every installed one. lib_search already folds DbLib rows into its own results; this is the direct form, for restricting to one table or a few columns, or for raising the row bound on a large database.
THE QUERY NEVER REACHES THE DATABASE. Each table is read with a
plain SELECT of the DbLib's own declared table and every row is
matched inside Altium, so a query holding quotes, wildcards or
SQL is matched as the text it is. The cost is that every row is
read: max_rows bounds the total, rows_scanned reports it,
and scan_capped says the bound cut the search short.
Args:
query: Text to find (case-insensitive substring).
library_path: One .DbLib to search. Omitted, every installed
database library is searched.
table: One table the DbLib declares (as lib_dblib_info names
it). Omitted, every enabled table.
fields: Column names to match. Omitted, every column. A name
a table lacks is reported under unknown_fields.
limit: Cap on returned rows (1 to 1000, default 50).
max_rows: Cap on rows read in total (default 20000).
Returns:
{"query", "count", "limit", "truncated", "rows_scanned",
"scan_capped", "libraries": [{"library_path", "searched",
"error", "tables_searched", "tables_failed", "unknown_fields"}],
"results": [{"library_path", "table", "key", "key_field",
"symbol_ref", "symbol_library", "footprints": [{"ref",
"library"}], "description", "matched_field", "matched_value"}]}.
A library's error is a code (READ_FAILED, TABLE_UNKNOWN,
NO_TABLES, NO_CONNECTION_STRING, CONNECT_FAILED,
LIMIT_REACHED); the reason text never carries the connection
string.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| table | No | ||
| fields | No | ||
| max_rows | No | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the query never reaches the database (so quotes/wildcards/SQL are literal text), that every row is read so cost scales with table size, that max_rows bounds the scan and scan_capped flags truncation, and that error text never carries the connection string.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the key differentiator, and the sections are well organized. The Returns block is long and largely redundant given that an output schema exists, which is the only reason it falls short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter search tool with no annotations, the description covers usage, cost model, failure modes, and error codes. An output schema exists, so the return section is extra rather than needed, and nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the six parameters is explained, including the limit range (1–1000, default 50), max_rows default 20000, that fields are column names with unknowns reported under unknown_fields, and that table names must match what lib_dblib_info reports.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (database library .DbLib components) with scope (case-insensitive substring across columns of every enabled table). It explicitly distinguishes itself from the sibling lib_search, explaining that lib_search folds DbLib rows into its own results while this is the direct form.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool (lib_search) and the conditions that select this one instead: restricting to one table or a few columns, or raising the row bound on a large database. It also states defaults for library_path, table, and fields when omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_delete_componentA
Delete one symbol from a schematic library (.SchLib).
Removes the component whose LibReference is component_name and
marks the library dirty for deferred save (flushed by app_save_all).
Deletes a single named part; if the name is not found the call
errors (COMPONENT_NOT_FOUND) rather than silently doing nothing.
There is no wildcard mass-delete.
Args:
component_name: the component's LibReference (its library name).
library_path: optional absolute .SchLib path to target; defaults
to the currently focused library document.
component_index: alternative to component_name; the integer
index from lib_get_components. Use it to delete a part
whose name carries unreproducible bytes (embedded quote or
control char). Provide exactly one of the two.
Returns: {"success": true, "library_path": "...", "deleted": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| component_name | No | ||
| component_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does so well: it discloses that the library is marked dirty for deferred save flushed by app_save_all, that a missing name raises COMPONENT_NOT_FOUND rather than silently succeeding, and that there is no wildcard mass-delete. It omits whether deletion is undoable or requires the library to be writable, which matters for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Behavioral caveats are front-loaded before the Args block, and the structured layout scans well. The explicit Returns section partly duplicates the existing output schema, slightly diminishing the value of every line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter destructive library operation with no annotations, the description covers targeting, error semantics, and persistence, and the output schema handles return values. Missing only authorization/undo context, which is a modest gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate fully — and it does, documenting all three parameters, their meaning (LibReference, absolute .SchLib path, integer index from lib_get_components), the defaults, and the mutual-exclusivity constraint that the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Delete one symbol from a schematic library (.SchLib)') and immediately bounds scope ('a single named part', 'no wildcard mass-delete'), which separates it from footprint deletion and generic object deletion siblings. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains default behavior (targets the currently focused library document) and gives explicit parameter-selection guidance ('Provide exactly one of the two'), including the niche case for using component_index when a name has unreproducible bytes. It does not name alternative sibling tools (e.g., lib_delete_footprint, obj_delete), so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_delete_footprintA
Delete one footprint from a PCB library (.PcbLib).
Finds the footprint by name, removes and deregisters it, and MARKS
the .PcbLib dirty. It does NOT write to disk: this bridge defers
saves, and app_save_all (or proj_save on the LibPkg) is what
flushes them. Reported: this said it saved, the footprint was still
in the file and the timestamp unchanged until an explicit save.
Deletes a single named footprint; if the name is not found the call errors (FOOTPRINT_NOT_FOUND). No wildcard mass-delete.
Args: footprint_name: the footprint's name in the library. library_path: optional absolute .PcbLib path to target; defaults to the currently focused library document.
Returns: {"success": true, "library_path": "...", "deleted": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well. It discloses that the footprint is removed and deregistered, the .PcbLib is marked dirty, no disk write occurs immediately, saving must be done via app_save_all or proj_save, and a missing name produces FOOTPRINT_NOT_FOUND.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and save-behavior warning, then provides clear Args and Returns sections. The short 'Reported:' incident note reinforces the non-saving behavior but is somewhat redundant with the preceding explanation, keeping it just below maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no annotations, the description is complete enough to call correctly. It covers scope, error behavior, dirty-state semantics, deferred-save behavior, parameter meanings, and the return shape despite an output schema being present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining both parameters. It defines footprint_name as the name in the library and library_path as an optional absolute .PcbLib path defaulting to the currently focused library document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: delete one footprint from a PCB library (.PcbLib). It also clarifies the exact granularity by saying it deletes a single named footprint and does not perform wildcard mass-delete, which distinguishes it from broader or primitive-level delete operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool applies: deleting a single named footprint, with an error if the name is missing and no wildcard mass-delete. It does not explicitly name sibling alternatives such as lib_delete_component or lib_delete_footprint_primitives, so it falls short of full alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_delete_footprint_primitivesA
Delete primitives inside ONE footprint of a PCB library.
THE ONLY LIBRARY-SCOPED PRIMITIVE DELETE. obj_delete and
pcb_delete_object both resolve a BOARD, and when no board is
focused that lookup opens the first PcbDoc any open project
holds. Aimed at a library they do not fail; they remove
primitives from a board you never named, and the reply does not
say which one. This is the tool for editing a footprint.
SCOPED THREE WAYS, all of which must agree before anything is removed: the library by path, the footprint by name, and the object type or layer. The library is verified AFTER it is brought to the front, so a delete aimed at one that never focused is refused rather than landing in whichever did.
PADS ARE EXCLUDED unless include_pads. Deleting a pad changes
the part's connectivity rather than its drawing, and clearing
graphics off a layer should not quietly cost you the pinout.
THE FOOTPRINT ON SCREEN IS EDITED FROM ANOTHER. The footprint the
editor shows keeps its primitives on the library board, which is
written back into it at the next switch, so removing from it in
place came undone. When the target is on screen, another
footprint is made current for the delete (a temporary one in a
single-footprint library, removed afterwards) and the target is
shown again at the end; was_current says this happened.
Args:
footprint_name: The footprint to edit. Required: deleting
from whichever footprint the editor happens to show is
the mistake this avoids.
object_type: PCB object type, e.g. "track", "arc", "text",
"region", "fill". Give this or layer.
layer: Restrict to one layer, e.g. "TopOverlay", or a name
the library's stack gives it, such as "Top Assembly". A
name the stack does not have is refused, with the names
it does have.
library_path: The .PcbLib. Defaults to the focused document.
include_pads: Allow pads to be removed. Off by default.
confirm: Required. Read the footprint first with
lib_probe_footprint and pass True once the filters
are what you mean.
Returns:
Dict with library, footprint, removed,
examined, layers, pads_included and
was_current.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | ||
| confirm | No | ||
| object_type | No | ||
| include_pads | No | ||
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: pads are excluded by default and why, the library is verified after focusing so a stale target is refused, deleting from the on-screen footprint is performed via a temporary stand-in footprint with ``was_current`` reporting it, and confirm is mandatory. These are exactly the non-obvious behaviors an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the sibling warning, then organized into scoping, pads, and the screen-editing caveat. Some phrasing is ornamental ('quietly cost you the pinout') and the prose is longer than strictly necessary, but nearly every sentence carries a real constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive six-parameter tool with no annotations, the description covers scoping, defaults, refusal conditions, the on-screen indirection, and the return keys. An output schema exists, so the brief Returns section is sufficient rather than redundant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for all six parameters: footprint_name's rationale, object_type examples, layer examples plus the refusal-with-valid-names behavior, library_path default, include_pads semantics, and confirm's two-step protocol. It adds substantial meaning beyond bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (delete primitives inside ONE footprint of a PCB library) and immediately distinguishes itself from obj_delete and pcb_delete_object, explaining why those siblings are wrong for library editing. An agent can select this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternatives and the condition that selects them (obj_delete/pcb_delete_object resolve a board, this edits a footprint), gives a prerequisite (read with lib_probe_footprint then pass confirm=True), and states the three-way scoping requirement. When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_diff_librariesA
Compare two schematic libraries and report differences.
Returns which components are only in library A, only in B, or shared.
Args: library_a: Full path to the first SchLib file library_b: Full path to the second SchLib file
Returns: Dictionary with only_in_a, only_in_b, common arrays, and count_a, count_b, only_a, only_b, shared counts
| Name | Required | Description | Default |
|---|---|---|---|
| library_a | Yes | ||
| library_b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load: it does disclose that both inputs are files (SchLib), that the operation is a non-mutating comparison, and what categories of difference are reported. It does not state permission requirements, what happens if a path is invalid or the library is open in the editor, or whether comparisons are name-based or content-based — meaningful gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence and the three diff categories, which is the right ordering. The explicit 'Args' and 'Returns' blocks are somewhat redundant — the return keys are already documented by the output schema and the arg names repeat the schema — but the total length is still modest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-file read-only comparison with an output schema present, the description covers purpose, inputs, and result shape adequately. The remaining omission is failure behavior (missing file, unreadable library) and whether both libraries must be closed in the editor, which an agent would need before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: both parameters are documented as full filesystem paths to SchLib files, which is more than the bare 'Library A' / 'Library B' titles provide. It stops short of specifying path-format or relative-vs-absolute rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Compare two schematic libraries') and states exactly what the result contains (components only in A, only in B, or shared). No sibling tool performs library diffing, so the operation is inherently distinguishable, though the description never names a boundary against nearby tools like lib_search or app_update_from_libraries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'compare' — an agent can infer this is a pre-sync/pre-merge check, but the description never states when to choose this over app_update_from_libraries or proj_get_differences. There are no prerequisites or exclusions listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_easyeda_importA
Convert an EasyEDA / LCSC part to KiCad files or an Altium plan.
Independent implementation from EasyEDA's published format spec, so symbol and footprint geometry, pads, drills, silkscreen and metadata all convert without any third-party converter.
Source: lcsc_id fetches online (e.g. "C7420"), or
payload_path reads a saved component JSON, which keeps the
whole conversion offline and reproducible.
target="kicad": writes <name>.kicad_sym and
<name>.kicad_mod into output_dir and returns their paths.
With fetch_3d (default on) the part's 3D model is fetched and
converted to <name>.wrl, which the footprint then references.
Altium needs STEP and cannot use VRML, so this is KiCad only.
target="altium": returns an ORDERED PLAN of this server's own
library tools (lib_create_symbol, lib_add_pins,
lib_create_footprint, lib_add_footprint_pads, lib_link_footprint,
...) that recreates the part in schlib_path / pcblib_path.
Nothing is written to Altium: review the plan, then execute the
steps (tool_invoke drives them directly). Altium's binary library
formats are never synthesized, the bridge authoring API is used
instead.
target="inspect": parse only, return the component summary and warnings. Use this first on an unfamiliar part.
DATASHEET DISCIPLINE: an imported footprint is a vendor drawing,
not ground truth. Audit it with
lib_audit_footprint_vs_datasheet against the manufacturer
land pattern before trusting it. Polygon pads and slotted holes
have no faithful equivalent and are reported in warnings.
Returns: {"ok": ..., "component": {...}, "warnings": [...]} plus "files" (kicad) or "steps"/"summary" (altium).
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | altium | |
| lcsc_id | No | ||
| fetch_3d | No | ||
| output_dir | No | ||
| pcblib_path | No | ||
| schlib_path | No | ||
| symbol_name | No | ||
| payload_path | No | ||
| footprint_name | No | ||
| include_body_art | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses that lcsc_id fetches online while payload_path is offline, that KiCad mode writes three files into output_dir, that Altium mode writes nothing and only produces a plan, and that polygon pads / slotted holes degrade and surface in warnings. These are exactly the side effects and limitations an agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then organized into labeled sections for source, KiCad, Altium, inspect and datasheet discipline, so it is scannable. It is long, and a couple of lines (e.g. the spec-implementation boast) could be trimmed without losing agent-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, multi-mode conversion tool, the description covers inputs, per-target outcomes, side effects and the return shape (ok/component/warnings plus files or steps). With an output schema present, it does not need to re-document return structure and correctly only summarizes it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for 10 parameters, so the description must compensate and largely does: it explains target values, lcsc_id vs payload_path as mutually exclusive sources, fetch_3d default and KiCad-only applicability, output_dir, and schlib_path/pcblib_path for Altium. It leaves symbol_name, footprint_name and include_body_art unexplained, which is the remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names a specific verb+resource pair (convert an EasyEDA/LCSC part) and immediately differentiates the three output modes. It is clearly distinguishable from siblings like lib_kicad_import, lib_easyeda_search and part_fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance per target: KiCad writes files, Altium returns an ordered plan to review and execute, inspect is recommended first for unfamiliar parts. It also names a follow-up tool (lib_audit_footprint_vs_datasheet) and the condition for using it, plus when 3D fetch is useless (Altium cannot use VRML).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_easyeda_searchA
Search LCSC / EasyEDA for parts by MPN or description.
EXPECT THIS TO FAIL, and NOT because of credentials. Checked against the live service: the search route answers 404/403 with an HTML error page and no auth challenge, component fetch on the SAME host still works with no credentials, LCSC's own search API returns an error body, and the LCSC results page is rendered client-side (fetching it yields zero part numbers). There is no endpoint left to log in to, so no cookie, token or account will restore this.
Search is therefore a BROWSER task, which also keeps it per-user: each person searches LCSC in their own signed-in browser, and no shared credential is ever stored by this server. Take the part number from there and import by id, which is unaffected: lib_easyeda_import(lcsc_id="C1234", ...).
Online. Returns candidates only, no geometry: pick an lcsc_id and pass it to lib_easyeda_import. HTTPS-only with a host allowlist; override endpoints with EASYEDA_API_BASE.
Args: query: MPN, keyword, or description fragment. limit: max candidates (default 20).
Returns: {"ok": true, "count": N, "results": [{lcsc_id, mpn, manufacturer, package, description}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses concrete failure modes (404/403 HTML, no auth challenge, client-side rendering), credential handling, HTTPS-only host allowlist, endpoint override, and return shape. This goes well beyond ordinary transparency and prevents futile credential troubleshooting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical warning is front-loaded, but the middle diagnostic paragraph is lengthy for a tool the agent is told not to call. The live-service evidence could be compressed while preserving the decision guidance, so structure is clear but not optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, a two-parameter schema with no field descriptions, and a tool that should generally be avoided, the definition supplies failure context, alternative workflow, argument meanings, and return shape. Nothing material is missing for correct agent behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description defines both parameters: query is an MPN/keyword/description fragment, and limit is the maximum candidate count with a default of 20. It also documents the returned fields, fully compensating for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: search LCSC/EasyEDA for parts by MPN or description. The LCSC/EasyEDA scope distinguishes it somewhat, but it does not explicitly compare itself to sibling search tools such as lib_search, part_search, or lib_dblib_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to expect failure and that search is a browser task, then directs the agent to take the resulting part number and import it via lib_easyeda_import. This is unusually clear when-not-to-use and alternative-path guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_export_kicad_footprintA
Export a PcbLib footprint to a KiCad .kicad_mod file.
Reads the footprint's pads from the active (or named) PCB library and
writes a KiCad 6+ S-expression footprint: one pad each
(designator -> number, position, size, shape, drill, layer set).
Through-hole pads (hole > 0) get a drill and the all-copper layer set;
SMD pads get the side's Cu/Paste/Mask set. Altium mils convert to mm
and the y axis is flipped (Altium y-up -> KiCad y-down). This is the
footprint counterpart to lib_export_kicad_symbol.
Args: footprint_name: Footprint to export. If empty, exports the library's current footprint. output_path: Destination .kicad_mod file. Defaults to workspace/.kicad_mod.
Returns: {"output_path", "footprint", "pad_count"} or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the output format (KiCad 6+ S-expression), how pads map to fields, through-hole vs SMD layer-set handling, mils-to-mm conversion and the y-axis flip. It omits failure modes such as whether an existing output_path is overwritten, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded opening sentence states the action, followed by organized processing detail and explicit Args/Returns sections. The techtidbits (mils/mm, y-flip) earn their place, though the device-level prose sits slightly heavy for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a transformation tool whose output schema already declares the return shape, the description still names the return fields and error case, and fully covers input semantics and conversion behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: footprint_name explains the empty-value fallback to the library's current footprint, and output_path explains the workspace/<name>.kicad_mod default. Both parameters gain meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource (export a PcbLib footprint to a KiCad .kicad_mod file) and explicitly names its counterpart lib_export_kicad_symbol, so an agent can distinguish it from sibling export/import tools. The transformation described is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes context (reads pads from the active or named PCB library, footprint counterpart to the symbol exporter) and documents the empty-footprint_name fallback to the current footprint. It stops short of explicit when-not-to-use guidance or naming alternatives such as lib_kicad_import for the reverse direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_export_kicad_symbolA
Export a SchLib symbol to a KiCad .kicad_sym file.
Reads the symbol's pins from the active schematic library and writes a KiCad 6+ S-expression symbol: a body rectangle sized to the pin roots plus one pin per Altium pin (designator -> number, name, electrical type, position, orientation). Coordinates convert mils -> mm. This covers the symbol only; footprint export is separate.
Naming a component SELECTS it in the library, and that outlives
the call: exporting is a read, but it leaves the library on the
component it exported. Tools called afterwards without a
component name act on whatever is current, so a following
lib_add_pins would add pins here. The reply reports it in
current_component when a name was given.
Args: component_name: LibRef to export. If empty, exports whatever component is currently selected in the SchLib. output_path: Destination .kicad_sym file. Defaults to workspace/.kicad_sym. reference: Reference designator prefix for the symbol (default "U").
Returns: {"output_path", "symbol", "pin_count"} or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | No | U | |
| output_path | No | ||
| component_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so well: it discloses the non-obvious persistent side effect that naming a component SELECTS it and that selection outlives the call, and that the reply reports it in current_component. It also states the mils -> mm coordinate conversion and the source of the pin data, which an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then behavior, then a structured Args/Returns block — easy to scan. The Returns block largely restates what the output schema already declares, so it is mildly redundant, but it is short and the rest of the text earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-annotation tool with an output schema, the description covers source of data, transformation, output artifact, defaults, and the surprising selection side effect. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does, documenting all three parameters: component_name (LibRef semantics, empty = current selection), output_path (default workspace/<name>.kicad_sym), and reference (default "U"). This adds meaning well beyond the bare typed properties in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+format: "Export a SchLib symbol to a KiCad .kicad_sym file." It also enumerates exactly what gets written (body rectangle, one pin per Altium pin with designator, name, electrical type, position, orientation) and explicitly scopes out the sibling case: "This covers the symbol only; footprint export is separate."
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly separates this from lib_export_kicad_footprint and gives the condition that selects the empty-name path ("If empty, exports whatever component is currently selected"). It warns that a later lib_add_pins would land on the exported component, which is a real usage consideration. It lacks an explicit "when not to use" statement, keeping it just under a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_extract_cse_zipA
Extract a Component Search Engine zip and build its install plan.
Stage 5 of the autonomous flow (library readiness,
reference/autonomy-roadmap.md): stages the recognized members
(.SchLib / .PcbLib / STEP) flattened into dest_dir and returns
an ordered install_plan whose steps are exact
lib_install_library / lib_link_footprint /
lib_link_3d_model parameter dicts -- dispatch them in order to
make the part placeable. Any archive member with an absolute path,
drive letter, or .. segment rejects the WHOLE archive before
anything is written. Extraction is pure Python; only the install
plan touches Altium when dispatched.
Args:
zip_path: Absolute path to the downloaded zip.
dest_dir: Where to stage the files. Default:
<workspace>/cse_imports/<zip stem>.
Returns:
{"ok": True, "mpn", "files": [abs paths], "extracted": {"schlib"/"pcblib"/"step": abs path or None}, "install_plan": [{"tool", "params"}]} or {"ok": False, "reason": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_dir | No | ||
| zip_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so well: it discloses the security gate (absolute paths, drive letters, or '..' segments reject the WHOLE archive before anything is written), that extraction is pure Python, and that only dispatch of the plan touches Altium. This is exactly the behavioral context an agent needs for a file-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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary before flow/staging/returns details, with clean Args/Returns sections. Slightly verbose with the roadmap reference, but the length is largely earned given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 2-param tool with an output schema, no annotations, and a mutation-like extraction step, the description covers inputs, staging target, security failure mode, return shape, and downstream dispatch. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: zip_path is described as an absolute path to the downloaded zip, and dest_dir gets a concrete default template. Minor room remains — no note on creating dest_dir or overwriting behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource phrase ('Extract a Component Search Engine zip and build its install plan') and names the exact downstream tools (lib_install_library / lib_link_footprint / lib_link_3d_model), distinguishing it from the sibling lib_inspect_cse_zip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Positions the tool explicitly as 'Stage 5 of the autonomous flow' and tells the agent to dispatch the returned plan steps in order to make the part placeable. It gives clear context but does not explicitly state when NOT to use it (e.g., versus lib_inspect_cse_zip first), so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_extract_intlibA
Extract .SchLib + .PcbLib sources from an .IntLib.
Opens the integrated library in Altium, runs the editor's
Extract Sources command, then probes Altium's conventional
output locations (a sibling folder named after the IntLib base
name, falling back to the IntLib's own directory) to report
which source files actually appeared on disk.
After this returns with sch_lib_found and / or
pcb_lib_found true, the produced files can be opened with
the rest of the library toolset -- lib_get_components,
lib_get_footprints, lib_copy_component, etc. -- by
passing the reported sch_lib_path / pcb_lib_path as
the library_path argument.
Args: intlib_path: Absolute path to the .IntLib file.
Returns:
Dict with intlib_path, extract_dir, sch_lib_path,
sch_lib_found, pcb_lib_path, pcb_lib_found. A
_found flag of False means Altium did not produce that
source -- either the extract command name needs adjusting
for the local Altium build, the IntLib does not contain that
kind of source, or write permissions prevented the dump.
| Name | Required | Description | Default |
|---|---|---|---|
| intlib_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does well: it discloses that it opens the library in Altium, runs an editor command, writes source files to disk, and enumerates why a _found flag might be false (command name mismatch, missing source, write permissions). It doesn't say whether files are overwritten or whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, then mechanism, then Args/Returns. The middle paragraph on probing locations and the failure-mode list are useful, though slightly verbose since an output schema already exists to convey return keys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that mutates disk and depends on an external application, the definition covers mechanism, side effects, downstream usage, and every documented failure cause — enough for an agent to call it and interpret the result correctly, even though the output schema already documents the return keys.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare 'Intlib Path' string), but the description supplies the meaning the schema lacks: the argument is an absolute path to a .IntLib file. With a single parameter there is little more to document, so 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (extract .SchLib and .PcbLib sources from an .IntLib) and distinguishes it from siblings like lib_extract_cse_zip or lib_kicad_import by naming the exact input format and the files produced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the downstream workflow — after a _found flag is true, use lib_get_components, lib_get_footprints etc. by passing sch_lib_path/pcb_lib_path. Does not explicitly compare against alternative extraction/import tools or state prerequisites (Altium must be running), 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.
lib_find_vault_componentsA
Find the Design Item ID of a managed part by its exact name.
Looks through the managed (Workspace) parts already placed on the
sheets Altium has open, and matches name exactly, case
ignored, against each part's comment, library reference and
Design Item ID. Every match comes back, one per Design Item ID,
with the lifecycle state the library manager reports, so two
parts sharing a name are both shown rather than the first one
being picked.
It does not search the whole Workspace: that needs Altium's EDMS interfaces, whose methods no reference documents, and a call this Altium lacks would stop the bridge. A part not yet used in the design has to be looked up in Altium's Components panel.
Args: name: The comment, library reference or Design Item ID.
Returns:
name, count, sheets_searched and matches, each
with design_item_id, comment, lib_reference, vault,
lib_identifier_kind, revision_guid, lifecycle_state and sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, and it does well: read-only lookup implied, exact case-insensitive matching disclosed, all matches returned one per Design Item ID rather than first-hit, and lifecycle state reported by the library manager. It also warns about a bridge-stopping call, which is valuable risk context. Minor gap: no statement of performance cost or behavior with zero matches, though the Returns section covers the shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, but the body sprawls into an aside about EDMS interface documentation that reads like internal design rationale; it earns partial credit as usage guidance but bloats the entry. The Args/Returns blocks are useful but partly duplicate the prose above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no annotations, the description covers input semantics, matching rules, dedup behavior, return fields (which it lists even though an output schema exists), and the boundary of what it cannot do. An agent has everything needed to call it correctly and to interpret an empty result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single `name` parameter, so the description must compensate, and it does: `name` may be a comment, library reference or Design Item ID, matched exactly with case ignored. That is more than the bare string type in the schema. It does not discuss escaping or whitespace handling, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: find the Design Item ID of a managed part by exact name, searching managed (Workspace) parts placed on open sheets. It explicitly scopes the search domain and names the sibling concept it is not (whole-Workspace search / Components panel lookup), so an agent can distinguish it from lib_search, lib_get_vault_component and lib_dblib_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when this applies (part already placed on an open sheet), when it does not (part not yet used in the design — look it up in Altium's Components panel), and why whole-Workspace search is excluded (undocumented EDMS interfaces, bridge risk). That is when/when-not/alternative guidance in full.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_fix_designatorsA
Bring every footprint's .Designator onto the library's OWN
convention: the layer, height and centring the majority already use.
Nothing is hard-coded. The target layer, its raw ordinal, the norm
height and the centring tolerance are all inferred from this library
(see lib_audit_footprint_policies); policy overrides any of
them. "Centred" means on the AVERAGE PAD CENTRE, not the library
origin.
DEFAULTS TO A DRY RUN. With dry_run=True (the default) it reports
exactly which footprints it would touch, on which layer, and at which
coordinates, and writes nothing. Pass dry_run=False to apply.
Applying RUNS TO CONVERGENCE: apply, save, reload the PcbLib, re-plan, repeat until nothing is left. The reload is mandatory, not cosmetic: Altium caches each text's bounding rectangle at load and never refreshes it when the text moves or is resized, so a second pass without a reload would centre against stale geometry and shove designators off the part. Resizing a text also changes its box, so height fixes and centring settle over successive passes rather than one.
PARTIAL SUCCESS IS EXPECTED AND REPORTED, NOT HIDDEN. A small number of
designators (a handful per library) do not persist a position change
through Altium's save for reasons not yet diagnosed: the write reads
back changed but the value reverts on reload. Rather than loop forever or
claim success, the tool stops when a pass makes no progress and returns
converged: false with the offending footprints in unrepairable
for a human to centre by hand. Everything else is applied. applied
counts only writes confirmed by read-back, never attempts.
Args:
library_path: .PcbLib to fix; defaults to the focused library.
dry_run: report the plan without writing (default True).
fix_layer: move designators off the convention layer onto it.
fix_center: re-centre designators beyond the library's tolerance.
fix_height: also normalise text height to the library norm.
add_missing: create a .Designator on footprints that lack one.
policy: explicit conventions, e.g.
{"designator_center_tol": 50, "designator_height": 20}.
Returns {library_path, dry_run, conventions, planned, applied, created, passes, converged, failed, skipped, actions}.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | No | ||
| dry_run | No | ||
| fix_layer | No | ||
| fix_center | No | ||
| fix_height | No | ||
| add_missing | No | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: dry-run default, mandatory reloads due to Altium text-bound caching, convergence looping, expected partial failures, `unrepairable` reporting, and `applied` counting only read-back-confirmed writes. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then behavior, then arguments and returns. It is long, but most detail is justified by the tool's convergence and partial-failure behavior, though some prose could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter mutation tool with no annotations, it covers purpose, operational modes, convergence behavior, failure handling, parameter meanings, and return fields. The output schema exists, but the description's return summary is still useful and complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates with an Args section documenting all seven parameters, including defaults, the focused-library default for `library_path`, and a concrete `policy` example. It adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: bring every footprint's `.Designator` onto the library's own convention for layer, height, and centring. It also defines 'centred' precisely as average pad centre, distinguishing this from generic origin-based centring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the default dry-run workflow and how to apply changes with `dry_run=False`, which is strong operational guidance. It references `lib_audit_footprint_policies` for inferred conventions but does not explicitly compare this tool against other designator-related siblings such as conversion or rotation audits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_component_detailsA
Get full inspection of one library component in a single call.
Returns metadata, every pin, every parameter (as a flat dict),
AND visual-style records for the designator, comment, pins,
and each parameter (font_id, color, is_hidden, x, y,
orientation, justification). The integer font_id can be
expanded to {name, size, bold, italic} via obj_get_font_spec
when style detail is needed; the round-trip default keeps it
compact.
If library_path is provided and isn't already focused, the
library is opened (focus changes), so the next lib_* call
operates on it without an explicit open. Saves are deferred,
opening doesn't write anything to disk.
DATASHEET DISCIPLINE: This response is the highest-density
device-fact surface in the library API (pins, parameters,
Manufacturer/MPN). Treat every value as a hint to find the
manufacturer datasheet, not as ground truth. The response
carries _datasheet_guidance and _datasheet_parts, fetch
the PDF and cite a section/page before stating any pin or
rating.
Args:
component_name: Component LibRef as it appears in the .SchLib.
library_path: Optional .SchLib full path. When omitted the
currently focused library is used.
component_index: Alternative to component_name. The integer
index from lib_get_components. Use this to reach a
component whose LibReference carries bytes you cannot
reproduce (an embedded double-quote, or a control char
left by a broken import) -- the name never has to round
trip through the caller. Provide exactly one of
component_name / component_index.
Returns:
Dict with:
- name, library_path, description, alias_name,
part_count, pin_count
- designator: {text, font_id, color, is_hidden, x, y,
orientation, justification} - the on-canvas designator
label (NOT just the prefix string).
- comment: {text, font_id, color, is_hidden, x, y,
orientation, justification} - the on-canvas comment /
value label.
- pins: list of {designator, name, electrical_type, x, y,
orientation, hidden, label_hidden}. Pin font / color
are not exposed by the Altium SDK on ISch_Pin and
therefore not surfaced here.
- parameters: flat dict of name -> value (cheap lookups).
- parameter_styles: list of {name, value, style:{font_id,
color, is_hidden, x, y, orientation, justification}}
in the same order parameters appear on the symbol.
- models: list of the component's implementations (footprint
/ SPICE / 3D links), each {model_name, model_type,
is_current, datafile_links:[{entity_name, file_kind,
location}]}. datafile_links is the model's source (the
library it resolves from); empty when the footprint binds
by name only. Empty list when the part carries no models.
- _datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| component_name | No | ||
| component_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses that providing library_path changes focus, that saves are deferred, and that opening writes nothing to disk. It also describes the response shape in depth, including caveats like pin font/color not being exposed by the SDK.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear summary, but it is quite long and includes an extensive Returns section that largely duplicates the existing output schema. While well-organized, it could be trimmed significantly without losing essential guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the lack of annotations, and the presence of an output schema, the description is complete. It covers side effects, parameter alternatives, return contents, and datasheet discipline, leaving no critical gaps for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate completely. It explains each parameter: component_name as the LibRef, library_path as an optional path to focus a library, and component_index as an alternative integer from lib_get_components, including the constraint to provide exactly one of component_name or component_index.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Get full inspection of one library component in a single call.' It immediately distinguishes this from listing tools by emphasizing 'full inspection' of a single component, and it enumerates exactly what is returned (metadata, pins, parameters, styles).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear guidance on when to use component_index instead of component_name (when the LibReference has unrepresentable bytes) and when to follow up with obj_get_font_spec for expanded font details. However, it does not explicitly compare against siblings like lib_get_components or lib_get_pin_list, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_componentsA
Get all components in a library.
Default fast path returns only the metadata that the
ILibCompInfoReader exposes directly: name, alias_name,
part_count, description. That path scales linearly with file IO
and finishes in well under a second on typical libraries.
Setting with_parameters=True adds each component's full
parameter dict (Manufacturer, Value, Footprint, etc.) to the
result. That branch calls GetState_SchComponentByLibRef once
per symbol and iterates parameters, which is O(N) in the live
SchLib document and is what makes the call slow on libraries
with many hundreds of components. Use it when you need the
parameters; for a single symbol's parameters, prefer
lib_get_component_details.
Setting with_designator=True adds each component's DEFAULT
designator (Component.Designator.Text, e.g. "U?" / "R?"
/ "IC?"). The CompInfoReader fast path does NOT expose the
designator, so this also loads each live symbol (same cost driver
as with_parameters) but skips parameter iteration, keeping the
payload small. Intended for library-wide designator-consistency
audits.
Args: library_path: Path to library (uses active library if not specified) with_parameters: If True, include each component's parameter dict (slow on large libraries). Default False. with_designator: If True, include each component's default designator string (slow on large libraries; smaller payload than with_parameters). Default False.
part_count HERE IS NOT TRUSTWORTHY. It comes from the
CompInfoReader, and MEASURED on AD26 it reported 2 for a symbol
created single-part whose every pin carries OwnerPartId 1, while
lib_get_component_details reported 1 for an identically
created symbol. The two readers disagree and only the
discrepancy is established, not a conversion between them, so
no correction is applied here rather than guess one. Use
lib_get_component_details when the part count matters.
Returns:
Dictionary with count and components list. Each
component carries index, name, alias_name, part_count,
description, (only when with_parameters is True) parameters,
and (only when with_designator is True) designator.
``index`` is a stable addressing key (position in library
order). Pass it as ``component_index`` to lib_get_component_details
/ lib_delete_component / lib_rename_component to reach a
component whose ``name`` contains bytes you cannot reproduce
(an embedded double-quote, or a control char from a broken
import), the case where matching by name fails.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| with_designator | No | ||
| with_parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses that the fast path is IO-bound and sub-second, that with_parameters/with_designator load each live symbol and are O(N) in the SchLib document, and that with_designator yields a smaller payload. It also flags that part_count is unreliable with the concrete measured discrepancy behind the claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The cost/benefit framing is front-loaded and each paragraph corresponds to one flag, so the structure is easy to scan. It is longer than strictly necessary, though, and the part_count caveat spends several clauses on AD26 measurement detail before reaching the actionable instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the three flags, their performance trade-offs, the return shape, and the stable index addressing key used by lib_get_component_details/lib_delete_component/lib_rename_component, including the case where name-matching fails. Nothing an agent needs to call this correctly is missing, even though an output schema also exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: library_path falls back to the active library, with_parameters adds the parameter dict (slow), with_designator adds only the default designator string (also slow but cheaper). It goes further by warning that part_count is untrustworthy and must not be read as the details-tool count.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all components in a library') and immediately differentiates itself from lib_get_component_details for single-symbol and part-count use cases. An agent can pick between 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: default fast path for metadata only, with_parameters 'use it when you need the parameters' but prefer lib_get_component_details for a single symbol, with_designator for 'library-wide designator-consistency audits', and lib_get_component_details when part count matters. When-to-use, when-not, and named alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_footprint_primitivesA
Every non-pad primitive of one PcbLib footprint, with where it is.
Tracks, arcs, regions, fills, texts and vias, each with its layer
(the name the library's stack gives it, plus layer_id), in mm
from the footprint's origin: the frame the lib_add_footprint_*
writers take. Pads are in lib_get_pad_geometry. Read-only.
Each primitive is listed once. Altium's own iterator yields one
just added to the footprint on screen twice until that footprint
is shown again; the footprint writers here show it again after
each write, and this read skips a repeat either way.
Args: footprint_name: The footprint name in the library. library_path: Optional .PcbLib path; defaults to the focused library.
Returns: {name, library_path, height_mm, bodies (a count), body_layers (the layer of each body), tracks [{layer, layer_id, x1, y1, x2, y2, width}], arcs [{layer, layer_id, xc, yc, r, start, end, width}], regions and fills [{layer, layer_id, x1, y1, x2, y2, area (regions)}], texts [{text, layer, layer_id, x, y, size, rotation, x1, y1, x2, y2}], vias [{x, y, diameter, hole}]}. A text's box is Altium's cached one and can lag an edit made this session.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares 'Read-only', specifies the coordinate frame (mm from the footprint's origin, matching the lib_add_footprint_* writers), and discloses the Altium iterator duplicate-yield quirk plus the mitigation ('this read skips a repeat either way'). It also flags the text-box staleness caveat, which is exactly the kind of behavioral detail an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and the Args/Returns sections are well organized. The middle paragraph on the Altium iterator quirk is slightly long, and the Returns block partially restates the existing output schema, but both earn their place as behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema is present, the description need not document returns, yet it adds unit/frame semantics the schema cannot convey. Both parameters, the read-only nature, the dedup behavior, and the staleness caveat are all covered, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: footprint_name is 'the footprint name in the library' and library_path is 'Optional .PcbLib path; defaults to the focused library', covering both optionality and default behavior. Format details (e.g., full vs relative path) are not given, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Every non-pad primitive of one PcbLib footprint, with where it is') and enumerates the primitive kinds covered (tracks, arcs, regions, fills, texts, vias). It explicitly excludes pads and redirects to lib_get_pad_geometry, so an agent can distinguish it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for use (reading a footprint's non-pad geometry) and names the alternative for pads (lib_get_pad_geometry). It does not cover when to prefer this over related probes such as lib_probe_footprint, but the primary routing is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_footprintsA
Enumerate every footprint in a PcbLib.
PcbLib counterpart to lib_get_components for SchLibs. Walks
the PCB library with IPCB_Library.LibraryIterator_Create
and returns one entry per footprint with its name and
description.
Args: library_path: Optional .PcbLib path to focus first. Defaults to the focused document.
Returns:
Dict with library_path, count and footprints
(a list of {name, description}).
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "Enumerate" and the return-shape details imply a read-only listing operation, and it discloses that it walks the library via LibraryIterator_Create, but it does not explicitly state read-only safety, permissions, performance, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by useful context and Args/Returns sections. The implementation detail about LibraryIterator_Create and the explicit Returns block are somewhat redundant with the output schema, but the description remains efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read/enumeration tool with an output schema, the description covers the resource type, parameter default, and return shape. It is nearly complete, though without annotations it could do more to explicitly confirm read-only behavior and describe error/permission conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only meaningful source for the single parameter. It explains that library_path is optional, that it is a .PcbLib path to focus first, and that it defaults to the focused document, which adds substantial meaning beyond the schema's type/default fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Enumerate every footprint in a PcbLib." It also explicitly distinguishes itself from the sibling lib_get_components by identifying itself as the PcbLib counterpart for SchLibs, so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context by tying the tool to PcbLib footprint enumeration and naming lib_get_components as the SchLib equivalent. However, it does not explicitly mention when to use alternatives such as lib_search, lib_get_component_details, or lib_get_footprint_primitives, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_installed_librariesA
List the libraries installed in the Altium environment.
The answer to "what libraries does this installation have?", which
no other tool gives: lib_search walks only the SchLibs already
open in the workspace, and design_snapshot_inventory has to be
handed explicit .SchLib paths. This reads the environment's own
list, so it covers .IntLib, .SchLib, .PcbLib, database and query
libraries whether or not anything is open.
INSTALLED IS NOT AVAILABLE. Installed libraries are the ones switched on for this environment; available ones are every library it knows about. This returns the installed list and reports the available total beside it, so a library that is present but not switched on shows up as a gap between the two numbers rather than as an absence.
Args: with_counts: True (default) also reports how many components each library holds. That opens every library to count them, so pass False for a fast listing; the count then comes back as -1, meaning not asked rather than empty.
Returns:
{"libraries": [{"library_path", "file_name", "library_type",
"library_type_ordinal", "component_count"}], "installed_count",
"available_count", "counts_included"}. library_type is one
of integrated / source / datafile / database / none / query /
design_items, or unknown; it reads "unknown" with an ordinal of
-1 when a library is installed but missing from the available
list, which is a real state and not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| with_counts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full burden and does it: it warns that with_counts opens every library (a real performance cost), defines the -1 sentinel as 'not asked rather than empty', and clarifies that 'unknown' type with ordinal -1 is a legitimate state, not an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core answer, then scope, then the installed-vs-available distinction, then args and returns. Slightly long, but nearly every sentence adds decision-relevant information; only the return-dict restatement overlaps the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values needn't be restated, yet the description adds the semantic gloss agents actually need (library_type enum values, unknown fallback). Nothing required to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with one boolean parameter, and the description fully compensates: default value, what it enables, the cost of enabling it, and the exact sentinel returned when disabled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (libraries installed in the Altium environment) and explicitly contrasts itself with lib_search (open SchLibs only) and design_snapshot_inventory (needs explicit paths). An agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the two alternatives and the exact condition that selects this tool ('what libraries does this installation have?'), plus the scope it covers (.IntLib, .SchLib, .PcbLib, database and query libraries regardless of open state).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_pad_geometryA
Full-precision pad geometry of one PcbLib footprint, in mm.
The measurement half of the datasheet land-pattern audit. Unlike the integer-mil dump behind lib_audit_footprint_policies, every dimension here is a float in millimetres (a 0.65 mm pitch loses 10 um to integer-mil rounding, which a tolerance comparison against the datasheet cannot afford). Coordinates are relative to the footprint's own origin.
Args: footprint_name: the footprint name in the library. library_path: optional .PcbLib path; defaults to the focused library.
Returns: {name, description, library_path, pad_count, pads: [{ name, x_mm, y_mm, copper_x_mm, copper_y_mm, w_mm, h_mm, shape, corner_pct, rotation, hole_rotation, hole_mm, hole_w_mm, hole_type, slot_aligned (slots only), plated, layer, paste_expansion_mm, paste_expansion_source, paste_expansion_state, mask_expansion_mm, mask_bottom_expansion_mm, mask_separate, mask_expansion_source, mask_expansion_state}]}. mask_expansion_mm is the TOP side when mask_separate is true and both sides when it is false; mask_bottom_expansion_mm is the stored bottom value, which takes effect once the sides are unlinked even while it is not in use. x_mm/y_mm are the pad's origin; copper_x_mm/copper_y_mm are the centre of its copper, which differs on a custom pad. hole_rotation is relative to the pad, so a slot lines up when the copper's and the hole's long axes agree in the pad's frame, which slot_aligned reports. *_expansion_source is 'manual' when the pad overrides the design rule, 'rule' otherwise (value 0 in that case: the rule's value lives in the design rules, not on the pad); *_expansion_state is the cache's own manual, valid or invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does substantial work: precision rationale (0.65 mm pitch loses 10 um to integer-mil rounding), coordinate frame (relative to the footprint's own origin), and the meaning of expansion source/state values. It never explicitly says the call is read-only and has no side effects, which is the one behavioral gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening is well front-loaded, but a large fraction of the text enumerates the return object's fields, and an output schema already exists, so much of that is duplication. The genuinely additive parts (slot_aligned, expansion source/state, copper vs pad origin) are buried inside the field dump rather than stated up front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with an output schema, this covers purpose, unit, coordinate frame, defaults, and the ambiguous return-field semantics. What is missing is only the read-only/no-side-effect statement, which matters because no annotations are supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: footprint_name is defined as the name in the library, and library_path is defined as an optional .PcbLib path defaulting to the focused library. That resolves the two parameters that the schema leaves as bare typed fields with only titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: full-precision pad geometry of one PcbLib footprint, in mm. It explicitly distinguishes itself from lib_audit_footprint_policies (integer-mil dump) and implicitly from the other footprint readers, so an agent can identify it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"The measurement half of the datasheet land-pattern audit" gives a clear usage context, and the explicit contrast with lib_audit_footprint_policies tells the agent when the alternative is the better pick. It stops short of naming exclusions against the many other pad/footprint readers (lib_get_footprint_primitives, pcb_get_pad_properties, lib_audit_footprint_vs_datasheet), so no explicit when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_pin_listA
Get all pins of a library component.
NAME THE COMPONENT. Without component_name this reads
whatever the SchLib editor currently has selected, so the answer
depends on editor state a caller cannot see, and any tool that
moves the selection between calls changes what this returns.
Passing the name also avoids disturbing the selection, which is
what made exporting one symbol affect the next call.
DATASHEET DISCIPLINE: Pin name + electrical_type from the
symbol can be wrong, especially on libraries that have been
edited by hand or imported from third-party sources. Before
relying on a pin's function for any decision, fetch the
manufacturer datasheet and verify against its pin-description
table. The response carries _datasheet_guidance +
_datasheet_parts.
BIG SYMBOLS SPILL TO A FILE ON PURPOSE. A 699-pin module returns
more than a conversation can hold, and which half survives is
then decided by whichever client happens to be reading. Above
inline_limit pins the full array is written as JSON and the
reply carries pins_path and a summary instead. That is the
better artefact anyway: the file can be diffed against the
datasheet's pin table by script, field by field, without any of
it passing through the conversation.
Args: component_name: library reference of the symbol to read. Empty falls back to the editor's current component. output_path: write the full pin array here as JSON and return the summary. Forces the file path regardless of size. inline_limit: pin count above which the array is written to a file instead of returned inline. 0 always returns inline, which is what you want only for a small symbol.
Returns:
Dictionary with "count", "component" name, and "pins" array.
Each pin has: designator, name, electrical_type, x, y,
orientation, hidden. Plus _datasheet_guidance +
_datasheet_parts.
When spilled: "pins_path" plus "summary" giving pins per
part and the electrical-type distribution, and no "pins".
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| inline_limit | No | ||
| component_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the hidden dependency on editor selection state, the side effect that reading without a name disturbs selection, and the size-dependent spill-to-file behavior with its exact trigger and reply shape. These are non-obvious traits an agent could not get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the most actionable instruction ("NAME THE COMPONENT") and sectioned with caps headers, so it scans well. It is somewhat long and the spill behavior is explained three times (prose section, Args, Returns), with chatty editorializing ("That is the better artefact anyway") that costs space without adding selection-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param read tool with no annotations, the description covers the selection-state hazard, the spill threshold mechanics, the datasheet caveat, and the field list of each pin — more than enough for correct invocation. An output schema exists, so the included return-value detail is bonus rather than a requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents all three parameters with meaning the schema lacks: the empty-string fallback for component_name and its selection-preservation benefit, output_path forcing a file regardless of size, and inline_limit=0 meaning always-inline. This is exactly the gap-filling the dimension rewards.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: "Get all pins of a library component," which is unambiguous about what is returned (pin array for a symbol). It does not name or route against the nearest siblings (lib_get_component_details, obj_explain_pin, lib_add_pins), so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: pass component_name to avoid depending on invisible editor selection, use output_path to force a file, and use inline_limit=0 "only for a small symbol." It also prescribes a downstream verification step (fetch the datasheet before trusting a pin's function). It stops short of explicit when-not-to-use-this-tool vs a sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_vault_componentA
Check one managed (Workspace) component can be placed, without placing it.
Loads the item the way sch_place_vault_components would, reads
its identity, and throws it away again; nothing reaches a sheet.
The kind asked for is tried first, then the others. The library
manager's lookups (library path, lifecycle state, revisions,
placement parameters) are reported alongside, as they come back.
A part number is not looked up here, so bring the Design Item ID.
Args:
design_item_id: The component's Design Item ID.
vault: The Workspace name. Usually left out; see
lib_get_vault_name.
lib_identifier_kind: Altium's TLibIdentifierKind, tried first:
0 Any, 1 NameNoType, 2 NameWithType, 3 FullPath, 4 VaultName
(the default). A managed part Altium placed shows the kind
and identifier that work, through obj_query on
eSchComponent.
Returns:
placeable, loader_callable, lib_identifier_kind (the
kind that loaded, -1 if none), load_probe (kind:result
for each try), the loaded loaded_design_item_id,
vault_guid, item_guid and revision_guid, then
library_path, display_path, lifecycle_state,
has_revisions, revisions, placement_parameters,
note and diag (library manager calls that raised).
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | ||
| design_item_id | Yes | ||
| lib_identifier_kind | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden and does well: it discloses the load-then-discard behavior ('nothing reaches a sheet'), the multi-kind retry order with the default kind, and that library-manager failures are surfaced in diag rather than swallowed. It does not mention permissions, latency of repeated load attempts, or what placeable=false means concretely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then Args and Returns in a clean structure. The prose is a little discursive ('Loads the item ... and throws it away again') and the Returns block largely restates the output schema, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still lists the return keys, which is slightly redundant but helps an agent know that placeable/load_probe/diag are the decision-relevant fields. Combined with full parameter coverage and side-effect disclosure, an agent has what it needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: design_item_id is identified as the required Design Item ID, vault is explained as usually omitted with a pointer to lib_get_vault_name, and lib_identifier_kind is fully enumerated (0 Any through 4 VaultName default) with a tip on discovering the right kind via obj_query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: probe whether one managed Workspace component can be placed, explicitly without placing it. It names the sibling it mimics (sch_place_vault_components) and the one it is not (lib_find_vault_components / lib_get_component_details), so an agent can distinguish it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use it to verify placeability without a sheet mutation, and the note 'A part number is not looked up here, so bring the Design Item ID' steers agents away from a wrong input. It also points to lib_get_vault_name and obj_query for supporting lookups. No explicit when-not-to-use against lib_get_component_details, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_get_vault_nameA
The Workspace name the managed tools would use, read off the design.
Altium writes the Workspace name onto every managed part it
places. This reads it from the active sheet, then from the other
sheets that are already open; it never opens one. A Workspace has
been seen under two names on one design, so a part addressed by
kind 4 (VaultName) is preferred and other_kind says when only
another kind was found.
Returns:
found, vault, other_kind and seen, every
kind:name met, separated by |.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses the sheet-scan order, the guarantee that it will not open documents, the preference for kind 4 (VaultName), and the ambiguous two-name case surfaced via other_kind. It stops short of an explicit read-only/no-side-effect statement, but 'never opens one' covers the main risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded: purpose in the first sentence, mechanism and edge case next, return fields last. The opening line about Altium writing the Workspace name onto every managed part is useful background but slightly expands the preamble beyond what an agent strictly needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema present, the description supplies the mechanism, the ambiguity handling, and the return field names. The return-field explanation is somewhat redundant with the output schema, and explicit routing to vault-related siblings is the one missing piece.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. Nothing in the schema needs explanation and the description introduces no parameter-level ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (read) and a concrete resource (the Workspace/Vault name used by managed parts), and clarifies it is read off the design rather than computed. It is distinguishable from vault-content siblings like lib_find_vault_components, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the read-source mechanism (active sheet first, then other already-open sheets, never opening one), which tells the agent the preconditions. However there is no explicit 'use this when' guidance and no named alternative or exclusion among the many vault-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_inspect_cse_zipA
Identify the library members of a Component Search Engine zip.
Stage 5 of the autonomous flow (library readiness,
reference/autonomy-roadmap.md): a SamacSys / Component Search
Engine download carries the symbol, footprint and 3D model for an
MPN in one zip. This tool reads the archive WITHOUT extracting
anything: which member is the .SchLib, which the .PcbLib, which
the STEP model, the best-effort MPN, and any members attempting
path traversal (suspicious). Inspect first, then stage the
files with lib_extract_cse_zip. Pure Python, no Altium.
Args: zip_path: Absolute path to the downloaded zip.
Returns:
{"ok": True, "mpn", "schlib", "pcblib", "step", "extras", "suspicious"} (member names; None when absent) or
{"ok": False, "reason": "..."} when the file is missing,
not a zip, or contains no .SchLib/.PcbLib.
| Name | Required | Description | Default |
|---|---|---|---|
| zip_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so: it discloses that nothing is extracted, that it runs in pure Python without Altium, that it flags path-traversal members as 'suspicious', and it enumerates the failure conditions (missing file, not a zip, no .SchLib/.PcbLib).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence and the inspect-vs-extract rule before any background. The roadmap/stage-5 prose and the explicit Returns block are somewhat verbose given an output schema exists, but they do not obscure the actionable content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only inspection tool, everything needed to call it correctly is present: input semantics, non-destructive behavior, the follow-up tool, and the success/failure payload shapes. Nothing material is left for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single property is bare, but the description compensates with 'zip_path: Absolute path to the downloaded zip', which adds both format (absolute) and provenance (the downloaded CSE archive). Slight gap: no guidance on relative paths or Windows/Unix path form.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Identify the library members of a Component Search Engine zip') and immediately grounds it in a concrete domain object (SamacSys/CSE download containing .SchLib, .PcbLib, STEP). It is clearly distinguished from the sibling lib_extract_cse_zip, which performs the actual staging step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sequences usage: 'Inspect first, then stage the files with lib_extract_cse_zip.' That names the alternative tool and the condition that selects it, so the agent knows this is the non-destructive pre-check rather than the extraction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_install_libraryA
Register a library with the environment's Available Libraries.
Installs an .IntLib / .SchLib / .PcbLib so its parts resolve by lib-ref across the workspace (the step after authoring a library).
Args: library_path: absolute path to the library file.
Returns: {"installed": bool, "library_path": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the meaningful state change (registration with the environment's Available Libraries, affecting lib-ref resolution across the whole workspace), but says nothing about idempotency if the library is already installed, whether the source file must exist, or permissions/session persistence — relevant for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavior and workspace-wide effect are front-loaded in two short sentences, followed by a clean Args/Returns block. No filler, and the 'after authoring' hint is placed where it is useful rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 values (the included Returns section is mild redundancy). For a one-parameter mutating tool with no annotations, the main missing piece is failure/idempotency behavior when the library is already registered or the path is invalid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate — and it does by specifying the parameter is an absolute path to the library file, plus the accepted library file types. It does not give path examples or clarify relative/UNC handling, so it falls just short of fully documenting the argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (register/install a library into Available Libraries), names the accepted file formats (.IntLib/.SchLib/.PcbLib), and describes the observable effect (parts resolve by lib-ref workspace-wide). That effect plus the 'authoring a library' framing cleanly separates it from siblings like lib_uninstall_library, lib_reload_library and lib_get_installed_libraries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'the step after authoring a library' gives explicit sequencing context, so an agent knows when in the workflow to call it. It stops short of naming alternatives (e.g. when to use lib_reload_library or lib_uninstall_library instead) or stating preconditions, so it is not a full when/when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_kicad_importA
Convert a KiCad .kicad_sym / .kicad_mod into an Altium plan.
Closes the gap that made KiCad-format part sources useless on
the Altium side: this server could export Altium to KiCad but
had no path back, so a hit from a KiCad registry or from the
local KiCad libraries (see part_search) was a dead end.
Parses into the SAME neutral model the EasyEDA importer uses, so the Altium plan is produced by one shared emitter rather than a second copy that would drift from it.
Give symbol_path, footprint_path, or both. Use
symbol_name to pick one symbol out of a multi-symbol library
(the first is used otherwise).
MULTI-PART COMPONENTS: a quad gate or dual op-amp converts in
ONE call to a real Altium multi-part symbol (part_count plus
per-pin owner_part_id), not to N symbols to merge by hand.
Set unit to a positive number to convert only that sub-part
instead. Units are never merged into a flat symbol: they share
coordinates by design, so a merged symbol has every unit's pins
stacked on the same points and still looks converted.
HIDDEN PINS: kept, and kept hidden. A hidden pin is electrically real (this is how symbols carry supply rails and no-connects), so dropping it would lose a pin while showing it would clutter the symbol.
DERIVED SYMBOLS: over half of KiCad's standard entries carry no
geometry of their own and inherit it from a parent. That link is
followed, and warnings says where the geometry came from.
target="altium": returns an ORDERED PLAN of this server's own library tools, exactly like lib_easyeda_import. Nothing is written to Altium; review the plan, then execute the steps.
target="inspect": parse only, return a summary and warnings. Use this first on an unfamiliar library.
DATASHEET DISCIPLINE: a converted footprint is somebody else's
drawing, not a verified land pattern. Audit it against the
manufacturer document with lib_audit_footprint_vs_datasheet
before trusting it.
Returns:
{"ok": ..., "component": {...}, "warnings": [...]} plus
"steps"/"summary" for target="altium".
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| target | No | altium | |
| pcblib_path | No | ||
| schlib_path | No | ||
| symbol_name | No | ||
| symbol_path | No | ||
| model_3d_path | No | ||
| footprint_path | No | ||
| include_body_art | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: nothing is written to Altium (a plan is returned for review), multi-part units are preserved rather than flattened with an explanation of why merging corrupts geometry, hidden pins are retained and kept hidden, and derived symbols are resolved with provenance surfaced in warnings. This is materially more than a restatement of the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the behavioral sections are capitalized headings (MULTI-PART COMPONENTS, HIDDEN PINS, DERIVED SYMBOLS, DATASHEET DISCIPLINE) that make scanning easy. Some of the opening justification ("Closes the gap that made KiCad-format part sources useless...") is narrative context rather than actionable instruction and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still summarizes the response shape including steps/summary per target. The remaining gap is the four undocumented path/boolean parameters on a 9-parameter tool with no schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it explains symbol_path, footprint_path, symbol_name, unit, and both target modes ("altium" = ordered plan, "inspect" = parse-only summary). However pcblib_path, schlib_path, model_3d_path, and include_body_art are never mentioned, leaving four parameters entirely undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource pair ("Convert a KiCad .kicad_sym / .kicad_mod into an Altium plan") and names the exact formats handled. It also distinguishes itself from its closest sibling, noting it reuses the same neutral model and emitter as lib_easyeda_import and that it is the reverse path of lib_export_kicad_symbol/lib_export_kicad_footprint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection rules: "Give ``symbol_path``, ``footprint_path``, or both", use ``symbol_name`` for multi-symbol libraries, and set ``unit`` to narrow to one sub-part. It also recommends target="inspect" first on unfamiliar libraries and routes post-conversion verification to lib_audit_footprint_vs_datasheet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_link_3d_modelA
Link a 3D STEP model to a PcbLib footprint.
Loads the STEP geometry into the footprint as an IPCB_ComponentBody
(the real 3D body that drives the 3D view and the height/placement
DRC), so the active document must be the .PcbLib that contains the
footprint. component_name selects the footprint by name (empty uses
the library's current footprint).
Args:
component_name: Name of the footprint in the active PcbLib
model_path: Path to the 3D model file (.step, .stp); must exist
offset_x: X offset in mils from the FOOTPRINT's origin. The
body is always moved onto that origin first: it arrives
at the board origin, and a footprint open in the editor
sits at Altium's library origin, about 50000,50000 mil,
so an offset of 50000 used to be needed to bring it back.
Do not add that any more.
offset_y: Y offset in mils, applied with offset_x
offset_z: Z offset in mils, sets the body's StandoffHeight.
This is the common adjustment: lifting a connector body
off the board so it sits on its pads rather than through
them.
rotation_x: NOT APPLIED, accepted for signature stability.
Set it in the library editor after linking.
rotation_y: NOT APPLIED, same reason as rotation_x.
rotation_z: NOT APPLIED. This one used to assign
Body.Rotation, and IPCB_ComponentBody has no such
property on AD26 26.9.1.9. MEASURED: it raised
"Undeclared identifier: Rotation", which DelphiScript
cannot catch, so the Try around it never fired and the
resulting modal took the whole polling loop down with
it. Passing a rotation used to cost you the bridge.
The rotation lives on the MODEL, not the body, and has
to be set before the model is attached
(Model.SetState in AutoSTEPplacer.pas). Its four
arguments are undocumented, so they are not guessed at
here. Rotate in the library editor for now.
Returns:
Dict with success, footprint, model,
footprint_origin_mils and moved_to_footprint_origin
(false means the body may sit at the board origin, away
from the footprint), and
applied -- which adjustments were actually written to
the body (standoff_height, rotation_z,
offset_xy). Check it rather than assuming: each
assignment is individually guarded, so one failing does not
fail the call. rotation_z is now ALWAYS false, see
above. standoff_height is confirmed live;
offset_xy is not yet.
A ``false`` means the adjustment did not happen, which
covers both a rejected assignment and an argument left at
its default of 0: the handler skips a zero rather than
writing it. ``offset_xy`` covers ``offset_x`` and
``offset_y`` together and is true if either is non-zero.
| Name | Required | Description | Default |
|---|---|---|---|
| offset_x | No | ||
| offset_y | No | ||
| offset_z | No | ||
| model_path | Yes | ||
| rotation_x | No | ||
| rotation_y | No | ||
| rotation_z | No | ||
| component_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so unusually well: it explains that the STEP geometry becomes an IPCB_ComponentBody, that the body is moved to the footprint origin first, and that offset_z controls StandoffHeight. It explicitly warns that rotation_x, rotation_y, and rotation_z are NOT APPLIED, explains the prior rotation_z failure mode, and documents the 'applied' return dict so callers know which adjustments actually happened.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the Args/Returns structure makes the long description navigable. However, it includes historical detail such as the former 50000 mil offset and the modal failure that 'took the whole polling loop down,' which is useful but more verbose than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation-style library tool with no annotations, the description is complete: it covers preconditions, every parameter, the return dict, and the 'applied' semantics. Although an output schema exists, the extra return-value explanation is valuable because it clarifies which adjustments may silently fail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all 8 parameters, and it does. It documents units and meaning for offset_x, offset_y, and offset_z, explains component_name and model_path, and clearly marks rotation_x, rotation_y, and rotation_z as accepted but not applied. It also notes that offset_x and offset_y together drive the offset_xy applied flag.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource: 'Link a 3D STEP model to a PcbLib footprint.' It also states the active document must be the .PcbLib containing the footprint and that component_name selects the footprint. It does not explicitly distinguish itself from sibling tools such as lib_auto_link_3d_models or pcb_place_3d_body, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear preconditions: the active document must be the .PcbLib, component_name selects the footprint, an empty name uses the current footprint, and model_path must exist. It does not name alternatives or say when to use lib_auto_link_3d_models instead, so the routing guidance is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_link_footprintA
Link a footprint to a schematic component.
With replace=True (the default) any existing footprint (PCBLIB) model on the component is removed first, so re-linking replaces rather than appends. Pass replace=False to keep prior footprint models and add another (the old append behaviour, which bloats a component with duplicate models).
Args: component_name: Name of the schematic component. Resolved by library reference and made current before linking, so the model lands on the symbol you name rather than on whatever was last created. Leave empty to target the current component. footprint_name: Name of the footprint to link footprint_library: NOT APPLIED, accepted only so existing callers keep working. The footprint is bound by NAME via the implementation's datafile link, with a deliberately EMPTY location: passing a .PcbLib path there wedges AD26 (see Lib_LinkFootprint in Library.pas). Install the library and keep footprint names unambiguous instead. replace: remove existing footprint models before adding (default True)
Returns: Dictionary confirming link
| Name | Required | Description | Default |
|---|---|---|---|
| replace | No | ||
| component_name | Yes | ||
| footprint_name | Yes | ||
| footprint_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so well: it discloses that replace=True destroys existing PCBLIB models, that the default is True, that component_name re-resolves the current component (side effect), and that footprint_library is a no-op that can wedge AD26. That is exactly the kind of destructive/side-effect disclosure an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the replace caveat before the Args list, which is the right ordering. Some implementation trivia (Library.pas, AD26 version reference) is longer than strictly necessary, though it justifies the warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations and no schema descriptions needs thorough prose, and it delivers: behaviour, defaults, deprecation, and resolution semantics are all covered. An output schema exists, so the terse 'Dictionary confirming link' return note is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the Args section documents all four parameters, including the subtle empty-string behaviour of component_name and the fact that footprint_library is accepted but ignored. This fully compensates for the absent schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (link a footprint to a schematic component) in the very first sentence, and the replace semantics distinguish it from append-style linking. An agent can tell this apart from siblings like lib_link_3d_model or lib_add_footprint_pad without reading further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance on when to use replace=True vs replace=False and warns against the stale behaviour of passing a .PcbLib path. It stops short of naming a sibling alternative for the append case, but the conditions for each mode are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_move_bodies_to_layerA
Put the 3D bodies of the focused PCB library on one mechanical layer.
Libraries put together from several sources carry their bodies on whatever layer each source used, so one footprint's model shows with a layer turned on and the next one's never does. Every footprint, or only the named ones, has each body moved; a body already on the layer is counted and left alone. Nothing is added or removed.
Args:
layer: The mechanical layer, by number ("Mechanical13") or by
the name the library's stack gives it. Anything else is
refused, as Altium's body dialog only offers mechanical
layers.
footprint_names: Only these footprints. Empty means every
footprint in the library; names no footprint has come
back in not_found.
Does NOT save the library. A mechanical layer the library has not
enabled is accepted, with layer_enabled false and a
warning, since Altium does not draw what is on it.
Returns:
Dict with layer, layer_enabled, footprints,
bodies, moved,
already_on_layer, footprints_without_bodies,
not_found, and items ({name, moved, from} for
each footprint that changed).
| Name | Required | Description | Default |
|---|---|---|---|
| layer | Yes | ||
| footprint_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that nothing is added or removed, that already-correct bodies are counted and skipped (idempotency), that the library is NOT saved, and that an unenabled mechanical layer is accepted with layer_enabled=false and a warning. It even explains why invalid layer values are refused.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the motivating problem, then args and return shape in order. Some prose (e.g. the Altium dialog aside) is more color than necessity, but nothing is genuinely wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet for a mutation tool with no annotations the description still covers the essentials an agent needs: side effects (no save), partial-success semantics (not_found, footprints_without_bodies), and idempotent behavior. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does. It specifies the accepted layer format ("Mechanical13" or the stack-assigned name) and the rejection rule, plus the exact semantics of footprint_names (empty/null means all footprints; unknown names surface in not_found).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource and scope: 'Put the 3D bodies of the focused PCB library on one mechanical layer.' The follow-up sentence explains the concrete problem it solves (bodies scattered across layers from different sources), which no sibling tool (lib_move_footprints, lib_move_components) addresses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear — it exists to fix libraries assembled from multiple sources where 3D bodies land on inconsistent layers — and the footprint_names argument defines the narrow-vs-all scoping. It does not name sibling alternatives (e.g. lib_move_footprints) or state exclusions, so it falls 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.
lib_move_componentsA
Move matching components (symbol + params + models) between SchLibs.
Bulk analog of lib_copy_component: copies every matching component from source_schlib to dest_schlib (Replicate carries the whole symbol, its parameters and its models) in one pass, then removes them from source unless delete_from_source is False. This is the piece that makes a full library split a single call.
Provide either names (explicit LibReferences) or name_regex (matched against the source's component names). With names it is one IPC call; with name_regex the source component list is fetched first to resolve the matches, then the move runs. A component already present in dest is skipped unless overwrite=True.
Args:
source_schlib: source .SchLib path.
dest_schlib: destination .SchLib path.
names: explicit list of component LibReferences to move.
name_regex: regex matched against source component names when names
is not given.
delete_from_source: remove moved components from source (default True).
overwrite: replace a same-named component already in dest.
dry_run: resolve the selection and report it WITHOUT moving
anything. Worth doing whenever name_regex is used: the
pattern is applied with search, not a full match, so
R selects every name containing an R, and the default
is to delete them from the source afterwards.
Returns: {"success": true, "moved": N, "skipped": N, "failed": N}, or in dry-run {"dry_run", "resolved", "count", ...} with nothing sent to the bridge.
A failed copy does not delete: the handler counts it in failed
and moves on, so the source keeps it. What is NOT recoverable is
overwrite=True replacing a different component of the same
name in the destination, which is why dry_run reports both flags.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | ||
| dry_run | No | ||
| overwrite | No | ||
| name_regex | No | ||
| dest_schlib | Yes | ||
| source_schlib | Yes | ||
| delete_from_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses that components are removed from source by default, that failed copies are not deleted, that overwrite=True is irreversible for same-named components, and that dry_run reports resolved selections without moving anything. This is exactly the kind of destructive-operation context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but warranted given 7 undocumented parameters and destructive behavior. It is front-loaded with purpose and selection behavior, though the Returns paragraph is somewhat redundant because an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, 0% schema coverage, and lack of annotations, the description provides complete coverage of selection modes, side effects, error handling, and parameter meanings. An agent has everything needed to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description documents all 7 parameters in an Args section, giving meaning for names, name_regex, delete_from_source, overwrite, dry_run, and both paths. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Move matching components between SchLibs') and immediately distinguishes it from the sibling lib_copy_component by calling it the 'bulk analog'. An agent can tell exactly what this tool does and how it differs from the copy tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly specifies the two selection modes (names or name_regex), gives a concrete warning to use dry_run whenever name_regex is used because matching uses `search` not full match, and explains overwrite/skip semantics. This is clear when-to-use guidance with an explicit alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_move_footprintsA
Move matching footprints between PcbLibs (the PcbLib analog of move).
Copies every matching footprint (all pads and primitives, via a full copy) from source_pcblib to dest_pcblib, then removes them from source unless delete_from_source is False. The footprint counterpart of lib_move_components; together they split a full library.
Provide either names (explicit footprint names) or name_regex (matched against the source's footprint names). With names it is one IPC call; with name_regex the source footprint list is fetched first. A footprint already present in dest is skipped unless overwrite=True.
Args:
source_pcblib: source .PcbLib path.
dest_pcblib: destination .PcbLib path.
names: explicit list of footprint names to move.
name_regex: regex matched against source footprint names when names
is not given.
delete_from_source: remove moved footprints from source (default True).
overwrite: replace a same-named footprint already in dest.
dry_run: resolve the selection and report it WITHOUT moving
anything. Worth doing whenever name_regex is used: the
pattern is applied with search, not a full match, so a
short pattern selects far more than intended, and the
default is to delete them from the source afterwards.
Returns: {"success": true, "moved": N, "skipped": N, "failed": N}, or in dry-run {"dry_run", "resolved", "count", ...} with nothing sent to the bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | ||
| dry_run | No | ||
| overwrite | No | ||
| name_regex | No | ||
| dest_pcblib | Yes | ||
| source_pcblib | Yes | ||
| delete_from_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does it well: it discloses the destructive default (delete_from_source=True), what is copied (all pads and primitives via a full copy), skip/overwrite behavior, the one-call vs. list-fetch cost difference for names vs. regex, and what dry_run suppresses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the sibling relationship, then structured into Args/Returns. Slightly redundant in places (the parenthetical 'via a full copy' and the length of the dry_run rationale), but every section is scannable and earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 7 parameters and a destructive default, the description covers selection precedence, overwrite/skip logic, the dry-run escape hatch, and return shapes for both success and dry-run modes. An agent has everything needed to invoke it safely without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args block documents every one of the 7 parameters with meaning beyond the schema's bare types — defaults, precedence between names and name_regex, matching semantics for the regex, and the effect of each boolean.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (move) and resource (footprints between PcbLibs) with a precise scope note. It explicitly positions itself against lib_move_components and notes the copy-then-delete semantics that distinguish it from lib_copy_footprint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection rules (names OR name_regex, names takes precedence), states that existing dest footprints are skipped unless overwrite=True, and recommends a dry_run specifically when name_regex is used. It also explains why: the pattern is applied with `search` so short patterns over-select and the default deletes them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_normalize_implementationsA
Clean up every component's models in a SchLib for a self-contained package.
Whole-library sweep. Per component it: clears the component-level provenance (SourceLibraryName, TargetFileName); collapses duplicate models, keeping ONE per (model_type, model_name) IN PLACE so the kept model's parameters, MapAsString pin-map, and datafile link are all preserved; re-flags the survivor current if any duplicate was; optionally renames a model's name and its datafile entity via rename_map; and repairs any footprint (PCBLIB) left with no datafile link. It does NOT destroy and rebuild implementations, so nothing on a model is lost.
With source_library set, it also writes that value into the Location of every PCBLIB model's datafile link, turning a name-only library (footprints resolve but do not embed) into an embeddable one in the same pass. Existing Locations are only overwritten when source_library is given; they are never blanked. Get the exact string from a known-good model first (see lib_set_model_source).
Note: it preserves what is present; it cannot resurrect data a prior broken run already dropped. If a library was damaged by an earlier version, restore the backup and run this on it.
If you are also renaming footprint entities, run lib_rename_footprint on the PcbLib first, then pass the same {old: new} as rename_map so symbol and footprint stay matched.
Args: library_path: optional .SchLib path; defaults to the focused lib. rename_map: optional {old_model_name: new_model_name} applied to the kept model's name and matching datafile entity. dedupe_only: skip renames; only collapse duplicates + clear source. source_library: optional; when set, written into every PCBLIB model's datafile Location so footprints embed on compile. use_component_library: optional; sets the embed-vs-search flag on the models whose Location is written.
Returns: {"success": true, "components_touched": N, "duplicates_removed": N, "sources_cleared": N, "links_repaired": N, "sources_set": N}.
| Name | Required | Description | Default |
|---|---|---|---|
| rename_map | No | ||
| dedupe_only | No | ||
| library_path | No | ||
| source_library | No | ||
| use_component_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it explains that duplicates are collapsed in place preserving parameters, pin-map and datafile link, that existing Locations are never blanked, that damage from a prior broken run cannot be undone (restore backup first), and that the operation is non-destructive. These are exactly the side-effect and irreversibility facts an agent needs before mutating a library.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then behavior, caveats, and args in a logical order. It is long and has mild repetition (the non-destructive point is made twice), but nearly every sentence carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive-capable, five-parameter library mutation with no annotations, the description supplies ordering prerequisites, irreversibility warnings, and per-parameter meaning. An output schema exists, so the included Returns block is a bonus rather than a necessity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the Args block explains all five parameters semantically: library_path defaulting to the focused lib, rename_map's {old: new} shape and that it applies to both model name and datafile entity, dedupe_only's effect, source_library's write target, and use_component_library's embed-vs-search role. Types are left to the schema, but the meaning gap is closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('clean up every component's models in a SchLib') plus the goal (self-contained package) and the whole-library scope. It distinguishes itself from model-level siblings like lib_set_model_source and lib_rename_footprint by describing the batch sweep rather than a single edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: set source_library to convert a name-only library into an embeddable one, use dedupe_only when renames aren't wanted, and run lib_rename_footprint on the PcbLib first when renaming footprint entities. It points at lib_set_model_source for obtaining the exact Location string, though it doesn't explicitly contrast against other cleanup siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_probe_designatorA
Diagnostic: dump one footprint's raw designator geometry.
Read-only. Returns the footprint origin and bounding rectangle, the pad
extents, and the .Designator anchor, bounding rectangle, size and
width: all in native TCoord. Use it to establish what
IPCB_Text.BoundingRectangle actually measures before trusting it to
centre anything.
Returns {footprint, fp_x, fp_y, fp_rect, pad_count, pad_rect, desig_anchor, desig_rect, desig_size, desig_width, desig_text}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explicitly declares "Read-only" and enumerates the exact return fields with their units (native TCoord), which is meaningful behavioral disclosure. It does not say what happens if the footprint is not found or how library resolution defaults are chosen, leaving some gap for a tool carrying the full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, followed by read-only status, then the payload, then the return shape. Slight redundancy in re-listing return keys that an output schema already covers, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, repeating the return keys is a bonus rather than a necessity, and the behavioral side is covered. The input side is the gap: for a two-parameter tool with zero schema coverage, the description should say how library_path resolves and what footprint_name must match.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions neither footprint_name nor library_path. The nullable library_path default in particular is left unexplained, so an agent cannot tell which library is searched when it is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "dump one footprint's raw designator geometry," and frames it as a diagnostic probe of designator measurement. An agent can tell this is a read-only geometry inspection, though it never distinguishes itself from close siblings like lib_probe_footprint or lib_get_footprint_primitives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete triggering condition: use it to establish what IPCB_Text.BoundingRectangle actually measures before trusting it to centre anything. That is a clear when-to-use, but there are no exclusions or named alternatives for the general footprint-inspection case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_probe_footprintA
Read-only dump of a PcbLib footprint's name-bearing fields.
Use this to locate where an old name persists after a rename. On a PcbLib footprint, Name and Pattern are the SAME property (renaming Name writes both), and the footprint's only metadata is Name, Description, Height. So a leftover old name lives in a child primitive: this returns every text primitive's object_id and text, plus name/description/ height_mils/primitive_count. Nothing is written.
Args: footprint_name: the footprint name. library_path: optional .PcbLib path; defaults to the focused lib.
Returns: {"success": true, "footprint": "...", "description": "...", "height_mils": N, "primitive_count": N, "texts": [{"object_id": N, "text": "..."}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it explicitly states 'Nothing is written' and 'Read-only', and explains the root-cause model (leftover names live in child primitives) that motivates the call. This is exactly the kind of behavioral context annotations would otherwise supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then motivates it, then lists Args and Returns in a scannable structure. Slightly verbose in the middle explanatory paragraph, but every sentence adds real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema being present, the description still summarizes the return payload (footprint, description, height_mils, primitive_count, texts with object_id/text), so an agent knows whether this tool answers its question. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it documents both parameters, including the non-obvious default that library_path falls back to the focused library. Only the exact format of library_path (whether a directory or .PcbLib file) is slightly ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('read-only dump of a PcbLib footprint's name-bearing fields') and explains the domain nuance that Name and Pattern are the same property, so the agent understands exactly what is returned. Clearly distinguishable from mutation siblings like lib_rename_footprint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to locate where an old name persists after a rename' gives a concrete diagnostic trigger, and the explanation of why metadata fields can't hold the stale name steers the agent here rather than to a rename/audit tool. It does not name a specific alternative sibling, so it falls 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.
lib_redraw_assemblyA
Draw the assembly layer of the focused PCB library again from
each footprint's own geometry: a rectangle round the part and a
.Designator in its middle.
Libraries collected over the years carry the assembly drawing on
the wrong layer, from another package, or not at all. With
replace (the default) each footprint's tracks, arcs, texts,
fills and regions on layer are cleared first; 3D bodies and
pads on that layer are never touched.
Args:
layer: The mechanical layer the assembly drawing goes on.
footprint_names: Only these footprints. Empty means all.
outline_from: What the rectangle goes round. body (the 3D
bodies), pads (their copper, without mask expansion),
courtyard (whatever is drawn on courtyard_layer),
or auto (bodies, then the courtyard when
courtyard_layer is given, then pads). A footprint
with none of them is skipped and named in skipped.
courtyard_layer: The layer the courtyard is drawn on. It
cannot be layer itself with replace, which would
clear the courtyard.
width: Line width. Default 4 mil (0.1 mm).
designator: Place a .Designator text in the middle,
turned upright in a box taller than wide.
text_height: Text height. 0 sizes it to a third of the
box's short side, kept short enough for a four-character
designator to fit along the long side, between 0.2 and
1 mm.
replace: Clear what is on the layer first. With False the new
drawing goes beside what is there.
confirm: Required with replace, since it clears that
layer in every footprint it redraws.
units: "mil" (default) or "mm" for width and
text_height.
The footprint on screen is shown again at the end. Does NOT save
the library. A mechanical layer the library has not enabled is
accepted, with layer_enabled false and a warning, since
Altium does not draw what is on it.
Returns:
Dict with layer, layer_enabled, redrawn,
cleared, skipped,
not_found, and items ({name, outline_from, cleared, width_mm, height_mm} per footprint drawn).
| Name | Required | Description | Default |
|---|---|---|---|
| layer | Yes | ||
| units | No | mil | |
| width | No | ||
| confirm | No | ||
| replace | No | ||
| designator | No | ||
| text_height | No | ||
| outline_from | No | auto | |
| courtyard_layer | No | ||
| footprint_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so: it discloses that 'replace' clears tracks, arcs, texts, fills and regions on the layer, that 3D bodies and pads are never touched, that 'confirm' is mandatory whenever replace is used, that the library is NOT saved, and that a disabled mechanical layer is accepted with layer_enabled false plus a warning. These are exactly the destructive/side-effect details an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads the operation and the rest is organized as a scannable Args block, so it reads well. It runs long, and a few clauses (the text-height sizing formula, the returns field list) restate detail an agent may not need before calling, though none is genuinely wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter destructive library mutation, the description covers preconditions (confirm), irreversible effects (clearing the layer), failure modes (skipped/not_found footprints, disabled layer warning), and post-state (footprint re-shown, library unsaved). The Returns block slightly duplicates the output schema but leaves nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, so the description must compensate entirely, and it does: each of layer, footprint_names, outline_from (with all four enum-like values and the auto fallback order), courtyard_layer (including the replace conflict), width, designator, text_height (default sizing rule and 0.2–1 mm clamp), replace, confirm, and units is explained with defaults and edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb and resource ('Draw the assembly layer of the focused PCB library again') plus the exact output of the operation (a rectangle around the part plus a '.Designator' centered in it). An agent can distinguish this from lib_move_bodies_to_layer or pcb_copy_designators_to_mech 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the problem context that motivates the call ('libraries carry the assembly drawing on the wrong layer, from another package, or not at all'), which tells an agent when to reach for it, and it defines the replace-vs-append behavior. It stops short of naming a sibling alternative or an explicit 'do not use when' condition, so it is clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_reload_libraryA
Close and reopen a PcbLib so Altium rebuilds its caches from disk.
IPCB_Text.BoundingRectangle is populated when the document loads and
is NOT refreshed when a text moves or is resized, not even by
GraphicallyInvalidate. Anything that reads a text's extent after
writing to it therefore gets the OLD box. Reload between a write and the
next read.
SAVE FIRST: this does not save, and closing a dirty document loses the
edits or raises a prompt. lib_fix_designators already does this.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses that the tool closes and reopens the document, rebuilds caches, does not save, and can lose edits or trigger a prompt if the document is dirty. The stale BoundingRectangle explanation also clarifies the underlying side effect driving the need to reload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by a focused explanation of why reload is needed and the critical save warning. The technical detail about IPCB_Text.BoundingRectangle earns its place by justifying the tool's existence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is nearly complete for invocation: it covers the cache-refresh rationale, save caveat, and usage timing, and an output schema exists to cover return values. The main remaining gap is that the required library_path parameter is not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the lone required library_path parameter. It mentions a PcbLib generally but never explains expected path format, whether it must be absolute, or whether the library must already be open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: close and reopen a PcbLib so Altium rebuilds caches from disk. This clearly distinguishes it from sibling tools that create, edit, or inspect libraries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to reload between a text write and the next extent read, warns to save first, and notes that lib_fix_designators already performs this reload. This gives strong when-to-use, when-not-to-use, and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_remove_modelA
Remove models (implementations) from a SchLib component by name.
Removes every implementation whose ModelName equals model_name. With keep_one=True it keeps the first match and removes the rest, which deletes duplicate model links while preserving one. Errors if the component is not found; returns removed=0 if no model matches.
Args: component_name: the component's LibReference. model_name: the ModelName of the model(s) to remove. keep_one: keep the first match and remove the rest (dedup). library_path: optional .SchLib path; defaults to the focused lib.
Returns: {"success": true, "model_name": "...", "removed": N, "kept_one": bool}.
| Name | Required | Description | Default |
|---|---|---|---|
| keep_one | No | ||
| model_name | Yes | ||
| library_path | No | ||
| component_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a solid job: it discloses that ALL matching implementations are removed, what keep_one changes, that a missing component raises an error, and that zero matches yields removed=0 rather than failing. It stops short of stating permissions required, reversibility/undo, or persistence effects, which for a destructive library mutation would be worth having.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then structured Args/Returns sections. Efficient overall, though the Returns block largely restates the existing output schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, no-annotation mutation tool, the description covers action, matching semantics, dedup mode, error behavior, and the result shape. An agent has everything needed to call it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does — all four parameters are explained in the Args block, including that component_name is the LibReference, that model_name matches ModelName exactly, that keep_one is a dedup flag, and that library_path defaults to the focused library. Only minor gaps remain (path format, whether library_path accepts a directory).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove models (implementations) from a SchLib component by name') plus the matching rule (ModelName equality), which lets an agent separate it from siblings like lib_set_model_name or lib_normalize_implementations. It does not name any sibling explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The dedup case is spelled out ('keep_one=True it keeps the first match and removes the rest'), which implies one concrete usage scenario, and the error condition is given. But there is no explicit when-not guidance and no pointer to an alternative tool for related tasks such as renaming or normalizing model links.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_rename_componentA
Rename one symbol's LibReference in a schematic library (.SchLib).
This is the repair path for a component whose current name carries
bytes a caller cannot reproduce (an embedded double-quote, or a
control char left by a broken import). Address it by
component_index from lib_get_components, give it a clean
new_name, and every name-based tool can reach it again.
The component is removed and re-added under the new name so the
library's internal by-name index is rebuilt. Errors with
NAME_EXISTS if a different component already uses new_name.
Marks the library dirty for deferred save.
Args:
new_name: the clean LibReference to write.
component_name: current LibReference of the target. Provide this
or component_index.
library_path: optional absolute .SchLib path; defaults to the
focused library.
component_index: the integer index from lib_get_components,
the name-free way to pick the target. Provide this or
component_name.
Returns: {"success": true, "library_path": "...", "old_name": "...", "new_name": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | Yes | ||
| library_path | No | ||
| component_name | No | ||
| component_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the component is removed and re-added so the by-name index is rebuilt, that NAME_EXISTS is raised on conflict, and that the library is marked dirty for deferred save. Only permissions/auth and concurrency behavior are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then rationale, mechanics, errors, and a structured Args/Returns block. The prose around the repair scenario is slightly long but every sentence adds usable context; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive-ish mutation with no annotations and 0% schema coverage is fully covered: targeting, error mode, side effect, and even an explicit return shape despite an output schema existing. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet all four parameters are documented in the Args block with meaning and defaults: new_name as the value to write, library_path defaulting to the focused library, and the mutually exclusive component_name vs component_index targeting with their source (lib_get_components). This fully compensates for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rename one symbol's LibReference in a schematic library') and immediately distinguishes its role: it is the repair path for names with bytes a caller cannot reproduce. An agent can tell exactly what it does and why it exists relative to name-based siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use it (component name carries embedded quote/control char) and how to target the component (component_index from lib_get_components). It does not mention the sibling lib_batch_rename, which could confuse an agent doing bulk renames, but the single-component scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_rename_footprintA
Rename a footprint in a PCB library (.PcbLib).
Renames the footprint whose name is footprint_name to new_name. Errors if footprint_name is not found or new_name already exists in the library.
MARKS the .PcbLib dirty; it does not write. Call app_save_all to
flush, and check what it reports actually reached disk.
Args: footprint_name: the current footprint name. new_name: the new footprint name. library_path: optional .PcbLib path; defaults to the focused lib.
Returns: {"success": true, "footprint": "...", "new_name": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | Yes | ||
| library_path | No | ||
| footprint_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the failure modes, states that the operation only marks the .PcbLib dirty rather than writing, and directs verification after saving. It omits whether renames propagate to linked footprints/components or what happens if the library is read-only or locked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb+resource, then the mutation semantics, then Args/Returns sections. Every sentence earns its place; the only mild redundancy is restating the return shape when an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no annotations, the definition covers error conditions, side effects, and the save/verify workflow, so an agent can call it correctly. Missing only edge-case behavior (propagation to linked components, locked library) which a caller might want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all three parameters are explained, including the non-obvious default that library_path falls back to the focused library. Only the string format/constraints for library_path are left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource plus scope: 'Rename a footprint in a PCB library (.PcbLib)'. That distinguishes it from lib_rename_component and lib_batch_rename by resource type, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It sets clear preconditions (footprint must exist, new_name must not already exist) and prescribes the follow-up workflow ('Call app_save_all to flush, and check what it reports actually reached disk'). It does not name alternative tools such as lib_batch_rename for multi-rename scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_run_acrossA
Run one library command against several libraries in one call.
Sweeping libraries one at a time costs a round trip and a turn of orchestration per library. This sends the whole sweep as a single request and loops inside Altium.
WHAT THIS DOES NOT SAVE. Opening and saving each library, which is the larger cost and is unavoidable. The saving is the round trips and the waiting between them, which is what makes a twenty library sweep tedious rather than slow.
WHICH ACTIONS WORK. Those that accept a library_path, which is
most of the read and batch-edit commands. The footprint EDITING
commands (create_footprint, add_footprint_pad,
link_3d_model and the rest) act on whichever library is open
and cannot be swept, because focusing the document is the work.
FAILURE IS PER LIBRARY. One library that will not open does not abandon the rest, and the reply reports each library separately rather than as a single flag. "17 of 20 worked" collapses into either a false clean or a false failure the moment it becomes one boolean, and the caller cannot tell which library to fix.
Args:
action: Library command without its namespace, e.g.
"get_components", "batch_rename", "audit_styles".
libraries: Full paths. Passed to Altium separated by "|",
which cannot occur in a Windows path.
params: Parameters shared by every library. Any
library_path here is overridden per library.
timeout: Seconds for the whole sweep, not per library.
Returns:
Dict with results (each: library, success, data, error),
succeeded, failed and libraries.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| params | No | ||
| timeout | No | ||
| libraries | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the loop runs inside Altium, that failure is isolated per library rather than aborting the sweep, and that the reply reports per-library status so partial success is visible. It also bounds the cost model (document open/save is not saved) and clarifies timeout scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core statement, then headed sections that scan well. A few clauses are discursive ("which is what makes a twenty library sweep tedious rather than slow") and the Returns block partly restates the output schema, but no paragraph is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter fan-out tool with no annotations, the description covers eligibility, failure semantics, timeout scope, and the cost tradeoff — everything needed to call it correctly. Return values are also summarized despite an output schema existing, which is redundant but harmless.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for all four parameters: action examples plus the namespace-stripping rule, libraries as full paths with the "|" join detail, params as shared with per-library library_path override, and timeout as whole-sweep rather than per-library. The only shortfall is that action eligibility is described by category rather than enumerable list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource — run one library command against many libraries in a single call — and implicitly contrasts with the many single-library siblings (lib_get_components, lib_batch_rename). An agent can tell immediately that this is a fan-out wrapper rather than another library operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the eligible action class ("those that accept a library_path, which is most of the read and batch-edit commands") and explicitly excludes the footprint EDITING commands with the reason (create_footprint, add_footprint_pad, link_3d_model act on the open document). It also states what the tool does not save, so the agent can judge whether the sweep is worth it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_searchA
Search open SchLib documents and installed database libraries.
OPEN .SchLib FILES AND INSTALLED DATABASE LIBRARIES (DbLib) ARE
SEARCHED. Query libraries (SVN DbLib), integrated libraries
(IntLib), workspace components and installed .SchLib files that
are not open are not, so 0 hits is not "no such part". The reply
says what was searched (libraries_searched, DbLibs included)
and lists every installed library it could not read
(not_searched, with the reason), with a coverage_note when
anything was skipped.
DbLib rows join results after the SchLib matches, with what
is left of limit, each marked source: "dblib" and carrying
its table, key, symbol and footprints; SchLib matches are marked
source: "schlib". Every column of a row is matched, so a
manufacturer part number or a value finds the part. A DbLib that
cannot be connected stays under not_searched with the reason,
and dblib_searches says what each DbLib search covered. Use
lib_dblib_search to restrict to one table or a few columns,
and lib_dblib_get_record for every column of one row.
Case-insensitive substring match. Walks every .SchLib that is
a member of any open project, plus every standalone .SchLib in
the workspace's free-documents area. Each library is read via
CreateLibCompInfoReader so the search is fast even with
many libraries open: it only loads symbols when search_type
is "parameters".
IT READS THE FILE ON DISK, NOT THE EDITOR. A component created
in this session and not yet saved WILL NOT BE FOUND, and the
reply is an ordinary empty result with nothing to say why.
MEASURED: a symbol that lib_get_component_details returned
in full was absent here until a save. Save first, or use
lib_get_component_details / lib_get_pin_list, which read
the live document.
DATASHEET DISCIPLINE: Matches carry _datasheet_guidance.
Before recommending any matched part as a replacement or
answer, fetch its datasheet (WebSearch + WebFetch). Do not
recommend based on symbol metadata alone.
Args:
query: Substring to match against component name / alias /
description (case-insensitive).
search_type: "all" (default, matches name / alias /
description), "name", "description", or
"parameters" (slow, also walks each candidate's
parameter dict via the live symbol).
library_path: Optional path to a single .SchLib, or to a
single .DbLib, to restrict the search to. When omitted,
searches every open .SchLib and every installed DbLib.
limit: Cap on returned matches (default 100), SchLib and
DbLib together.
include_dblibs: also search the installed database libraries
(default True). Their rows are read through the connection
each DbLib declares, every row of every enabled table up to
lib_dblib_search's row bound, so a large database makes the
search slower; False keeps it to open .SchLib files and
lists the DbLibs under not_searched. A library_path
naming a .DbLib searches that one either way.
Returns:
Dict with query, search_type, count, limit,
truncated (True when count == limit, or when a DbLib
search stopped early), and results, a list of {name,
alias_name, description, library_path, part_count, source}
per match (a DbLib row adds table, key_field, symbol_ref,
symbol_library, footprints, matched_field, and its name is
the row's key), plus _datasheet_guidance +
_datasheet_parts; and libraries_searched,
not_searched (each {library_path, library_type, reason}), dblib_searches and coverage_note as
above. Either list is None when it could not be read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| search_type | No | all | |
| library_path | No | ||
| include_dblibs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses that it reads the file on disk rather than the editor, that an unsaved component returns an ordinary empty result with no diagnostic, and cites a measured case. It also discloses performance behavior (DbLib rows read through each declared connection up to lib_dblib_search's row bound, 'a large database makes the search slower') and the coverage-reporting fields libraries_searched / not_searched / coverage_note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded correctly — scope first, caveats before args — and the ALL-CAPS warnings are well placed. But it runs long, and the 'Returns:' block enumerates every field of the response even though has_output_schema is true, duplicating structured data the agent already receives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter search tool with zero annotation and zero schema-description coverage, the description covers search universe, negative space, failure modes, cost tradeoffs, and per-parameter meaning. Nothing an agent needs in order to call it correctly, or to interpret a zero-hit result, is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must compensate and it does: query's match targets, search_type's four literal values including the slow 'parameters' mode, library_path's dual .SchLib/.DbLib meaning, limit as a combined SchLib+DbLib cap defaulting to 100, and include_dblibs' default and cost. This is materially more than the bare titles and defaults in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('Search open SchLib documents and installed database libraries') and the body immediately narrows scope against siblings: 'Use lib_dblib_search to restrict to one table or a few columns, and lib_dblib_get_record for every column of one row.' An agent can distinguish this from lib_get_component_details, lib_dblib_search and lib_get_installed_libraries 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit exclusions ('SVN DbLib, integrated libraries (IntLib), workspace components ... are not [searched], so 0 hits is not "no such part"') and explicit alternatives with the condition that selects them ('Save first, or use lib_get_component_details / lib_get_pin_list, which read the live document'). The include_dblibs=False tradeoff and the library_path-to-a-.DbLib edge case are also spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_component_descriptionC
Set the description field on a library component.
Args: component_name: Name of the component in the active library description: New description text
Returns: Dictionary confirming the description was set
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | ||
| component_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses only that a dictionary confirmation is returned; it does not say whether the existing description is overwritten, whether the write persists to disk, whether permission or an open library is required, or what happens if the component name is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with the action, followed by a compact Args/Returns block. Mild redundancy in restating parameter names, but nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 two parameters are covered. For an unannotated mutation tool, though, the missing side-effect and precondition information leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (only bare titles), so the Args block is doing real work: it clarifies that component_name is resolved against the active library and that description is new text replacing the old value. However, it adds no format, length, or lookup-syntax detail beyond those hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: setting the description field on a library component. It is clearly distinguishable from the many other lib_* mutation tools (rename, delete, copy) by naming the exact field it writes, though it does not explicitly reference those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus lib_batch_set_params or lib_rename_component, and no prerequisites such as whether the component must exist or which library is 'active'. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_current_componentA
Make a named component the editor's current selection in the active SchLib.
Required before bulk-editing a specific component's pins,
rectangle, or parameters via obj_modify / obj_batch_modify
on a SchLib. The asymmetry it fixes: lib_get_component_details
is a read-only fetch and does NOT update the editor's current
component, so subsequent obj_modify on the SchLib's
ePin / eRectangle / eParameter iterators silently hits whatever
component was last UI-selected -- usually NOT the one you just
read.
Use this between switching components: lib_set_current_component("MyIC") modify_objects("ePin", scope="active_doc", filter="Location.X=200", set="Orientation=2") lib_set_current_component("MyOtherPart") modify_objects("ePin", scope="active_doc", filter="Location.X=200", set="Orientation=2")
Args: component_name: Component name (LibRef) in the active SchLib.
Returns:
Dict with success + name, or an error if no SchLib
is active or the component name isn't found in it.
| Name | Required | Description | Default |
|---|---|---|---|
| component_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does most of it: it discloses that the tool mutates editor selection state, why that matters for subsequent obj_modify calls, and the two error conditions (no active SchLib, name not found). It does not address undo/state persistence across document switching, so a small gap remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then motivation, then a worked example, then args/returns — well organized. The prose sentence introducing the example slightly duplicates what the code shows, so it is a touch longer than strictly necessary, but every block is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing (so return values need not be explained), the description still notes the success/name dict and error paths. Purpose, prerequisite ordering, side effects, and argument meaning are all present — an agent could call it correctly on first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: 'component_name: Component name (LibRef) in the active SchLib' establishes that the value is a LibRef string and must resolve within the active document. It stops short of case-sensitivity or naming-convention detail, but the meaning is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Make a named component the editor's current selection in the active SchLib') and explicitly contrasts it with the sibling lib_get_component_details, which is read-only and does not move the editor's selection. An agent can tell exactly what this does and what 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule ('Required before bulk-editing a specific component's pins, rectangle, or parameters via obj_modify / obj_batch_modify on a SchLib') plus the failure mode if skipped (modify hits whatever component was last UI-selected). The four-line code snippet shows the correct interleaving with modify_objects, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_footprint_heightA
Set one footprint's Height directly, up or down.
The sweep can only derive a height from a 3D body, which leaves two cases it cannot serve: a part with no model, and a part whose model is wrong. There was no setter at all before this, so a footprint carrying an absurd height could be read and not corrected.
WHY TOO TALL IS WORSE THAN TOO SHORT. Footprint.Height drives placement-collision DRC. A footprint claiming 50mm when the part is 3mm fails against everything near it and blocks placements that are fine. A too-low height only fails to catch a real collision. The first floods the report and gets the rule switched off; the second is quiet.
ZERO IS ACCEPTED AND IS NOT NEUTRAL. It disables the rule for that footprint rather than relaxing it, so nothing is ever flagged against it however tall the real part is. The reply says so when zero is written.
Args: height_mm: the height in MILLIMETRES, not mils. Must be non-negative. footprint_name: which footprint. Empty uses the library's current component.
Returns:
{name, old_height_mm, new_height_mm, changed, saved, save_note, note}. saved is always false: the library
is modified in memory and left for you to review and save.
| Name | Required | Description | Default |
|---|---|---|---|
| height_mm | Yes | ||
| footprint_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it explains DRC consequences of too-tall vs too-short heights, the non-neutral effect of zero, and that changes are saved only in memory. This is unusually strong disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and every paragraph has a purpose, but the detailed DRC rationale, while useful, is more verbose than strictly necessary for selecting and invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the mutation's side effects, edge cases, units, default component behavior, and return semantics. Even though an output schema exists, the returned fields and the important saved=false behavior are summarized enough for an agent to understand the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: height_mm is explicitly millimetres rather than mils and must be non-negative, while an empty footprint_name is defined as using the library's current component.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: set one footprint's Height directly. It also contrasts this with the sweep-based alternative, making the tool's distinct role clear against relevant siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when this tool is needed: parts with no 3D model or with a wrong model, cases the sweep cannot serve. The alternative behavior of the sweep is described well enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_label_formatsA
Multi-target label-style writer for SchLib symbols.
Applies SEVERAL label target/style ops to SchLib symbols in one IPC round-trip (there is no singular variant). The library is opened once and walked once; every op is applied to each component in turn. Five sequential per-target writes would collapse into one trip plus one library walk -- which is the dominant cost on large libraries (each individual call runs an IPC, a workspace lookup, a doc-focus check and a CompInfoReader walk).
Each op is a dict describing one label target -- no field
has a built-in default, only the ones you supply get written:
{"target": "designator", # required
"font_id": <int>, # optional
"color": <int>, # optional, BGR-packed
"is_hidden": False, # optional
"orientation": <int>, # optional, 0/90/180/270
"justification": <int>} # optionalAt least one style field must be set per op. Targets are
"designator", "comment", or "parameter:<Name>".
Use obj_get_font_id / obj_get_font_spec to resolve the font_id
for {name, size, bold, italic} from the active library's font
table; that keeps the call neutral to any particular library's
style choices.
Args:
ops: List of per-target style ops. Must be non-empty.
Targets may not contain the wire separators ;
or ~~.
component_name: When set, applies only to that one
component. Omit for bulk-walk across the library.
library_path: .SchLib path. Defaults to focused doc.
only_mismatched: When True (default) skip labels
already matching the target style. Applies
globally to every op.
limit: Cap on processed components in bulk mode.
timeout: Per-call bridge poll timeout override.
Returns:
Dict with library_path, scope ("single"|"bulk"),
total, limit, truncated, and an ops array each
with target, modified, already_compliant,
missing_target, failed.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| limit | No | ||
| timeout | No | ||
| library_path | No | ||
| component_name | No | ||
| only_mismatched | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden well: it discloses the one-IPC batch behavior, single library open/walk, per-component application, no implicit field defaults, required non-empty ops, separator restrictions, global only_mismatched behavior, bulk limit, and return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and well structured around purpose, op shape, args, and returns. It is somewhat verbose in the IPC cost explanation and repeats return details despite an output schema being present, but the length is defensible for a complex batch write tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete enough for an agent to call it correctly: the complex op structure is fully documented, scope behavior for single vs bulk mode is covered, mismatch skipping and limits are explained, and an output schema exists for return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it defines the op object fields, required target, allowed target values, optional style fields, BGR-packed color, orientation values, the at-least-one-style-field rule, plus component_name, library_path, only_mismatched, limit, and timeout semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb and resource: a multi-target label-style writer for SchLib symbols. It clearly says several label target/style ops are applied in one call, and notes there is no singular variant, which makes the tool's role distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the intended bulk scenario and recommends using obj_get_font_id / obj_get_font_spec to resolve font_id. However, it does not explicitly compare this tool with nearby alternatives such as lib_audit_styles or lib_batch_set_params, and it gives no explicit 'do not use when' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_mech_layersA
Name, enable and kind the mechanical layers of one library.
WHY THIS EXISTS RATHER THAN THE pcb_* LAYER TOOLS. Those act on whichever board is current, and pointing them at a particular library depends on the focus actually moving. When it does not they operate on the previously focused library while reporting success: a sweep over twenty one libraries returned twenty one identical answers because every call had re-read the same file.
This takes the library by PATH and refuses unless the document that ended up focused is the one asked for. Acting on the wrong library is worse than not acting, because it looks like it worked.
Every change is READ BACK. A layer whose name, enable or kind did not take is reported against that layer rather than folded into an overall pass.
PAIRED KINDS. Any kind ending in Top or Bottom is held by the
layer PAIR rather than by either layer, under a shorter name with
the side dropped, so "Courtyard Top" is stored as the pair kind
"Courtyard". Assigning one therefore needs BOTH sides in the same
call: give the partner kind to another layer in layers and
the two are joined and the pair given the kind. Single kinds such
as "Fab Notes" need no partner.
Pair with lib_run_across to apply the same layer scheme to
many libraries in a single call.
Args:
layers: One dict per layer. Keys: layer (required, e.g.
"Mechanical13"), and any of name, enabled
(bool), kind (e.g. "Courtyard Top"). A layer with
none of the three is reported as nothing asked for.
library_path: The library to edit. Defaults to the focused
document, which is only safe for a single library.
tidy_pairs: Remove layer pairs no kind justifies. Altium
never drops a pair when a kind moves to other layers, so
a library reworked more than once accumulates pairs the
Layer Stack Manager still shows. A pair survives the
tidy only when its two layers carry kinds that are each
other's opposite side. Off by default, because it
REMOVES pairs and a caller renaming one layer should not
have the stack rearranged underneath.
timeout: Seconds.
Returns:
Dict with library, layers (each: layer, changed,
problem), changed, failed, kinds_displaced,
pairs_removed, pairs_tidied and pairs_scanned_to.
| Name | Required | Description | Default |
|---|---|---|---|
| layers | Yes | ||
| timeout | No | ||
| tidy_pairs | No | ||
| library_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does: it refuses unless the focused document matches the requested path, every change is read back and failures are reported per-layer rather than folded into a pass, and tidy_pairs is flagged as REMOVING pairs with a stated default-off rationale. This is unusually rich behavioral disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then rationale, pair semantics, args and returns in a scannable order. It runs long and the 'sweep over twenty one libraries' anecdote could be compressed to a clause, but nearly every sentence carries operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with an undocumented schema and no annotations, the definition covers the hard parts: the PAIRED KINDS rule (both sides must appear in the same call), the verification contract, and the return shape. Nothing an agent needs to call it safely and interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the layers array is an untyped object bag, so the description must compensate -- and it does, enumerating the required 'layer' key plus optional name/enabled/kind, giving an example ('Mechanical13', 'Courtyard Top'), and explaining that a layer with none of the three is reported as nothing asked for. tidy_pairs, library_path and timeout all receive behavioral meaning beyond their bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb triad plus resource and scope: 'Name, enable and kind the mechanical layers of one library.' It then explicitly distinguishes itself from the pcb_* layer tools (pcb_set_mech_layers, pcb_set_mech_layer_kind) that act on the current board, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to prefer this over the pcb_* alternatives and why (focus may not move, causing silent wrong-library edits). It also names the escalation path -- 'Pair with lib_run_across to apply the same layer scheme to many libraries' -- and warns that omitting library_path is 'only safe for a single library.' Explicit when/when-not/alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_model_nameA
Set a model's model_name (footprint reference) on a SchLib symbol.
Rewrites the ModelName of one of the component's implementations. If model_name is given, the model whose current ModelName matches is targeted; otherwise the current (or first) model is used.
Args: component_name: the component's LibReference. new_model_name: the new model_name to write. model_name: optional current model_name to target a specific one. library_path: optional .SchLib path; defaults to the focused lib.
Returns: {"success": true, "component": "...", "new_model_name": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | No | ||
| library_path | No | ||
| component_name | Yes | ||
| new_model_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that this is a rewrite operation, explains targeting behavior, the default focused library, and the success return shape. It does not state required permissions, whether changes are saved automatically, or what happens if no matching model exists, leaving important mutation behavior unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by targeted behavioral notes and an Args/Returns structure. There is some redundancy between the opening sentence and the second sentence, and the Args section partly repeats schema names, but the extra detail is justified by zero schema description coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main operation, all parameters, default library behavior, and return shape, which is adequate for a four-parameter mutation tool with an output schema. Because there are no annotations, the description should more fully carry safety and failure-mode context. Missing prerequisites and save/commit behavior leave it only minimally complete for a mutating library operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define the parameters, and it documents all four. It clarifies component_name as the LibReference, distinguishes new_model_name from the optional current model_name used for targeting, and explains library_path defaulting to the focused library. It could add still more detail, such as expected path format, but it compensates well for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: setting a SchLib symbol model's ModelName / footprint reference. It also identifies the affected object as one of the component's implementations. It does not explicitly distinguish itself from related siblings such as lib_set_model_source or lib_remove_model, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how model_name selects a specific existing model versus falling back to the current or first model. That is useful operational guidance. However, it gives no explicit when-to-use versus alternatives or prerequisites for choosing this tool over model-source or model-removal siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_model_sourceA
Write the datafile-link Location (source library) on a footprint model.
A footprint whose datafile link has an empty Location resolves in the SchLib editor by name but cannot embed into a self-contained compiled library, so the footprint goes missing in the used/compiled output even though the package's own compile reports no error. This writes Location so the model is embeddable. Location is set in place (never through AddDataFileLink with a path, which wedges AD26). Targets PCBLIB models matching model_name, or all PCBLIB models when it is empty.
IMPORTANT: get the exact source_library string from a known-good model that already embeds correctly. Read it via lib_get_component_details, whose models array now shows each model's location and use_component_library. This tool writes exactly what you pass; it does not infer the format.
Args: component_name: the component's LibReference. source_library: the source-library reference written into Location. model_name: optional footprint model name to target one model. use_component_library: optional; sets the embed-vs-search flag. library_path: optional .SchLib path; defaults to the focused lib.
Returns: {"success": true, "component": "...", "source_library": "...", "models_updated": N}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | No | ||
| library_path | No | ||
| component_name | Yes | ||
| source_library | Yes | ||
| use_component_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full load, and it does so well: it discloses the in-place write semantics, the blast radius (all PCBLIB models when model_name is empty), the AD26 wedging hazard, and that the tool writes exactly what is passed without inferring format. It omits failure modes such as a nonexistent component or an unopened library, so it is not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action sentence, then the rationale, the hazard warning, and a structured Args/Returns block. Slightly long, and some of the rationale is repeated in spirit, but nearly every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still states the return shape, and it covers prerequisites, scoping, hazards, and defaults. For a five-parameter mutation tool with no annotations, this leaves an agent nothing essential to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates for every parameter: component_name as the LibReference, source_library as the reference written into Location, model_name as the single-model filter with empty meaning all, use_component_library as the embed-vs-search flag, and library_path defaulting to the focused library.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Write the datafile-link Location (source library) on a footprint model." It also distinguishes itself from the related write path used elsewhere (AddDataFileLink with a path), so an agent can tell it apart from siblings like lib_set_model_name, lib_remove_model, and lib_clear_source_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when: footprints with empty Location resolve by name but cannot embed into a compiled library and silently go missing. Gives an explicit when-not: never use AddDataFileLink with a path (wedges AD26). And routes the agent to lib_get_component_details to obtain a known-good string before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_pad_propertiesA
Change pads that already exist in a PcbLib footprint.
Every pad named pad_name in the footprint is changed, and
only the fields you pass are written, so setting plating leaves
the shape alone. Each pad is read back afterwards and the reply
reports what it holds, not what was asked.
A mask or paste expansion is written with the pad's manual flag
set: without it Altium ignores the value and follows the board's
rule, and a library has no rules. hole_width makes the hole a
slot; hole_rotation is relative to the pad, so a slot lines up
when its long axis matches the copper's in the pad's frame (see
slot_aligned in lib_get_pad_geometry). On a pad with a
per-layer stack only the top size is written, and note says so.
THE MASK HAS TWO SIDES. A pad keeps a top and a bottom solder
mask expansion; with the sides linked the top value serves both,
but the bottom value is still stored and takes effect the moment
the sides are unlinked. So mask_expansion writes both sides
unless mask_bottom_expansion is given too, which writes the
bottom and unlinks the sides. mask_separate links or unlinks
them explicitly. The reply reads back all three.
Args:
footprint_name: The footprint holding the pad.
pad_name: The pad's designator.
library_path: Optional .PcbLib path; defaults to the focused
library.
units: "mil" (default) or "mm", for every length here.
x_size, y_size: Copper size.
shape: "round", "rectangular" or "octagonal".
rotation: Pad rotation in degrees.
hole_size: Hole diameter, 0 for a surface-mount pad.
hole_width: Slot length; makes the hole a slot.
hole_rotation: Slot rotation relative to the pad, in degrees.
plated: Whether the hole is plated.
paste_expansion, mask_expansion: Expansions, set as manual.
mask_expansion is the top side, and the bottom too
unless mask_bottom_expansion is given.
mask_bottom_expansion: The bottom side's mask expansion; the
sides are unlinked.
mask_separate: Link (False) or unlink (True) the two sides.
Returns:
pads_changed, pads_with_a_failed_write, note and
pads, each as read back (position, size, rotation, hole,
slot, plating, expansion states, mask_expansion_mm,
mask_bottom_expansion_mm, mask_separate,
all_writes_ran).
| Name | Required | Description | Default |
|---|---|---|---|
| shape | No | ||
| units | No | mil | |
| plated | No | ||
| x_size | No | ||
| y_size | No | ||
| pad_name | Yes | ||
| rotation | No | ||
| hole_size | No | ||
| hole_width | No | ||
| library_path | No | ||
| hole_rotation | No | ||
| mask_separate | No | ||
| footprint_name | Yes | ||
| mask_expansion | No | ||
| paste_expansion | No | ||
| mask_bottom_expansion | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so extensively: partial writes, read-back semantics, manual mask flags, slot creation, relative slot rotation, per-layer stack behavior, and the linked/unlinked mask-side interaction are all disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but justified by the tool's complexity. It is front-loaded with the core action and structured with Args/Returns, though the mask-side explanation is somewhat dense and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, zero schema description coverage, and no annotations, the description is remarkably complete. It covers behavior, parameter semantics, and even return values, so an agent has everything needed to call the tool correctly despite the output schema's existence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description explains every parameter beyond its name: units default, hole_size=0 for SMD, hole_width slot semantics, hole_rotation relative to the pad, mask_expansion writing both sides unless mask_bottom_expansion is given, and mask_separate link/unlink meaning. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Change pads that already exist in a PcbLib footprint.' The phrase 'already exist' distinguishes it from pad-adding siblings, but it does not explicitly contrast with other pad-editing tools such as pcb_set_pad_properties or lib_add_footprint_pad.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for use: editing existing pads in a library footprint, with only passed fields written. It lacks explicit when-not guidance or named alternatives, so an agent must infer that this is for library footprints rather than board-level pad edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_set_pin_owner_partA
Reassign pins of a multi-part symbol to a sub-part, or to Part Zero.
owner_part_id=0 is Altium's Part Zero: the pin belongs to
the package as a whole instead of to one sub-part. That is the
documented placement for a multi-part component's supply pins.
A sub-part-owned supply pin is redrawn at every instance origin,
and where the gate pitch is only twice the pin length those
copies land on each other and the netlist merges the two rails.
Changes the library only. Placed instances pick it up on the next Update From Libraries, which produces an ECO.
Args: pin_designators: comma-separated pin numbers, e.g. "3,12". owner_part_id: 0 for Part Zero, or 1..part_count. component_name: library reference of the symbol to edit. Empty falls back to the editor's current component.
Returns: Dictionary with "component", "owner_part_id", the "pins_changed" list and its "count".
| Name | Required | Description | Default |
|---|---|---|---|
| owner_part_id | Yes | ||
| component_name | No | ||
| pin_designators | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it states that only the library changes, that placed instances update on the next Update From Libraries, and that this produces an ECO. It does not cover permissions, undo behavior, or invalid pin handling, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and structured with Args and Returns sections, and the technical rationale earns its place. The Returns section partly duplicates the existing output schema, so there is some avoidable redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter library mutation tool with no annotations and poor schema descriptions, the description supplies the missing semantic, usage, and side-effect context. The output schema exists, so return-value completeness is not an issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: pin_designators is documented as comma-separated with an example, owner_part_id is defined as 0 or 1..part_count, and component_name explains the empty-string fallback.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: reassign pins on a multi-part symbol. It clearly distinguishes sub-part assignment from Part Zero assignment, which is the central purpose of the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear condition for using Part Zero: supply pins on multi-part components, and explains the redraw/netlist-merge problem that motivates it. It does not explicitly compare this tool with sibling library-editing tools, so it falls short of full alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_split_pin_functionsA
Split slash-delimited pin names into pin function lists.
For the current library symbol, parses each pin whose name is
PRIMARY/ALT1/ALT2/... into the pin's function list (the alternate-
function popup), leaving PRIMARY as the visible name. Pins without a
/ are unchanged.
Returns: {"pins_processed": N}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It helpfully discloses the transformation: alternate names become a function list, `PRIMARY` remains visible, pins without `/` are untouched, and it returns `pins_processed`. It does not state whether this mutates or persists the library symbol, whether an undo is available, or what happens if no current symbol is selected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by precise behavioral detail and a short return value section. Every sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless library operation, the description covers scope, transformation behavior, edge-case handling, and return shape. The main omission is mutation/persistence behavior, which matters more because no annotations are present, but the core information needed to invoke it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to explain. The schema is empty and schema description coverage is effectively complete, making the baseline of 4 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it splits slash-delimited pin names into pin function lists for the current library symbol. It clearly states what the tool does, but it does not explicitly distinguish this operation from related sibling tools such as lib_get_pin_list or lib_add_pins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the condition that pin names contain `PRIMARY/ALT1/ALT2/...`, and the description notes that pins without `/` are unchanged. However, it gives no explicit when-to-use guidance, no exclusions, and no alternative tools for related pin-editing tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_uninstall_libraryB
Unregister a library from the environment's Available Libraries.
Args: library_path: absolute path to the library file.
Returns: {"uninstalled": bool, "library_path": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only states that the library is unregistered. It does not disclose whether the underlying files are deleted, whether the operation is reversible, what permissions are required, or how it affects open projects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the purpose before the Args/Returns sections. The structured framing is efficient, though the Args section partially duplicates the schema and could be slightly leaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool, the description covers the action, parameter meaning, and return shape. However, without annotations and with an output schema already present, it still omits important preconditions and safety context that an agent would need to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by clarifying that library_path is an 'absolute path to the library file,' which adds meaningful format and target information beyond the bare schema title 'Library Path.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Unregister') and resource ('library from the environment's Available Libraries'), making the action unambiguous. It implicitly distinguishes itself from the sibling lib_install_library by being the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as lib_install_library or lib_reload_library. It also omits preconditions like whether the library must currently be installed, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lib_update_footprint_heights_from_3dA
Sweep the active PCB Library: for every footprint, find the
tallest 3D body and write its OverallHeight to
Footprint.Height.
Footprint.Height is what Altium's placement-collision DRC uses to enforce height-clearance rules (don't place a tall electrolytic under a low overhang; don't sandwich an LCD connector under another PCB in a multi-board stack-up). Libraries shipped from vendors without explicit heights default to 0 which makes the DRC silently no-op -- a real production risk caught only at first-article assembly.
Args:
mode: raise (default) only ever increases a height, so a
hand-set "I know this part is 5mm despite the model
being 3mm" survives. match also LOWERS one to the
model.
Reach for match when heights are too TALL, which raising
cannot fix and which is the more damaging fault: a footprint
claiming 50mm when the part is 3mm fails placement-collision
DRC against everything near it and blocks placements that are
fine, where a too-low height merely fails to catch a real
collision. To correct one footprint, or one with no model at
all, use lib_set_footprint_height.
Safety:
NEITHER MODE WRITES ZERO. A footprint with no 3D body yields no measurement, and writing the 0 that implies would silently disable the very DRC rule this arms. Those come back as
without_modelwith their names.Does NOT save the library; review the
items[]diff and save in Altium.
Returns:
Dict with mode, inspected, updated, lowered,
without_model, without_model_names, and items
({name, old_height_mm, new_height_mm} per footprint).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | raise |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden and does it well: it states that neither mode writes zero and why, that footprints without a model are reported as without_model rather than silently zeroed, and that the library is NOT saved so the items[] diff must be reviewed and saved in Altium. It also explains the DRC consequences of both too-low and too-tall heights, which is exactly the kind of side-effect context annotations would otherwise supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded: purpose first, then domain rationale, then the mode parameter, then safety, then returns. It is long, and the trailing Returns section largely restates what the existing output schema already conveys, so a bit of it does not earn its place; the rest is dense with decision-relevant information and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter library mutation with no annotations, the description covers everything an agent needs: scope, mode semantics, no-op and data-integrity hazards, the save-it-yourself requirement, and how failures surface. Even though an output schema exists, the prose adds the field semantics that make the result interpretable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single mode parameter has zero schema description coverage and no enum, so the schema alone would leave the agent guessing; the description fully compensates by defining 'raise' (only increases, preserving hand-set heights) and 'match' (also lowers to the model), including which default applies. This is meaning the structured data does not provide anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb-and-resource statement plus the exact mechanism: sweep every footprint in the active PCB Library, find the tallest 3D body, write its OverallHeight to Footprint.Height. The scope (whole-library sweep, not one footprint) and the sibling it is not (lib_set_footprint_height) are both named, so an agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the default (raise), the exact condition that selects the alternative mode (heights are too TALL, which raising cannot fix), and routes single-footprint or model-less corrections to lib_set_footprint_height. The rationale for why 'match' exists is spelled out with the failure consequence, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsB
Every component on the open board (reference, value, footprint,
kind), from the active backend (or the one named by backend).
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about read-only semantics, what happens with no board open, ordering, or failure behavior. The 'from the active backend' clause is the only added behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the returned fields and backend selection are packed in efficiently. The nested parentheses make it slightly dense but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 there is only one optional parameter. Still, with zero annotations the definition is thin on behavioral guarantees an agent needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially does by explaining that 'backend' selects a non-default backend versus the active one, but it never says what a backend is or what values are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource ('every component on the open board') and enumerates the returned fields (reference, value, footprint, kind), which pins down what it does. It does not distinguish itself from near-identical siblings such as pcb_get_components or lib_get_components, so an agent cannot tell from the description alone which one applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: pulling the component list from the board's active or named backend. There is no explicit when-to-use, no exclusions and no routing to the many alternative component-listing tools, which is a real gap given the crowded sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_netsB
Every net on the open board with pin count and class (power / ground
/ signal), from the active backend (or the one named by backend).
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the data source (active backend vs. named backend) and the shape of returned data (pin count and class), which implies a non-destructive read. It does not state read-only semantics outright, nor anything about permissions, scope failures, or what happens if no board is open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the resource and scope are front-loaded. It could be tightened slightly, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return formatting need not be explained, and the one input parameter is partially clarified. But for a read tool with no annotations sitting among many net-related siblings, the description is thin on selection guidance and failure conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single `backend` parameter. It does add meaningful semantics: omitting it uses the active backend, supplying it selects a specific one. However, it gives no hint about valid backend identifiers or what happens when the named backend is unavailable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: every net on the open board, enriched with pin count and class, read from the active or a named backend. It is clear what the tool returns, but it never contrasts itself with close siblings such as pcb_get_nets or proj_get_nets, so an agent has no textual basis for choosing between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrasing 'from the active backend (or the one named by backend)', which hints at a cross-backend facade when no backend is given. There is no explicit when-to-use, when-not-to-use, or named alternative, despite several sibling tools returning net lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_batch_createA
Create many schematic objects in ONE IPC round-trip.
PREFER THIS over looping obj_create. Each create costs one
LLM turn when done one at a time; batched it's a single
PreProcess/PostProcess + one save for the whole set.
Args:
operations: List of create dicts, each with:
- scope: "active_doc" (default), only active_doc is
currently honored for creates.
- object_type: Altium type name (e.g. "eNetLabel",
"eJunction", "eNoERC").
- properties: pipe-separated Name=Value list, same
format as obj_create accepts.
- container: "document" (default) or "component" (for
library-symbol contents when a lib is active).
Example, drop 3 net labels in one call: obj_batch_create(operations=[ {"object_type": "eNetLabel", "properties": "Text=VCC|Location.X=100|Location.Y=200"}, {"object_type": "eNetLabel", "properties": "Text=GND|Location.X=100|Location.Y=400"}, {"object_type": "eNetLabel", "properties": "Text=SCK|Location.X=300|Location.Y=200"}, ])
Returns: Dict with created, failed, total counts and indexed failures. Known unsupported properties (IsHidden on anything but pins, parameters, designators and sheet names; Text on a type without it, such as eParameterSet or eWire) reject that item before registration. Its failure includes reason UNSUPPORTED_PROPERTY, property and object_type. Other valid items still run.
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses partial-failure semantics ('Other valid items still run'), per-item rejection with reason/UNSUPPORTED_PROPERTY, and the save model. It omits permissions/preconditions and any batch-size or rate limits, which are the remaining behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the preference directive, then arguments, then an example. The example and the unsupported-property paragraph are long but each carries actionable content; slight trimming would raise this to a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batched mutation over an opaque parameter, the description covers argument shapes, supported object types, failure modes and the fact that an output schema exists ('Dict with created, failed, total counts'). Missing only edge constraints: maximum operations per call and whether a partially failed batch is still saved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema is nearly opaque (array of objects with string additionalProperties), but the description fully compensates by documenting every operation key — scope, object_type, properties format with pipe-separated Name=Value, and container — plus a concrete three-item example. This is more useful than the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource and defining scope: 'Create many schematic objects in ONE IPC round-trip.' It explicitly contrasts with the sibling obj_create ('PREFER THIS over looping obj_create'), so an agent can distinguish batched vs. singleton creation without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule with cost rationale (each individual create costs an LLM turn; batched is one PreProcess/PostProcess and one save). It also scopes usage: 'only active_doc is currently honored for creates,' which tells the agent when a request will not work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_batch_deleteA
Delete matching objects across many scope/type/filter operations.
PREFER THIS over looping obj_delete. Each op is evaluated
in one go, cleaning a mixed set of stale junctions, no-ERCs,
and net labels costs one IPC round-trip instead of N.
Args:
operations: List of delete dicts, each with:
- scope: "active_doc" (default), "project", or
"doc:<absolute_path>".
- object_type: Altium type name (e.g. "eJunction",
"eNoERC", "eWire", or a PCB type such as
"eTrackObject", which deletes from the active board
and takes only scope "active_doc").
- filter: pipe-separated PropName=Value filter
conditions (AND logic), same format as
obj_delete. An EMPTY filter deletes every object
of that type in that scope.
confirm_delete_all: required when any operation has an empty
filter. Same guard obj_delete applies to the single
call, so routing a sweep through the bulk tool does not
get around it.
Example, purge all no-ERCs on a specific sheet and every junction on the project. Both filters are empty, so the confirmation is required: obj_batch_delete(confirm_delete_all=True, operations=[ {"scope": "doc:C:\proj\Power.SchDoc", "object_type": "eNoERC", "filter": ""}, {"scope": "project", "object_type": "eJunction", "filter": ""}, ])
Returns:
Dict with operations_processed, total, total_deleted and
results: one row per operation with its deleted count
and a note saying why it deleted nothing
(unknown_object_type, scope_not_supported, no_objects_matched,
or failed: CODE). Or an error with
operations_processed 0 when a sweep is unconfirmed, in
which case nothing is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes | ||
| confirm_delete_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full load — and it does disclose the critical traits: empty filter deletes every object of that type, confirmation is mandatory for sweeps, an unconfirmed sweep sends nothing and returns `operations_processed` 0, and PCB types are limited to scope 'active_doc'. However, opening sentence says 'cleaning a mixed set of stale junctions' which is fine, but there is nothing about permissions/preconditions, atomicity/partial-failure semantics beyond per-op notes, or whether deletion is undoable. Adding a sentence on partial failure vs. all-or-nothing would bring this up. Score 3 because the key destructive safeguards are stated but operation-level transaction behavior is not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and sibling routing are front-loaded, and the args/example/returns sections are dense rather than padded. The Returns block partially duplicates the output schema, which is the one place that does not fully earn its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk tool with zero annotations and a 0%-covered schema, everything an agent needs is present: the scope vocabulary, type names, filter syntax, the destructive empty-filter case, the confirmation requirement, the example, and the failure responses including the reason codes in `results[].note`. Nothing material is missing for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema itself is nearly opaque (an array of string-valued objects with no declared keys), so the description does the real specification work: it enumerates `scope` values, gives concrete `object_type` names including a PCB-type restriction, explains the pipe-separated AND filter format, the empty-filter semantics, and the `confirm_delete_all` trigger condition. It also includes a worked example. The residual gap is the complete absence of schema-level typing or validation hints, so an agent still relies entirely on prose for shape correctness. Score 3 reflects strong prose compensation but continuing dependence on unstructured text for a fully undocumented parameter tree.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource ('Delete matching objects') plus the dimensions it operates across (scope/type/filter). It immediately distinguishes itself from the sibling `obj_delete` by positioning itself as the bulk counterpart, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative ('PREFER THIS over looping `obj_delete`') and gives the selection condition: mixed multi-object sets cost one IPC round-trip instead of N. It also notes the `confirm_delete_all` guard is the same one the single-call tool applies, so the bulk route is not a bypass — a genuine when-to-use/when-not signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_batch_modifyA
Apply many filter+set operations in ONE IPC round-trip.
PREFER THIS over looping obj_modify whenever you have more
than one change to make, especially when each change targets a
different object (different designator, different pin name,
different sheet). A single obj_batch_modify call touches N objects
in the same Altium transaction; N separate obj_modify calls
cost N LLM round-trips plus N IPC round-trips. The wall-time
difference is typically 10-100x on a multi-item edit.
Use it for: moving multiple pins to specific positions, re-laying component placement, per-sheet title changes, bulk designator rewrites, any workflow where each object gets its own value.
A DESIGNATOR BATCH IS WORTH A NETLIST CHECK AFTERWARDS. There is
no transaction rollback here: if an op fails part way the earlier
ones stay applied, and duplicate designators are not an error
Altium reports. Two parts left sharing D? had their separate
nets MERGED by the netlister, which is silent and survives
File > Revert All (reported on a live project, issue #23).
proj_annotate renumbers a whole project in one operation and
cannot leave duplicates, so prefer it when that is what you
want.
Args: operations: List of operation dicts, each with: - scope: "active_doc" (default), "project", "doc:C:\path\to\file.SchDoc", or "lib_component:NAME" -- a named symbol in the active SchLib. Mixing lib_component scopes across ops edits many library symbols in ONE call, no per-symbol lib_set_current_component round-trip. - object_type: Altium object type (e.g., "ePin", "eParameter", "eSchComponent", "eNetLabel"), or a PCB type such as "eTrackObject", which edits the active board and takes only scope "active_doc" - filter: Pipe-separated filter conditions (e.g., "Designator.Text=U1", "Name=VDD") - set: Pipe-separated property=value assignments (e.g., "Location.X=300|Location.Y=-100|Orientation=2")
Returns:
Dictionary with operations_processed, operations_skipped,
total_matched, and a per-operation results list. Each result
row carries its own matched count plus a note -- an op that
matched nothing reports note="no_objects_matched" instead of
being silently counted as successful.
Example, edit pins across THREE different library symbols in ONE call: obj_batch_modify(operations=[ {"scope": "lib_component:R_0402", "object_type": "ePin", "filter": "Designator=1", "set": "Name=A"}, {"scope": "lib_component:C_0402", "object_type": "ePin", "filter": "Designator=1", "set": "Name=+"}, {"scope": "lib_component:LED_0603", "object_type": "ePin", "filter": "Designator=1", "set": "Name=K"}, ])
Example, reposition 10 pins on a library symbol in ONE call
(vs. 10 separate obj_modify calls, each a full LLM turn):
obj_batch_modify(operations=[
{"scope": "active_doc", "object_type": "ePin",
"filter": "Name=S1",
"set": "Location.X=200|Location.Y=-100|Orientation=2"},
{"scope": "active_doc", "object_type": "ePin",
"filter": "Name=S2",
"set": "Location.X=200|Location.Y=-200|Orientation=2"},
{"scope": "active_doc", "object_type": "ePin",
"filter": "Name=VDD",
"set": "Location.X=800|Location.Y=-100|Orientation=0"},
... # 7 more pins
])
Example, update 4 parameters across every project sheet in ONE call: obj_batch_modify(operations=[ {"scope": "project", "object_type": "eParameter", "filter": "Name=Engineer", "set": "Text=John Smith"}, {"scope": "project", "object_type": "eParameter", "filter": "Name=Revision", "set": "Text=2.0"}, {"scope": "project", "object_type": "eParameter", "filter": "Name=Organization", "set": "Text=Acme Corp"}, {"scope": "project", "object_type": "eParameter", "filter": "Name=CompanyName", "set": "Text=Acme Corp"}, ])
Example, different titles on specific sheets in ONE call: obj_batch_modify(operations=[ {"scope": "doc:C:\path\TopLevel.SchDoc", "object_type": "eParameter", "filter": "Name=Title", "set": "Text=Top Level"}, {"scope": "doc:C:\path\PSU.SchDoc", "object_type": "eParameter", "filter": "Name=Title", "set": "Text=Power Supply"}, ])
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so unusually well: it discloses there is no transaction rollback, that earlier ops stay applied on partial failure, that duplicate designators are not reported as errors, and that the resulting net merge is silent and survives File > Revert All (issue #23). It also explains the per-op note 'no_objects_matched' so an agent can distinguish a no-op from a success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: purpose, then preference, then failure caveats, then args, then returns, then examples. It is lengthy and the four examples overlap considerably (three are all 'one op per target object'), so a sentence or two could be trimmed without loss of information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers scope resolution, object typing, filter/set syntax, failure semantics, and the non-obvious gotcha of silent netlist merges. An output schema exists, yet the description still adds the per-op 'note' behavior, which is genuinely useful beyond the schema. Nothing an agent needs to construct a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single param is a loosely typed array, so the description must compensate — and it does, enumerating every nested key (scope, object_type, filter, set), their allowed values/defaults (active_doc default, project, doc:path, lib_component:NAME), the PCB-type caveat restricting scope to active_doc, and the pipe-separated syntax for filter and set. Four worked examples show the exact nesting an agent must emit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: 'Apply many filter+set operations in ONE IPC round-trip.' It immediately distinguishes itself from the sibling obj_modify, explaining that this tool is the batch form and naming the per-call alternative, so an agent can pick between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'PREFER THIS over looping obj_modify whenever you have more than one change to make,' with the condition spelled out (multiple changes, especially different objects) and the cost rationale (10-100x wall-time). It also names a competing tool for a specific case: 'proj_annotate renumbers a whole project in one operation and cannot leave duplicates, so prefer it when that is what you want.' The 'Use it for:' list further pins down intended workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_clear_highlightsB
Clear all net highlights in the active schematic or PCB document.
Returns: Dictionary confirming highlights were cleared
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden alone. It does disclose that all highlights are removed at once and that a confirmation dictionary is returned, but it omits whether the operation is reversible/undoable, what happens with no active document, and whether it affects only the active view or the document state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and waste-free. The trailing 'Returns:' block is somewhat redundant given an output schema exists, which slightly dilutes it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, single-effect UI tool with an output schema, the description covers purpose and target document adequately. Only the preconditions (active document required, undo behavior) are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; the description correctly does not invent any. Baseline 4 applies for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Clear all net highlights') plus the document scope ('active schematic or PCB document'), so the agent knows exactly what is affected. It implicitly contrasts with the highlight-creation sibling (obj_highlight_net) via 'all', but never names a sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus obj_highlight_net, obj_crossref_net, or obj_deselect_all, and no prerequisites such as requiring an open, active document with existing highlights. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_copyA
Copy matching schematic objects to the clipboard.
Selects objects matching the filter, copies them to the system clipboard, then clears selection.
Args:
object_type: Altium schematic object type (see obj_query)
filter: Pipe-separated property=value conditions (AND logic)
Returns: Dictionary with count of copied objects
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| object_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the non-obvious side effect that selection is cleared after copying and that the result goes to the system clipboard (overwriting prior clipboard contents is implied but not stated). It stops short of covering undo-ability or behavior on an empty match set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavior summary is front-loaded in the first line and the details follow compactly; the Args block is tight. The Returns section is partly redundant since an output schema exists, but it is short and harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with zero annotation coverage and undocumented schema fields, the description covers mechanism, side effects, both parameters, and the return shape. Remaining gaps (clipboard overwrite semantics, behavior with no matches, document prerequisite) are moderate rather than blocking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: object_type is explained as an Altium schematic object type cross-referenced to obj_query, and filter is described as pipe-separated property=value conditions combined with AND logic. It omits any concrete filter syntax example, which would have made the format unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (copy matching schematic objects to the system clipboard) plus a clear three-step sequence: select by filter, copy, clear selection. It does not explicitly distinguish itself from siblings like obj_select, obj_query, or obj_batch_modify, other than a parenthetical pointer to obj_query for object types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the reader can infer you call this when you want a filtered set of objects on the clipboard. There is no explicit guidance on when to choose this over obj_select or obj_batch_modify, no prerequisite (an open schematic document must presumably be active), and no note on what happens when the filter matches nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_countA
Quick count of objects by type, faster than obj_query when you only need the count.
Args:
object_type: Altium object type constant (see obj_query for options)
scope: "active_doc" (default), "project", or
"doc:C:\path\Sheet.SchDoc" for a specific loaded sheet.
filter: Pipe-separated property=value conditions (AND logic)
Returns: Dictionary with "count" (and "sheets_processed" for project scope)
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | active_doc | |
| filter | No | ||
| object_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full load: it declares the exact return keys ("count", plus "sheets_processed" for project scope) and the AND semantics of the filter. It does not mention error behavior, when a sheet fails to load, or performance caveats for project/doc scope beyond the comparative speed claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The decisive sentence is front-loaded, followed by a compact Args/Returns block with no filler. Every line adds information an agent needs; nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return-value explanation is a bonus rather than a requirement, and the parameter and scope behavior are covered. The only meaningful omission is the set of valid object_type constants, which the description pushes to a sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description compensates well: it enumerates scope values with the default and shows a concrete path form ("doc:C:\path\Sheet.SchDoc"), and defines filter as pipe-separated property=value with AND logic. The one gap is object_type, whose allowed constants are deferred to obj_query rather than listed here, forcing a cross-tool lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Quick count of objects by type") and immediately distinguishes itself from the sibling tool obj_query by noting it is faster when only a count is needed. An agent can tell exactly what it gets back 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (obj_query) and the exact condition that should route the agent here: "when you only need the count." It also clarifies the three scope modes and their default, so the agent knows which context to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_createA
Create and place a schematic object.
If you are creating more than one object, use obj_batch_create
instead, one IPC round-trip for the whole set vs one LLM turn
per object.
Args:
object_type: Altium object type constant (see obj_query)
properties: Pipe-separated property=value assignments, e.g.:
"Text=MY_NET|Location.X=100|Location.Y=200"
container: "document" (place on active schematic) or
"component" (add to current library component)
Returns: Dictionary confirming creation
| Name | Required | Description | Default |
|---|---|---|---|
| container | No | document | |
| properties | Yes | ||
| object_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose that placement targets the active schematic document or the current library component, plus the return type. It leaves gaps on side effects an agent may care about — whether the object is selected after creation, undo/checkpoint behavior, or what failure looks like when no active document exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the sibling routing, then an Args block. The one apparently extraneous clause ("one IPC round-trip for the whole set vs one LLM turn per object") is the justification that makes the routing advice credible, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be detailed, and the description still sketches the confirmation. For a creation tool with three params, the main remaining gap is error/precondition behavior (active document requirements, invalid object_type or malformed property string), which an agent would benefit from knowing before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates fully: `object_type` is a constant cross-referenced to `obj_query`, `properties` is documented as pipe-separated key=value with a concrete example ("Text=MY_NET|Location.X=100|Location.Y=200"), and `container` enumerates its two accepted values with meanings. This is genuinely additive over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create and place a schematic object") and immediately distinguishes it from the sibling `obj_batch_create`. An agent can tell from the first sentence that this is the single-object path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion rule: use `obj_batch_create` when creating more than one object, and explains why (round-trip cost vs LLM turns). It also covers the container choice semantics (place on active schematic vs add to current library component), so both the when-to-use and the target selection are answered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_crossref_netA
Compare the schematic vs PCB membership of a named net.
Returns the full pin list the SCHEMATIC assigns to this net alongside the pad list the PCB assigns to the same net, plus the diff in each direction.
USE THIS when:
proj_get_nets/proj_get_connectivityreturns an answer that surprises you or the user (e.g. a net appears to be missing a pin you expect on it, or appears to be disconnected from a component you know is wired).Investigating "board works but schematic says otherwise": a non-empty
pcb_onlylist means the PCB was fabricated from an older schematic revision, or an edit broke the post-ECO merge.Design > Update PCB from Schematicwould rip up those PCB connections.Debugging ECO workflow issues.
Args: net_name: Exact net name as it appears in the schematic (case-sensitive).
Returns:
Dict with:
- net_name
- sch_pin_count, pcb_pin_count
- matched (count of pins present on both sides)
- sch_only_count, pcb_only_count
- in_sync (True only when both sides list the same pins
AND the net exists on at least one side)
- sch_pins[], pcb_pins[], each entry is
"Designator.PinNumber"
- sch_only[], pcb_only[], the diff lists. If
sch_only is non-empty the PCB is missing those
connections. If pcb_only is non-empty the PCB has
stale connections the current schematic doesn't have.
| Name | Required | Description | Default |
|---|---|---|---|
| net_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the tool reads both domains, that a non-empty pcb_only implies the PCB came from an older revision, and warns that Design > Update PCB from Schematic would rip up those connections. It stops short of stating whether the tool is strictly read-only or whether it requires a recompile/fresh ECO data first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then usage, then args, then returns — a clean and readable structure. The Args section restates the single parameter and the Returns block partly re-enumerates fields the output schema already declares, so a small amount of text is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter diagnostic tool with an output schema present, everything an agent needs is covered: what it compares, when to reach for it, how to interpret in_sync and the diff lists. Return-value shape is already carried by the output schema, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: 'Exact net name as it appears in the schematic (case-sensitive)' adds the two constraints (exactness, case sensitivity) that the bare 'Net Name' string schema lacks. No further argument detail is needed for a single-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb (compare) and a specific resource (schematic vs PCB membership of a named net), which no sibling tool duplicates. It immediately distinguishes itself from net-listing tools like pcb_get_nets and proj_get_nets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'USE THIS when' block names the triggering condition (a surprising answer from proj_get_nets / proj_get_connectivity) and two concrete diagnostic scenarios. It also supplies the interpretation rule (non-empty pcb_only => stale PCB), so the agent knows not just when to call but how to read the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_deleteA
Find and delete schematic or PCB objects.
For several scope/type/filter sets at once, use obj_batch_delete
, one IPC round-trip vs one LLM turn per delete.
A PCB type (eTrackObject, eViaObject, ...) deletes from the active
board, and matches a footprint's own primitives and a polygon's
hatching too unless the filter says "InComponent=false" and
"InPolygon=false". To take up routing, pcb_unroute does that
with the right exclusions built in.
Args:
object_type: Altium object type constant (see obj_query)
scope: "active_doc", "project", "doc:PATH", or
"lib_component:NAME" (a named symbol in the active SchLib).
A PCB type takes only "active_doc".
filter: Pipe-separated property=value conditions (AND logic).
WARNING: empty filter deletes ALL objects of the type.
confirm_delete_all: Must be True to delete all objects when filter is empty.
A filter that is not Name=Value pairs (an Altium query expression
such as OnLayer('TopLayer') Or ..., or a bare name) is refused,
and nothing is deleted.
Returns: Dictionary with "matched" count (number deleted)
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | active_doc | |
| filter | No | ||
| object_type | Yes | ||
| confirm_delete_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description carries the full burden well: it warns that an empty filter deletes ALL objects of the type, that confirm_delete_all must be True in that case, that PCB types also match footprint primitives and polygon hatching, and that a non-Name=Value filter is refused with nothing deleted. That is exactly the destructive-behaviour and safety-gate context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and information-dense, but the empty-filter danger is stated twice (prose warning plus the confirm_delete_all arg note) and the invalid-filter refusal appears both in the Args block and again as a standalone paragraph. Slight duplication and stray leading indentation cost it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, unannotated tool the description covers scope rules, filtering syntax, refusal cases, and the bulk-delete confirmation gate; return values are already covered by the output schema. It only omits whether a deletion is undoable or should be preceded by app_checkpoint, which matters for an irreversible mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the Args section documents all four parameters: object_type as an Altium constant (pointing to obj_query), scope with its four literal forms, filter as pipe-separated property=value AND conditions with a warning, and confirm_delete_all as the guard for empty-filter deletion. This fully compensates for the empty schema metadata.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Find and delete schematic or PCB objects") and immediately differentiates itself from two siblings: obj_batch_delete for bulk scope/type/filter sets and pcb_unroute for routing. An agent can pick this tool versus neighbours 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use obj_batch_delete for several scope/type/filter sets at once (noting the round-trip cost), and use pcb_unroute to remove routing because it applies the right InComponent/InPolygon exclusions. It also states scope constraints (a PCB type takes only "active_doc"), which further narrows when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_deselect_allA
Clear all object selection on the active document.
Returns: Dictionary confirming deselection
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden. It does disclose the scope ('active document') and that a confirmation dictionary is returned, which tells the agent the call is non-destructive to document data. However it does not state whether the operation is editor-specific (schematic vs PCB), whether it can fail, or whether it affects any persistent state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and only two short lines. The 'Returns:' sentence is largely redundant given an output schema exists, but it is a minor cost, not clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, output-schema-backed utility, the description covers the essential facts: what it clears, on which document, and that it returns confirmation. Only the editor-scope nuance and the no-op edge case are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline applies. The description correctly implies no input is needed — the operation targets the active document implicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource+scope: 'Clear all object selection on the active document'. An agent immediately knows this is a bulk selection reset rather than a data mutation. It misses a chance to contrast with the sibling obj_select (the natural inverse), so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent can infer you call this when a clean selection state is needed before a batch operation. There is no explicit when-to-use, no mention of obj_select/obj_clear_highlights, and no statement about what happens if nothing is selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_explain_pinA
Explain WHY a schematic pin is on the net it is on.
proj_get_nets gives the verdict but never the evidence, so a
surprising net assignment can only be debugged by reconstructing
Altium's connectivity by hand from raw geometry. This returns the
evidence directly.
Reports the pin's ROOT (Pin.Location, body side) and its
CONNECTION point (Location + PinLength along Orientation),
then lists every schematic object sitting on each point.
Reading the result:
at_connectionis what actually drives the pin's net. Two net labels with differenttextthere is a short between two named nets, and the usual symptom is one of them reporting zero pins.at_rootis electrically INERT. A net label there is the classic "sheet looks wired but the pin floats on an auto-net" bug.An empty
at_connectionwith a populatedat_rootmeans the label must move bypin_length_milsalong the pin's orientation; the target is given asconnect_x_mils/connect_y_mils.
Hits are filtered by the object's Location (or a pin's electrical
end, or a wire vertex), not by bounding box. Altium's
AddFilter_Area matches text boxes, which extend hundreds of
mils from a net label; without the Location check this tool
reports labels that are merely nearby.
Args: designator: Component designator, e.g. "U10". pin: Pin NUMBER (not pin name), e.g. "5".
Returns:
Dict with {designator, pin, pin_name, sheet, orientation, pin_length_mils, root_x_mils, root_y_mils, connect_x_mils, connect_y_mils, compiled_net, at_connection[], at_root[]}.
Each object entry carries {kind, text, x_mils, y_mils}
where kind is one of net_label, power_object, port, wire,
junction, pin, other. compiled_net is the pin's net from
the compiled netlist, so geometry and compile can be compared
in one response.
| Name | Required | Description | Default |
|---|---|---|---|
| pin | Yes | ||
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does so: it discloses the Location-vs-bounding-box filtering rationale, explains that AddFilter_Area over-matches text boxes, and interprets the at_connection vs at_root split (inert root, short between two named nets, empty-connection diagnosis). This is exactly the kind of non-obvious behavioral context annotations could not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then structured into reading guide, filtering caveat, Args and Returns. The Returns block duplicates the output schema and is the one section that does not fully earn its space, but the surrounding interpretation content justifies the overall length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool with two string params and an output schema, nothing an agent needs is missing: it knows what is returned, how to interpret each array, why nearby-but-not-on-point labels are excluded, and how the root and connection points are computed from PinLength and Orientation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: it defines designator as a component designator with example "U10", and critically disambiguates pin as the pin NUMBER, not the pin name, with example "5". That is the single highest-risk parameter confusion for this tool and it is called out explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: explain WHY a schematic pin sits on its net, returning geometric evidence. It explicitly distinguishes itself from the sibling proj_get_nets ("gives the verdict but never the evidence"), so an agent can route between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the triggering situation (a surprising net assignment that can only otherwise be debugged by reconstructing Altium connectivity by hand) and names the alternative (proj_get_nets) with the reason it falls short. The usage decision is fully determined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_get_document_infoA
Get comprehensive info about the active document.
For schematics: file path, kind, sheet size, title block visibility, snap grid, visible grid, unit system, and custom dimensions. For PCB: file path, kind, origin, snap grid.
Returns: Dictionary with document properties
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It clearly indicates a read-style information query and distinguishes schematic versus PCB contents, but it does not discuss side effects, permissions, failure cases, or pagination. For a simple zero-parameter info tool that is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core purpose and then lists type-specific details compactly. The final returns note is slightly redundant given the output schema, but overall it is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter document-info tool, the description is largely complete: it names the active document, says the response depends on schematic versus PCB, and lists representative fields. With an output schema present, return-value detail need not be fully restated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to explain. The schema is empty and schema coverage is 100%, making the baseline appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: getting comprehensive info about the active document. It further clarifies the purpose by listing schematic and PCB fields, so an agent can tell what it does. It does not explicitly distinguish itself from related sibling tools such as app_get_active_document or proj_get_board_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is useful by saying it returns comprehensive info about the active document, and it notes the result differs for schematics versus PCBs. However, it gives no explicit when-to-use guidance, prerequisites, or alternatives to consider.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_get_font_idA
Get or create a font ID for the given font properties.
Looks up (or creates) an entry in the Altium font table matching the
specified properties and returns its font ID. Use the returned font_id
to set an object's FontId property via obj_modify.
Args: size: Font size in points (e.g., 8, 10, 12) font_name: Font family name (default "Arial") bold: Whether the font is bold italic: Whether the font is italic rotation: Text rotation in degrees (0, 90, 180, 270) underline: Whether the font is underlined strikeout: Whether the font has strikeout
Returns: Dictionary with font_id
| Name | Required | Description | Default |
|---|---|---|---|
| bold | No | ||
| size | Yes | ||
| italic | No | ||
| rotation | No | ||
| font_name | No | Arial | |
| strikeout | No | ||
| underline | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool may create a font-table entry, which is an important side effect. However, it does not state idempotency, persistence, document-state requirements, or whether creation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then structured into Args and Returns sections. Every sentence adds useful information, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations, the description covers purpose, all parameters, return shape, and a key downstream usage. The output schema exists, so return values need not be exhaustively explained. It still lacks guidance on prerequisites or sibling selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It documents all seven parameters with meaning: size in points, font family default, bold/italic/underline/strikeout flags, and rotation in degrees with listed values (0, 90, 180, 270).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get or create a font ID for given font properties. It explains that this looks up or creates an entry in the Altium font table. It does not explicitly distinguish this from the sibling obj_get_font_spec, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: use the returned font_id to set an object's FontId via obj_modify. This tells the agent when the tool is needed in a workflow. It does not name exclusions or compare against alternatives such as obj_get_font_spec.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_get_font_specA
Get font properties for a given font ID.
Reads the Altium font table to retrieve the full font specification (size, name, bold, italic, etc.) for a font ID obtained from an object's FontId property.
Args: font_id: Font ID from an object's FontId property
Returns: Dictionary with font_id, size, rotation, bold, italic, underline, strikeout, font_name
| Name | Required | Description | Default |
|---|---|---|---|
| font_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: 'Reads the Altium font table' discloses that this is a passive lookup with no mutation. It does not state behavior for an invalid or out-of-range font_id (error vs. empty result), which is the main remaining gap for a lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, and the Args/Returns blocks are conventional and skimmable. The explicit Returns list largely duplicates the existing output schema, which is mild redundancy but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single-parameter tool with an output schema, the definition covers purpose, parameter provenance, and return shape. The only missing piece is failure behavior for an unrecognized font ID; everything else an agent needs to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (only a type/title), so the description must compensate, and it does: it explains that font_id is an integer-style ID sourced from an object's FontId property, which is more useful than a bare type. It does not give range or validity constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get font properties for a given font ID') and additionally names the backing source ('Reads the Altium font table'). This clearly distinguishes it from the inverse sibling obj_get_font_id, which produces the ID rather than consuming it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the workflow precondition: the font_id comes 'from an object's FontId property', implicitly pointing at obj_get_font_id. It lacks explicit when-not guidance or error conditions, but the context for calling it is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_highlight_netA
Highlight a net by name in the focused schematic or PCB document.
PCB path sets IPCB_Net.IsHighlighted on the matched net (the documented property). Schematic path walks net labels / power ports / ports / sheet entries on the active sheet and marks those whose name matches as Selection=True, the closest thing Altium exposes to a "highlight" on schematic without interactive commands.
If a schematic is the focused document, this paints the
schematic even when a PcbDoc is also open. Pass
context="pcb" or context="schematic" to force one side.
The previous behaviour always preferred the PCB whenever any
board was loaded, which made a schematic Find-Net look like it
did nothing.
Args:
net_name: Exact net name to highlight (e.g., "VCC", "GND",
"NET_D0"). Returns NOT_FOUND if the net doesn't exist
on the PCB, or highlighted=0 on schematic if no
primitive carries that net name on the active sheet
(check other sheets).
clear_existing: Clear existing highlights first (default True).
context: Empty (default, follow the focused document),
"schematic", or "pcb".
Returns:
Dict with success, net, context ("pcb" or "schematic"), and
highlighted (count of matches, 1 for PCB, N for sch).
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| net_name | Yes | ||
| clear_existing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it states the exact PCB property set (IPCB_Net.IsHighlighted), the schematic fallback behavior of marking Selection=True on matching labels/ports/sheet entries, and the limitation that schematic matching only covers the active sheet. It also discloses the previous bug-like behavior and the new context override.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then structured into behavior, Args, and Returns. It is somewhat verbose for a three-parameter tool, but the detail is relevant and mostly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, an output schema, and a dual-context operation, the description provides everything needed: selection behavior, return values, context forcing, matching limitations, and failure signals. An agent can invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters, and it does: net_name is exact and returns NOT_FOUND if absent, clear_existing defaults to true, and context accepts empty, "schematic", or "pcb" with clear semantics. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: highlight a net by name in the focused schematic or PCB document. It clearly scopes behavior across the two document types and explains the context selection, letting an agent distinguish this from clearing or selecting objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the default context behavior, how to force PCB or schematic with context="pcb"/"schematic", and why the previous PCB-preferring behavior was problematic. It does not explicitly compare against sibling tools such as obj_clear_highlights, though clear_existing covers the clearing use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_modifyA
Apply ONE set of property values to every object matching ONE filter.
IMPORTANT, if every target object needs a DIFFERENT value (move 10
pins to 10 different positions, rename 5 nets to 5 different names,
set distinct designators per component), use obj_batch_modify instead.
Each call to this tool is a full LLM round-trip; doing that in a
loop is the single biggest wall-time cost in the server. One
obj_batch_modify with a list of operations does the same work in one
turn.
Use this tool when the SAME set string applies to every match (e.g., "set every 10k resistor's Tolerance to 1%").
Args:
object_type: Altium object type constant (see obj_query)
set: Pipe-separated property=value assignments to apply, e.g.:
"Text=NEW_NAME", set Text property
"Location.X=100|Location.Y=200", set multiple properties
"Height=31.5|StrokeWidth=3.94", a board text's size
(lengths on a board are decimal mils; a value that is
not a number is reported failed, never written as 0)
scope: Document scope:
"active_doc", current sheet only (default)
"project", all SCH sheets in focused project
"doc:C:\path\to\Sheet.SchDoc", specific sheet by path (no focus change)
"lib_component:NAME", a named symbol in the active SchLib
-- selects that component first, so there is no need
for a separate lib_set_current_component call
filter: Pipe-separated property=value conditions (AND logic)
Returns: Dictionary with "matched" count and "sheets_processed"
Example - rename a net across all sheets (one value fits all matches): obj_modify( object_type="eNetLabel", scope="project", filter="Text=OLD_NET", set="Text=NEW_NET" ) Example - modify a specific sheet without switching: obj_modify( object_type="eParameter", scope="doc:C:\path\MODULE_A.SchDoc", filter="Name=Title", set="Text=Module A" ) Example - edit a pin inside one SchLib symbol (no lib_set_current_component): obj_modify( object_type="ePin", scope="lib_component:R_0402", filter="Designator=1", set="Name=A" )
| Name | Required | Description | Default |
|---|---|---|---|
| set | Yes | ||
| scope | No | active_doc | |
| filter | No | ||
| object_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries a lot of the behavioral burden: it explains scope side effects, filter AND logic, non-numeric value failure behavior, and that `lib_component` scope selects the component first. It does not fully state undo, save, or permission implications for a mutation tool, so it falls short of complete behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior and sibling alternative are front-loaded, followed by compact Args, Returns, and examples. The length is justified by four undocumented parameters and multiple scope modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, alternative routing, parameter semantics, scope behavior, error handling, and examples. An output schema exists, so the additional return note is sufficient rather than necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it defines `object_type`, `set` syntax with examples, all `scope` values and defaults, and `filter` syntax with AND semantics. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: apply one set of property values to every object matching one filter. It explicitly distinguishes this tool from `obj_batch_modify`, so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use and when-not-to-use guidance, naming `obj_batch_modify` for cases where each object needs a different value. It also explains the key selection criterion: use this when the same `set` string applies to every match.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_queryA
Query schematic OR PCB objects and read their properties.
Iterates objects of the given type, optionally filtering by property values, and returns the requested properties for each matching object.
Args: object_type: Altium object type constant. Schematic: "eNetLabel", "ePort", "ePowerObject", "eSchComponent", "eWire", "eBus", "eBusEntry", "eParameter", "ePin", "eLabel", "eLine", "eRectangle", "eSheetSymbol", "eSheetEntry", "eNoERC", "eJunction" PCB: "eTrackObject", "ePadObject", "eViaObject", "eComponentObject", "eArcObject", "eFillObject", "eTextObject", "eRuleObject", "eDimensionObject", "eConnectionObject" (the ratsnest: one line per unrouted connection, with X1, Y1, X2, Y2, Layer1, Layer2 and Net) properties: Comma-separated property names to return.
SCHEMATIC objects use the dotted spelling:
"Text,Location.X,Location.Y" for net labels
"Designator,Name,ConnectionX,ConnectionY" for pins.
ConnectionX/ConnectionY are the pin's ELECTRICAL end --
the point a wire or net label must sit on to attach.
Location is the BODY-side root and is NOT the connection
point; deriving the end by hand from Orientation and
PinLength is a common source of wrong conclusions about
what is wired.
"Designator.Text,Comment.Text,LibReference" for components
A managed (Workspace) component also reads, but does not
write, "LibIdentifierKind,LibraryIdentifier,DesignItemId,
VaultGUID,ItemGUID,RevisionGUID,SymbolReference,
SymbolVaultGUID,SymbolItemGUID,SymbolRevisionGUID". Read
off a part Altium placed, they are the values the managed
tools need.
PCB PRIMITIVES DO NOT. They are a separate, flat set,
and mixing the two is the single commonest mistake here:
a caller who used Designator.Text infers a dotted rule,
writes Net.Name on a track, and gets an error naming the
right spelling. Net is the one that catches people, and
it is plain "Net":
"Net,Layer,Width" for tracks
"Net,Layer,HoleSize,Size" for vias
"Designator,Comment,Pattern,Rotation,X,Y" for components
"Text,Height,StrokeWidth,IsDesignator" for texts
Full set: ObjectId, X, Y, Layer, Descriptor, Selected,
Net, X1, Y1, X2, Y2, Width, Radius, StartAngle,
EndAngle, XCenter, YCenter, HoleSize, Size, TopShape,
TopXSize, TopYSize, Rotation, Name, Text, Pattern,
Designator, Comment, SourceDesignator, Kind,
RemoveDead, RemoveNarrowNecks, RemoveIslandsByArea,
StandoffHeight, OverallHeight, BodyOpacity3D, InComponent, Component,
InPolygon, IsKeepout, Locked, Layer1, Layer2,
IsRedundant, Mode, Height, StrokeWidth, IsDesignator,
IsComment, UseTTFonts.
On a text, Height and StrokeWidth are writable in mils
(Altium's own names, Size and Width, answer the same).
On a via, Size and HoleSize are writable; a write that
would leave the hole as large as the pad is refused, so
give Size first to grow a via and HoleSize first to
shrink it. Lengths read back in decimal mils.
On a pad, Name and Designator both read and write its
designator; an empty one is refused.
On a 3D body, BodyOpacity3D reads and
writes 0 (clear) to 1 (solid), not a percentage.
IsDesignator and IsComment pick out component labels:
filter "IsDesignator=true" for every designator.
A board type walks EVERY primitive of that type, a
footprint's own tracks and a hatched polygon's tracks
with the routing, on the same copper layers. Filter
"InComponent=false|InPolygon=false" keeps to free copper;
Component is the owning footprint's designator.
An unrecognised PCB property is REFUSED and the reply
lists the valid ones. It used to come back empty, which
is indistinguishable from a property that is genuinely
blank, and that ambiguity has three times been read as
"the bridge cannot see this data".
A track on a mechanical layer really does have no net,
so filter to copper before concluding anything from an
empty Net: filter="Layer=TopLayer".
scope: Document scope:
"active_doc", current sheet only (default)
"project", all SCH sheets in focused project
"doc:C:\path\to\Sheet.SchDoc", specific sheet by path (no focus change)
"project:C:\path\to\Project.PrjPcb", specific project by path
"lib_component:NAME", a named symbol in the active SchLib
"lib_component:NAME@3", part 3 of a MULTI-PART symbol.
A SchLib iterator yields one part at a time, so
without the suffix only part 1 is visible and a pin
on part 3 reports matched:0. Query each part in
turn to cover the whole component. The suffix is
read from the RIGHT, so a LibRef containing '@'
still works.
Ask for the `OwnerPartId` property to see which
part a returned primitive belongs to (0 means
shared across every part).
filter: Pipe-separated property=value conditions (AND logic), e.g.:
"Text=VCC", match net labels with Text equal to VCC
"Designator.Text=R1", match component with designator R1
"" (empty), match all objects of the type
On a PCB type a length (X, Y, X1, Y1, X2, Y2, Width, Size,
HoleSize, ...) matches as a number in mils, to 0.00005
mil, with '.' or ',' as the decimal point:
"X2=3172.6356" and "X2=3172,63560" are the same filter.
limit: Maximum number of objects to return (0 = unlimited)Returns: Dictionary with "objects" array and "count"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | active_doc | |
| filter | No | ||
| properties | Yes | ||
| object_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: it explains return structure, refusal of unrecognized PCB properties, multi-part SchLib visibility, board-type primitive traversal, units in mils, and common false conclusions from empty properties.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but the complexity of object types, property naming quirks, and scope behavior justifies most of its length. It is front-loaded and structured with Args sections, though some historical/aside comments could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero annotation coverage, zero schema description coverage, and five parameters for a generic object-query tool, the description is complete enough for correct invocation. It covers parameters, filtering, scope, return shape, and key failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document all five parameters, and it does: object_type constants by domain, dotted vs flat property naming, scope values including multi-part syntax, filter grammar and numeric matching, and limit semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: query schematic or PCB objects and read their properties. It further specifies the iteration/filter/return model, making clear this is a generic read/query tool rather than a write, count, or modification tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives substantial context for how to use the tool: scope choices, filter syntax, object-type constants, and pitfalls such as filtering to copper before concluding a net is empty. It does not explicitly name alternatives like pcb_get_components or obj_count and when to prefer them, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_refresh_documentA
Force a redraw/refresh of the current document.
For schematics, calls GraphicallyInvalidate. For PCB, sends a PCB:Zoom Redraw command.
Returns: Dictionary confirming the refresh
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose useful implementation details: GraphicallyInvalidate for schematics and a PCB:Zoom Redraw command for PCB. It also says a confirmation dictionary is returned, though it does not discuss whether the active document is required or whether any state is altered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the main action. The mechanism details are useful, but the 'Returns' sentence is somewhat redundant given the presence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter refresh tool with an output schema, the description is largely complete: it states the action, the backend mechanism per document type, and the return shape. The main omission is guidance on when to use it instead of sibling view/render tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter information because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Force a redraw/refresh of the current document.' It is clear what the tool does, but it does not differentiate itself from nearby display-related siblings such as obj_zoom, app_canvas, sch_render_svg, or pcb_focus_board.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The description explains internal mechanisms for schematics versus PCB, but not the conditions that should lead an agent to call this instead of another redraw or view tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_run_processB
Run an Altium process command via the generic primitive layer.
Wraps any Altium RunProcess call with structured pipe-separated parameters.
Args: process_name: The Altium process identifier (e.g., "Sch:Compile", "WorkspaceManager:OpenObject", "PCB:Zoom") parameters: Optional pipe-separated key=value parameter pairs, e.g.: "ObjectKind=Document|FileName=C:\path\to\file.SchDoc"
Returns: Dictionary with execution result
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | No | ||
| process_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return type but says nothing about the arbitrary, potentially destructive nature of running any Altium process, required preconditions, or side effects. For a generic escape-hatch tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by structured Args/Returns sections; no filler. The examples are directly useful, though the section headers take some space that could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be detailed, and parameter mechanics are well covered. However, for a generic command-execution tool with no annotations, the missing guidance on when to use it versus specific siblings and the lack of any safety/behavioral disclosure leave clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it gives example process identifiers ('Sch:Compile', 'WorkspaceManager:OpenObject', 'PCB:Zoom') and explains the pipe-separated key=value format for parameters with a concrete example. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Run an Altium process command via the generic primitive layer' and clarifies it wraps any RunProcess call. An agent can tell what it does, but the description does not explicitly distinguish it from the many specific sibling tools (e.g. app_run_ui_command, proj_run_output, pcb_* operations) that also execute actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this generic primitive versus the dozens of specific sibling tools, nor when not to use it. The phrase 'generic primitive layer' hints at an escape hatch but leaves the agent to infer the selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_selectA
Select objects matching a filter on the active document.
Sets the selection state on matching schematic or PCB objects for
visual highlighting. Use obj_deselect_all to clear.
Args: object_type: Altium object type (schematic or PCB) filter: Pipe-separated property=value conditions (AND logic)
Returns:
{"matched": N, "selected": M, "success": bool}. matched
is what the filter picked; selected is how many of those
read back as selected afterwards, and success is false
with a reason when that is fewer. A select reports
nothing about property readability.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| object_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose that this mutates selection state, returns matched/selected counts, and reports success=false with a reason when selected count is lower. It still omits whether existing selections are replaced or preserved, which matters for a selection tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then structured into Args and Returns sections. The return explanation is somewhat redundant given that an output schema exists, but the matched-versus-selected distinction is useful and the text is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter selection tool with no annotations and no schema descriptions, the definition gives useful filter syntax, selection-state behavior, and return semantics. It still lacks valid object_type examples and does not clarify whether selecting adds to or replaces the active selection, but the remaining gaps are relatively minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain that filter is a pipe-separated list of property=value conditions using AND logic. The object_type explanation is somewhat vague, giving '(schematic or PCB)' rather than enumerating valid Altium object types, so it only partially covers the required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb plus resource: select objects matching a filter on the active document, and it clarifies that this sets selection state for visual highlighting. It also distinguishes the operation from its clearing sibling, obj_deselect_all, so the core 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that obj_deselect_all should be used to clear the selection, giving a clear alternative for the inverse operation. It does not explicitly contrast with obj_query or explain when to inspect objects without selecting them, so guidance is strong but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_set_gridA
Set the snap grid and/or visible grid size for the active schematic.
Args: snap_grid: Snap grid size in mils (0 = don't change) visible_grid: Visible grid size in mils (0 = don't change)
Returns: Dictionary with the resulting grid sizes
| Name | Required | Description | Default |
|---|---|---|---|
| snap_grid | No | ||
| visible_grid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that 0 means 'don't change' and that it returns resulting grid sizes, but it does not mention requirements around an active schematic document, whether the change is persistent, or any failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and structured with Args and Returns sections. Every sentence conveys useful information with no evident waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter optional mutation with an output schema, the description covers parameter meanings and the return value adequately. It is slightly incomplete because no annotations exist and it does not describe preconditions or side effects of changing the active schematic grid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so for both parameters by giving units (mils) and the important sentinel semantics (0 = don't change), which is meaningful information beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: setting snap and/or visible grid size for the active schematic. The phrase 'active schematic' helps distinguish it from PCB-oriented grid/snap tools, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation and the 'active schematic' scope, but there is no explicit guidance on when to use this versus related tools such as pcb_snap_to_grid or other grid/UI tools. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_switch_viewA
Toggle between 2D and 3D view for PCB documents.
Args: mode: Target view mode, "3d" or "2d" (default "3d")
Returns: Dictionary confirming the view switch
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 3d |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It does convey the key behavioral trait that this is a non-destructive UI view change and it documents the return ("Dictionary confirming the view switch"). However, it omits whether a PCB document must be active, whether the setting persists with the document, and there is a mild internal tension between the verb "toggle" and the requirement that a target mode be supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line summary is front-loaded and the Args/Returns blocks are compact and scannable. The Returns line is slightly redundant given an output schema exists, but nothing is verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, single-optional-parameter view tool with an output schema, this covers purpose, accepted values, and default. The only material gap is the missing precondition that a PCB document be open and active, which is what an agent would most likely get wrong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single `mode` property carries no enum or description, but the description supplies the exact accepted values ("3d" or "2d") and the default ("3d"). That is meaningful information the schema does not provide, fully closing the coverage gap; only case-sensitivity/validation remains unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Toggle between 2D and 3D view") scoped to "PCB documents", so the agent knows exactly what the tool affects. It does not name or differentiate itself from any sibling (e.g. obj_zoom, pcb_focus_board), but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of "PCB documents" hints that an active PCB document is required, but there is no explicit when-to-use, when-not-to-use, or prerequisite statement. No alternative is named for agents that instead want zooming or board focusing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obj_zoomB
Control the viewport zoom level.
Args: action: "fit" (zoom to show all), "selection" (zoom to selected objects)
Returns: Dictionary confirming the zoom action
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | fit |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full behavioral burden. It only says it returns a confirmation dictionary; it omits whether it acts on the active view/document, what happens with no selection under "selection", and whether the zoom is persisted with the document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded lines with no padding: the purpose first, then the parameter meanings. The Args/Returns docstring formatting is slightly verbose but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values needn't be explained, and the single parameter is covered. What's missing for a viewport-mutating UI tool is the operating context: which view/document is zoomed and the empty-selection failure mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no enum, so the description is the sole source of meaning. It documents both values, "fit" (show all) and "selection" (zoom to selected objects), which is exactly what an agent needs to choose correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: control the viewport zoom level. Combined with the arg values it's clear what it does; it doesn't explicitly differentiate from nearby view tools like obj_switch_view or obj_refresh_document, but the zoom framing is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus other viewport/view tools, no prerequisites (an active document or selection must presumably exist), and no mention of the failure case for "selection" when nothing is selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
part_fetchA
Fetch one part's detail, by the ref a search returned.
Pass the ref straight through: it is provider:part_id,
so the source travels with the id and the merged results behave
like one catalogue. part_search puts a ref on every hit.
The source is still explicit, never inferred. Nothing here picks
a provider for you: a bare id with no provider and no
recognised prefix is refused rather than guessed at, because
guessing is how one source quietly becomes the answer to
everything. provider may still be given separately, and wins
over a prefix if both are present.
Set download_dir to also write the provider's library files
there, when it offers any. Off by default because it writes to
disk, and a fetch should not do that unasked.
Downloaded files are checked against the KiCad installed on this
machine: a registry may publish a NEWER s-expression format than
the local KiCad can open (observed live, format 20260206 against
KiCad 10.0.1's 20251024, where the symbol parser refuses the file
outright). Any such file comes back with a *_warning entry
rather than looking like a clean download.
Returns the provider's own detail plus a normalised summary
(mpn, manufacturer, datasheet, provenance, license) where the
provider supplies one, and files when a download was asked
for.
| Name | Required | Description | Default |
|---|---|---|---|
| part_id | Yes | ||
| provider | No | ||
| download_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: provider is never inferred and a bare id is refused, the provider argument overrides a prefix, download_dir writes to disk and is off by default, and downloaded files are validated against the local KiCad with newer s-expression formats surfaced as *_warning rather than a clean result. These are non-obvious failure and side-effect behaviours an agent could not infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the ref contract are front-loaded, and the ordering (ref, provider, download_dir, validation, returns) follows the call sequence. Some editorialising ('guessing is how one source quietly becomes the answer to everything') is longer than needed but does reinforce the refusal behaviour.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter fetch with an output schema present, the description covers input contract, precedence rules, side effects, error/warning behaviour, and even summarises the return envelope. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must supply all parameter meaning, and it does: part_id is defined as a provider:part_id ref, provider is described as optional and precedence-bearing over a prefix, and download_dir is described as an opt-in disk write. All three parameters gain semantics absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Fetch one part's detail') and immediately scopes it to the ref returned by a search, which distinguishes it from the sibling part_search that produces those refs. An agent can pick between 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs passing the ref straight through and notes part_search emits a ref on every hit, which is clear routing guidance. It stops short of an explicit 'call part_search first if you lack a ref' exclusion, but the workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
part_searchA
Search EVERY enabled part provider and merge the results.
No provider is a default and none is preferred: all are queried equally, hits carry the provider that found them, and the merged order is alphabetical by provider then part. That ordering is NOT relevance, so do not read the first hit as the best one.
Each provider reports its own status. A provider that cannot answer says why (endpoint withdrawn, software missing) instead of returning nothing, because "unavailable" and "no such part" are different answers and only one means stop looking.
Call with an empty query to list the providers and what they are, including who operates them.
TWO KINDS OF SOURCE, merged but never conflated. A library
provider yields GEOMETRY: a symbol or footprint you can place. A
catalogue provider (the distributors and aggregators) yields
IDENTITY: the manufacturer part number, the datasheet, what is
in stock, and NO geometry at all. Every hit carries its kind,
because finding out that a distributor hit has no symbol after
choosing the part is the expensive way to learn it.
The two answer different questions rather than ranking against each other: a catalogue tells you WHICH part to use and hands you the datasheet every check here measures against, and a library tells you whether you can draw it.
NOTE on maturity="offline": in this catalog that means "needs no Altium", which is true here. It does NOT mean "needs nothing": the remote providers want the internet. With no network the search still succeeds on whatever local providers are enabled (kicad_local reads libraries already on disk) and reports the remote ones as unavailable, so a degraded answer is still a useful one.
DATASHEET DISCIPLINE: a hit is a lead, not a verified part. The
provenance and license fields say what the provider claims
about where its geometry came from, and a blank means unknown,
not permissive. Audit any imported footprint against the
manufacturer land pattern with
lib_audit_footprint_vs_datasheet before trusting it.
Args: query: substring matched against part name, manufacturer and keywords. Empty lists the providers instead. limit_per_provider: cap per source, so one large registry cannot crowd out the others.
Returns:
{"ok", "count", "providers": {name: status}, "hits": [...], "by_mpn": [...]} or, for an empty query,
{"ok", "providers": [...]}.
``by_mpn`` correlates the same part across sources, so you
can see which providers carry it and what each states about
provenance and license. Cosmetic spelling differences fold
together; WILDCARD part numbers do not, because KiCad's
``...C8Tx`` is a family placeholder rather than a spelling
of ``...C8T6``, and merging them would assert an equivalence
that is not safe to assume.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| limit_per_provider | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the merge/ordering policy, per-provider status reporting ("unavailable" vs "no such part"), the offline/network failure mode, and the by_mpn correlation rule including why wildcard part numbers are deliberately not folded. These are non-obvious behaviors that an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the essential semantics, but the length is disproportionate for a two-parameter search. The library-vs-catalogue distinction is restated in the paragraph beginning "The two answer different questions," and the datasheet-discipline paragraph overlaps with the catalogue description, so a few sentences do not fully earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything needed to call and interpret it: query semantics, provider status semantics, result ordering caveats, degraded-network behavior, and the by_mpn correlation. The Returns section additionally explains what by_mpn means beyond the raw output schema, which is more than the schema alone would convey.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: query is a substring matched against part name, manufacturer, and keywords, with the empty-string special case spelled out; limit_per_provider is a per-source cap whose rationale (one large registry crowding out others) is given. The numeric default lives only in the schema, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with clear scope: search every enabled part provider and merge results, with no provider preferred. The distinction between library (geometry) and catalogue (identity) sources further clarifies what the tool returns. It doesn't name sibling search tools like lib_search or lib_dblib_search as alternatives, so the differentiation is by scope rather than by explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call with an empty query to enumerate providers, warns that alphabetical order is not relevance and not to treat the first hit as best, and directs the agent to lib_audit_footprint_vs_datasheet before trusting an imported footprint. It also explains the degraded offline behavior. It stops short of naming competing search tools to route away from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_add_layerA
Insert a copper layer into the PCB layer stack.
Calls IPCB_LayerStack.InsertLayer with the requested TLayer enum. Valid names include MidLayer1..MidLayer30 (signal layers) and InternalPlane1..InternalPlane16 (power / ground planes). Top / Bottom are always present, they cannot be added.
Args: layer: Layer name, e.g. "MidLayer1", "InternalPlane1"
Returns: Dictionary confirming the layer was inserted.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the underlying call, valid TLayer values, restrictions on Top/Bottom, and that it returns a confirmation dictionary, but it omits side effects such as insertion position in the stack, permission requirements, or impact on design rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and organized with Args/Returns sections. The reference to IPCB_LayerStack.InsertLayer is slightly implementation-specific, but overall the text is efficient and every section adds some value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that it is a one-parameter mutation tool with no annotations but with an output schema, the description covers the essential calling information: valid layer names, disallowed layers, and confirmation return value. It could be more complete about insertion position or side effects, but the key constraints for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It does so thoroughly by naming the parameter, giving examples, and enumerating the valid layer ranges (MidLayer1..MidLayer30 and InternalPlane1..InternalPlane16) while excluding Top/Bottom.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource: inserting a copper layer into the PCB layer stack. The scope is clear enough to distinguish it from pcb_remove_layer and pcb_modify_layer, though it does not explicitly name those sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about valid layer names and the restriction that Top/Bottom cannot be added. However, it does not explicitly say when to use this tool versus alternatives such as pcb_modify_layer or pcb_get_layer_stackup, leaving usage guidance largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_add_teardropsA
Add teardrops to pad/via-track junctions board-wide.
Launches Altium's Teardrop command on all objects. The Teardrop dialog is modal and cannot be suppressed from script (same limitation as the ECO dialog): choose Add and confirm it in Altium. Returns once the command is dispatched.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the modal dialog that cannot be scripted away, that human confirmation is required, and critically that the tool returns once dispatched rather than once completed. It does not state reversibility or that teardrops can later be stripped via pcb_remove_teardrops.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in the first sentence, then the operational caveat. Each sentence is informative; the parenthetical ECO-dialog comparison is mild filler but does anchor the behavior for returning users.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter command with an output schema, the description covers the essentials an agent needs: what it does, that it is non-atomic, and that a manual dialog step intervenes. Nothing required to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to disambiguate; baseline is 4. The absence of any scoping/filter argument is implicitly conveyed by 'board-wide' and 'on all objects'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Add teardrops') plus the exact geometric targets ('pad/via-track junctions') and scope ('board-wide'). It is unmistakable against the sibling pcb_remove_teardrops and the many other pcb_* mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It makes clear the command operates on all objects with no selective mode, and warns that a modal dialog must be confirmed manually in Altium before the effect occurs. It stops short of naming a preferred alternative or stating preconditions (e.g. an active PCB document must be focused).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_add_testpoints_for_net_classA
For each net in a netclass that does NOT already have a
testpoint, place a new pad above the board outline with the
net assigned and the standard IsTestpoint /
IsAssyTestpoint flags set.
Typical workflow:
Set up a netclass in Altium called
TestPointsand add the signals you want probed (clocks, power rails, reset, debug signals).Call this tool with
net_class="TestPoints"and the pad geometry your bed-of-nails fixture requires.Open the PCB; the new pads sit in a row above the board, with the right net + testpoint flags already set.
Drag them into their final positions (or run
pcb_move_componentsif you've pre-computed where they go).
Coverage detection: a net is treated as "already covered" if
any pad or via on it carries ANY of the four testpoint flags
(so DFM tools, fab-side bed-of-nails vendors, and assembly-
side probe vendors all see the same coverage). Pass
force=True to override and place anyway.
Agent-friendly: no GUI, results returned for follow-up.
Args:
net_class: Netclass name to scan.
type: "smd" (top-layer SMD pad, no hole) or
"through_hole" (multi-layer pad with drill).
pad_size_mils: Outer pad size in mils. Default 40.
hole_size_mils: Drill diameter, only used for through-hole
testpoints. Default 20.
fab_top: Set IsTestpoint_Top (top-side bed-of-nails).
fab_bottom: Set IsTestpoint_Bottom.
assy_top: Set IsAssyTestpoint_Top (top-side assembly
probe). Default True.
assy_bottom: Set IsAssyTestpoint_Bottom.
force: Ignore existing testpoint coverage and always
place a new pad.
Returns:
Dict with {net_class, type, placed, skipped_already_covered, placed_nets[], skipped_nets[]}.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | smd | |
| force | No | ||
| fab_top | No | ||
| assy_top | No | ||
| net_class | Yes | ||
| fab_bottom | No | ||
| assy_bottom | No | ||
| pad_size_mils | No | ||
| hole_size_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and largely meets it: it discloses the exact side effect (new pads placed above the board outline, not in final position), the precise coverage-detection rule across four testpoint flags, and the force override. It omits whether an open PCB document or edit permission is required and whether the placement is undoable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then cleanly sectioned into workflow, coverage rule, and Args. Slightly padded in the parenthetical about DFM/fab/assembly vendors, but no section is truly wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter mutation tool with zero annotation and zero schema-description coverage, the description supplies purpose, workflow, edge-case semantics, per-parameter detail, and (redundantly but harmlessly) the return shape despite an output schema existing. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description fully compensates by documenting all nine parameters with meaning and defaults. It is especially valuable for `type`, whose schema is a bare string with no enum — the description supplies the two allowed values and what each produces (SMD top-layer pad vs. multilayer drilled pad).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with exact scope: 'For each net in a netclass that does NOT already have a testpoint, place a new pad above the board outline with the net assigned.' This distinguishes it unambiguously from siblings like pcb_place_pad (single explicit pad) and pcb_place_thieving_pads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The numbered 'Typical workflow' section gives clear preconditions (netclass must exist in Altium with signals added) and names an alternative for the follow-up step (pcb_move_components for final positioning). It does not explicitly state when to prefer this over hand-placing pads with pcb_place_pad, which keeps it just 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.
pcb_align_componentsB
Align multiple PCB components along a common edge or center.
Args: designators: Comma-separated component reference designators (e.g., "R1,R2,R3,R4") alignment: Alignment mode. Options: "left" - Align to leftmost X "right" - Align to rightmost X "top" - Align to topmost Y "bottom" - Align to bottommost Y "center_x" - Center horizontally "center_y" - Center vertically
Returns: Dictionary with alignment result and component count
| Name | Required | Description | Default |
|---|---|---|---|
| alignment | No | left | |
| designators | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a mutation (components are repositioned) but does not disclose whether the move is reversible/undoable, what permissions are needed, or how existing coordinates are treated. Only the return shape is described, leaving meaningful side-effect behavior undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then structured Args/Returns blocks. The alignment-option list is verbose but justified since the schema lacks those enum values. Minor redundancy in restating the return value when an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are thoroughly covered and an output schema exists (so return details needn't be here), but for a no-annotation mutation tool the description omits behavioral context like reversibility and selection behavior. Adequate but with a clear gap on side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema declares no enum for 'alignment,' yet the description fully documents both parameters: the designator list format with an example, and every alignment mode with its precise geometric meaning. This is exactly the value the description should add beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Align multiple PCB components along a common edge or center.' This clearly distinguishes it from sibling placement tools like pcb_distribute_components or pcb_move_components without naming them explicitly. An agent can identify the operation at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (pcb_distribute_components, pcb_autoplace, pcb_move_components), nor any prerequisites or exclusions. The usage is implied by the operation name but nothing routes the agent between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_apply_dnp_paste_exclusionA
Suppress stencil paste on Not-Fitted (DNP) components.
The remediation half of audit_variant_not_fitted. A Not-Fitted
component is on the BOM as a placeholder and must NOT receive
paste: the SMT line would otherwise deposit paste on empty pads,
and the bridging that follows shows up as rework.
With no designators this asks audit_variant_not_fitted
for the components Not Fitted in the project's CURRENT variant,
so the selection follows the variant you actually have open.
Pass an explicit list to override that.
Mechanism: each surface pad gets a manual PasteMaskExpansion of minus its larger dimension, which collapses the stencil aperture whatever the pad shape. Through-hole pads are left alone and counted separately, since they have no aperture to suppress.
Reversible: restore=True discards the manual override so
Altium recomputes the expansion from the design rules.
RESTORE THE SAME LIST YOU APPLIED. restore will NOT guess:
called without designators it refuses and tells you what to
pass. That is deliberate. Resolving a restore from the current
variant means excluding under one variant, switching, then
restoring, and leaving any component that was excluded but is
fitted in the new variant with its aperture still suppressed.
Nothing would report it: the call succeeds, the pad looks
ordinary in the editor, and the part comes back from assembly
unsoldered.
The apply reply lists every component it touched in items.
Pass those designators back to restore. If you really do want
the current variant's Not-Fitted list, ask for it with
use_current_variant=True and you own the choice.
Apply is unaffected: with no designators it uses the current
variant's Not-Fitted list, which is the whole point of applying.
Mismatch is visible either way. components_requested versus
components_matched in the reply reports how many of the
names you passed were actually found on this board.
Args:
designators: Components to treat. Omit on an apply to use
the current variant's Not-Fitted list. Required on a
restore unless use_current_variant is set.
restore: Undo a previous exclusion instead of applying one.
dry_run: Report which components WOULD be treated and change
nothing. Worth using first: this edits the board, and a
wrong variant selection would strip paste off parts that
are meant to be fitted.
use_current_variant: Allow a restore with no designators
to resolve from the variant open right now. Off by
default because that is the failure above.
Returns:
Dict with restored, components_requested,
components_matched, pads_changed,
pads_skipped_through_hole and per-component items.
In dry-run mode: dry_run, designators and source.
On a refused restore: {"ok": False, "reason": ...} and
nothing is read from or written to the board.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| restore | No | ||
| designators | No | ||
| use_current_variant | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it explains the paste-mask mechanism, that through-hole pads are skipped, that the action is reversible via `restore=True`, that refused restores do not touch the board, and the risk of stripping paste from fitted parts under the wrong variant. It also describes the apply reply and dry-run reply shapes, which is unusually complete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with a front-loaded purpose, mechanism, usage rules, Args, and Returns. It is longer than strictly necessary and repeats some apply-versus-restore warnings, but the length is mostly justified by the safety-critical restore behavior and the lack of schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity, absence of annotations, zero schema description coverage, and four parameters, the description is complete enough for correct invocation. It covers mechanism, variant sourcing, restoration risk, dry-run behavior, return fields, refusal behavior, and mismatch reporting; the output schema exists but the description still adds useful return-value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all four parameters, and it does: `designators`, `restore`, `dry_run`, and `use_current_variant` each get semantic explanations including defaults, required combinations, and consequences. This is substantially more than the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource: suppressing stencil paste on Not-Fitted components. It also distinguishes itself from the related `audit_variant_not_fitted` tool by calling itself the remediation half, so an agent can tell its role apart from the audit sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit operating guidance: omit `designators` to use the current variant's Not-Fitted list, pass a list to override, use `dry_run` first, and restore only with the same list that was applied. It also names `audit_variant_not_fitted` as the source for the default selection and explains why a restore without designators is refused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_apply_via_templateA
Make free vias match a source via: its via template, hole and diameter.
Point at a via that already uses the template you want (set one in Altium's Properties panel if none does), and every other free via, or those matching the filters, takes its template link, mode, hole and diameter. This is how to bring a board in line with a Routing Via rule in template mode. Altium Designer 22 or later.
The template link is copied the way Altium's own FormatCopy script does it. Diameter and hole are read back; the link has no member to read back, so check one via's template in the Properties panel afterwards. Growing vias can create clearance violations: run DRC with the rules enabled.
Args: source_x, source_y: A point on the source via, in mils. net: Only vias on this net. from_size_mils, from_hole_mils: Only vias at this size now. dry_run: Report what would change and change nothing.
Returns:
source (position, size, hole, net), changed, failed,
before/after counted by "diameter/hole" in mils.
Refused with LOCAL_STACK for a source with a per-layer stack
and NO_ANNULAR_RING for a source without a ring.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| dry_run | No | ||
| source_x | Yes | ||
| source_y | Yes | ||
| from_hole_mils | No | ||
| from_size_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it warns that growing vias can create clearance violations and instructs running DRC, notes the template link cannot be read back so must be verified in the Properties panel, and documents refusal codes LOCAL_STACK and NO_ANNULAR_RING. That is unusually rich disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then mechanics, caveats, and Args/Returns. Most sentences earn their place, though the FormatCopy provenance sentence and the verbose Returns paragraph add some bulk that could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation tool with no annotations, the description covers trigger, preconditions, filtering, safety warnings, error codes, and a return summary. Even though an output schema exists, the extra failure-mode detail is genuinely additive rather than redundant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: all six parameters are explained with units (source_x/source_y in mils, from_size_mils/from_hole_mils as 'only vias at this size now'), and dry_run's contract ('report what would change and change nothing') is spelled out. The filter semantics of net are also stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource with scope: 'Make free vias match a source via: its via template, hole and diameter.' It is clearly distinguishable from neighboring tools like pcb_normalize_vias, pcb_place_via, or pcb_set_via_soldermask_relief because it names the exact properties propagated (template link, mode, hole, diameter) and the 'free via' target set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('Point at a via that already uses the template you want') and a motivating scenario ('bring a board in line with a Routing Via rule in template mode'). It stops short of explicitly naming alternatives to use instead when no template-mode rule exists or when vias are not free, so it's clear context without full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_audit_pad_center_connectedA
Find pads whose center has no copper entering it (acid-pad check).
For every netted pad, checks that a track / arc / via on the same net reaches the pad centroid. A pad connected only at its edge (an "acid pad") can fail in fab. Read-only; reports offenders with designator, pad, net, and location.
Returns: {"checked": N, "offenders": M, "items": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it declares "Read-only" and lists exactly what is inspected (every netted pad; track/arc/via on the same net reaching the centroid). It does not say what happens to pads on nets with no routing at all, but the read-only guarantee and the check mechanics are the important disclosures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the definition, then mechanics, then rationale, then the return shape — no wasted clauses. The explicit "Returns:" block is somewhat redundant given a declared output schema, but it is two lines and aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-parameter, read-only audit with an output schema is fully covered: the agent knows what is checked, what is excluded, that it mutates nothing, and what fields each offender carries. 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.
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 and the baseline applies. The description correctly implies the scan runs over the whole board rather than a caller-specified subset.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — find pads with no copper at their centroid — and names the domain term ("acid-pad check"). The added sentence on how it decides (track/arc/via on the same net reaching the centroid) makes it unmistakable versus neighbors like audit_find_bad_connections or audit_find_pads_near_board_edge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for running it — pads connected only at the edge can fail in fab — and scopes the check to "netted" pads, implying unnetted pads are out of scope. It does not name a sibling audit to run instead when the failure mode is different (e.g. unconnected pins), so no explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_autoplaceA
Place the focused board's parts with the in-house placer, as a job.
Reads the board exactly (pcb.get_layout_model), then places it in
the background and returns a job id at once. Poll
design_job_status; design_job_result gives the moves, the
wirelength before and after, any overlaps, and the exact DRC's
verdict on the placed board (unrouted). Nothing is moved on the board
until pcb_autoplace_apply.
Two strategies. "blocks" plans the board by sub-circuit first: each IC with its decoupling, pull-ups and filters in columns round it, connectors with the parts on their lines, passives in rows, repeated channels as identical tiles in a grid, the blocks placed in signal-flow order from the connectors; its result also lists the blocks (name, rectangle in mils, members) and every part the legaliser had to move, with the moves over 80 mil flagged as floorplan problems. "analytic" places by wirelength alone (quadratic placement, spreading, legalising, refinement).
Parts keep their side. Locked parts, and parts whose designator
starts like a connector, mounting hole, fiducial, test point, switch
or battery, stay where they are unless named in parts: they sit
where they do for mechanical reasons. The board's own routing does
not move with its parts: place before routing, or take the routing up
first with pcb_unroute.
This is the in-house engine: no Altium auto-placer, no external program.
Args:
expect_file: full path of the board to place. The read refuses on
the first reply if the focused board is another one.
parts: designators to move; every other part stays. None moves
every part that is not locked or mechanical (see above).
compact: spread the parts over only as much room as they need,
round where their connections pull them, instead of over the
whole board. For a small circuit on a large board; over the
benchmark boards it routes slightly worse, so it is off by
default. Analytic strategy only.
strategy: "blocks" or "analytic"; None takes the placer's
default, "blocks". A board where the floorplan has to push
more than a quarter of its parts out of place is placed by
"analytic" instead, and the result says so under
fallback.
Returns:
{"job_id", "board", "strategy", "read": {...}}, or
{"error": ...} when the strategy is unknown, or the read
failed or found another board.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | No | ||
| compact | No | ||
| strategy | No | ||
| expect_file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden — and it does: asynchronous job with immediate job_id return, deferred mutation gated behind an apply call, parts keeping their side, locked/mechanical parts pinned unless named, and an automatic fallback to 'analytic' when the floorplan pushes more than a quarter of parts, reported under 'fallback'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the async contract and side-effect boundary, then strategy detail, then Args/Returns — a sound ordering given the tool's complexity. It runs long and a few clauses (e.g. the exhaustive list of block contents, the 'no Altium auto-placer' aside) are more than an agent strictly needs, but nearly every sentence carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, mutation-deferred job tool with no annotations, the description covers the entire lifecycle: read, job dispatch, polling, result contents (moves, wirelength before/after, overlaps, DRC verdict, blocks) and the separate apply step. The return shape is documented in prose and backed by an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates fully for all four parameters: expect_file (full path, read refusal on mismatched focused board), parts (designator list, None = all non-locked/non-mechanical), compact (behavior, default, analytic-only restriction), strategy (accepted values, None default 'blocks', fallback rule). Nothing essential is left to the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place the focused board's parts with the in-house placer, as a job') and immediately distinguishes itself from the apply step and from pcb_autoroute. An agent can tell it apart from pcb_place_components, pcb_move_components or pcb_plan_placement 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly spells out the workflow: nothing moves until pcb_autoplace_apply, poll design_job_status, read design_job_result. It also names the when-not ('place before routing, or take the routing up first with pcb_unroute') and gives the selection rule for the two strategies, including why compact is off by default.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_autoplace_applyA
Move the parts of a finished pcb_autoplace job on the board.
Refuses unless the focused board is expect_file. With
checkpoint (default), first snapshots the board's folder as it is
ON DISK, so it can be restored with app_restore_checkpoint;
unsaved edits in the editor are not in it, so save first if there
are any. Positions are whole mils, as the job reported and judged
them.
Args:
job_id: a layout_place job that has finished.
expect_file: full path of the board the job placed.
checkpoint: take a checkpoint first (default True).
Returns:
{"moved", "failed", "expected", "checkpoint", "notes"} or
{"error": ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| checkpoint | No | ||
| expect_file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the refusal condition, that the checkpoint snapshots the folder ON DISK (so unsaved editor state is excluded), and that positions are whole mils. It does not state what happens to components absent from the job or whether a failure leaves a partial placement, which matters for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then constraints, then Args, then Returns. The Args section is necessary given zero schema coverage, though a few lines (e.g. restating the default already in the schema) are redundant; still, no sentence is wasted overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no annotations, the description supplies the precondition, the side effect (checkpoint), the unit convention, and the failure mode ('Refuses'). A return shape exists in the output schema, so the short Returns line is bonus rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description defines all three parameters meaningfully: job_id must be a finished layout_place job, expect_file is the full path that must match the focused board, and checkpoint defaults to True and controls the on-disk snapshot. This adds substantial meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Move the parts of a finished pcb_autoplace job on the board.' The 'finished job' scoping implicitly separates it from pcb_autoplace (which creates the job) and from pcb_plan_placement, so the agent can identify the apply step 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Refuses unless the focused board is expect_file') and a sequencing requirement ('save first if there are any' unsaved edits). It also points at app_restore_checkpoint for undoing the checkpoint. It does not explicitly name pcb_autoplace as the tool that produces the job_id, leaving that one hop to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_autoplace_silkscreenA
Move designators that break silk clearance to a clear position.
A visible designator that is closer than the silk clearance to
anything else on its overlay layer (component outlines, texts,
fills), closer than the mask clearance to a pad's mask opening on
its side, or off the board, is tried at a ring of auto-position
anchors and left on the first that clears. A designator that is
already clear is not touched, and one no anchor clears goes back
where it was and is listed in unplaced_designators for a
person. First-fit on bounding rectangles, so it errs towards
"blocked"; run DRC after.
Args:
silk_clearance_mils: Silk to silk clearance. None reads the
board's Silk To Silk rule.
mask_clearance_mils: Silk to solder mask clearance. None
reads the board's Silk To Solder Mask rule.
mask_expansion_mils: How far a pad's mask opening extends past
its copper (default 4, Altium's default).
designators: Only these components. None means all.
Refused with NO_CLEARANCE, moving nothing, when a clearance is neither given nor readable from an enabled rule.
Returns:
placed, already_clear, unplaced, hidden,
total, the placed and unplaced designators, and each
clearance used with its source (argument or the rule's
name). skipped is unplaced + hidden.
| Name | Required | Description | Default |
|---|---|---|---|
| designators | No | ||
| mask_clearance_mils | No | ||
| mask_expansion_mils | No | ||
| silk_clearance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses the mutation (moves designators), the first-fit-on-bounding-box approximation ('errs towards blocked'), the safe fallback (unplaceable designators revert and are listed for a person), the NO_CLEARANCE refusal that moves nothing, and the DRC follow-up caveat. Missing only things like prerequisite document/lock state, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a dense but informative behavioral paragraph, followed by Args and Returns blocks. Well organized and mostly earns its length, though the Returns block partly duplicates the existing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, the description covers behavior, approximation caveat, failure/refusal modes, parameter fallbacks, and a post-run DRC recommendation. With an output schema present, the return explanation is a bonus rather than a gap. Nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: each of the four parameters is explained beyond its type, notably that None reads the board's Silk To Silk / Silk To Solder Mask rules, that mask_expansion defaults to 4 (Altium's default), and that designators=None means all components. This fully closes the schema-description gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Move designators that break silk clearance to a clear position.' An agent can immediately tell this relocates silkscreen designators, not traces or components. It stops short of naming the sibling that handles generic placement (pcb_autoplace / pcb_autoplace_apply), so it's clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong context on when the tool matters: designators closer than silk/mask clearance or off-board. States that already-clear designators are untouched and advises running DRC afterward, which frames appropriate use. It does not explicitly compare against alternatives like pcb_autoplace or manual nudging, so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_autorouteA
Route the focused board with the in-house layout engine, as a job.
Reads the board exactly (pcb.get_layout_model: padstacks per
layer, rules, pours, planes, in Altium's internal units), then routes
it in the background and returns a job id at once. Poll
design_job_status; design_job_result gives the tracks and
vias to add, the exact DRC's verdict on the routed board, and which
pours it relied on as planes. Nothing is written to the board until
pcb_autoroute_apply.
This is the in-house engine: no Altium autorouter, no external program. Inner layers a pour covers are used as planes and not routed on; a redundant one is given back to routing when the board cannot be completed without it.
With the stage switches on, the routing runs in planned stages, each one's copper fixed for the next: differential pairs (coupled at their gap, skew evened with bumps), a dog-bone via for every pad a plane or pour joins (never a via in a passive's pad; an exposed pad gets a via array), access lanes kept straight out of fine-pitch IC pins, buses laid as nested lanes, then everything else negotiated, high-current nets first, then rails, then the rest. Every bend is 45 degrees or less, and no via goes into a passive's pad. Over 160 finished boards these defaults routed 98.93% mean against 98.85% for the router before the stages (two boards fewer at 100%, all DRC-clean, about 29% more time); plane fanout is off by default because it cost completion. With all four switches off this is the router before the stages, exactly.
Args: expect_file: full path of the board to route. The read refuses on the first reply if the focused board is another one. nets: route only these nets; all other copper stays as it is. None routes every net with two or more pads. use_planes: treat inner layers a single pour covers as planes (default True). diff_pairs: route the board's differential pairs (its own definitions, else read from _P/_N, +/-, DP/DM net names) as coupled pairs first (default True). plane_fanout: give every surface pad of a plane or pour net its dog-bone via before the signals (default False). pin_lanes: keep the first 0.8 mm straight out of each IC pin at 0.65 mm pitch or finer for that pin's own net (default True). bus_lanes: lay three or more nets between the same two parts as one group of nested lanes (default True).
Returns:
{"job_id", "board", "read": {pads, components, nets, layers}},
or {"error": ...} when the read failed or found another board.
The job's result adds, beside the copper and the DRC verdict:
via_in_pad (every via in a pad, for the fab notes: filled
and capped), pairs (per pair: lengths, skew, bumps, layer
changes, or why it was left to the router), buses (per bus:
its lanes, what was ripped up and planned again, or why not),
and unreached (every pad left unrouted, with its place and
the nets in its way).
| Name | Required | Description | Default |
|---|---|---|---|
| nets | No | ||
| bus_lanes | No | ||
| pin_lanes | No | ||
| diff_pairs | No | ||
| use_planes | No | ||
| expect_file | Yes | ||
| plane_fanout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: asynchronous job semantics, immediate return of a job id, deferred mutation gated behind a separate apply tool, refusal when expect_file mismatches the focused board, plane layers being excluded from routing but reclaimable when completion fails, and empirical completion stats (98.93% mean vs 98.85%). This is exactly the behavioral context annotations would otherwise need to supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the job/apply lifecycle, then cleanly sectioned into behavior, Args, and Returns. The middle paragraph on planned stages is dense and the benchmark statistics are verbose, but nearly every sentence informs a routing decision or a switch setting, so little is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, no-annotation, async mutation tool, nothing an agent needs is absent: inputs, defaults, job lifecycle, what the result payload adds (via_in_pad, pairs, buses, unreached), and the safety boundary at pcb_autoroute_apply. It even documents return values despite an output schema existing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the Args block is doing all the work — and it does: each switch is explained in terms of its routing effect (pairs coupled at gap with skew bumps, dog-bone via per plane-joined pad, 0.8 mm pin lanes at 0.65 mm pitch, nested bus lanes), with defaults stated. expect_file's mismatch behavior and nets' None semantics are both documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Route the focused board with the in-house layout engine, as a job") and immediately distinguishes itself from the write step by naming pcb_autoroute_apply and the design_job_* polling siblings. An agent can tell this apart from route_plan or pcb_autoplace 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Spells out the workflow explicitly: this call returns a job id at once, poll design_job_status, read copper/DRC from design_job_result, and nothing touches the board until pcb_autoroute_apply. It also gives a clear default-recommendation for the stage switches (plane_fanout off by default because it cost completion). What's missing is any "when not to use this" — e.g. when route_plan or pcb_unroute should be preferred — but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_autoroute_applyA
Write a finished pcb_autoroute job's tracks and vias to the board.
Refuses unless the focused board is expect_file. With
checkpoint (default), first snapshots the board's folder as it
is ON DISK, so it can be restored with app_restore_checkpoint.
Nothing is saved first: unsaved edits in the editor are not in the
checkpoint, so save the board yourself beforehand if it has any.
Coordinates, widths and via sizes keep their decimals.
Args:
job_id: a layout_route job that has finished.
expect_file: full path of the board the job routed.
checkpoint: take a checkpoint first (default True).
repour: repour the board's polygons afterwards when the job
relied on them, as planes or as pours joining a net, or
routed through their old poured copper (default True). A
poured net's connections are not there, and the new copper
is not cleared, until the polygons are repoured round it.
Returns:
{"tracks": {placed, failed}, "vias": {placed, failed}, "checkpoint": ..., "repoured": bool, "via_in_pad": [...], "notes": [...]} or {"error": ...}. via_in_pad lists the
vias written into pads (BGA balls, exposed pads), which the
fabrication notes must ask to be filled and capped.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| repour | No | ||
| checkpoint | No | ||
| expect_file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full behavioral load and does it well: it discloses the expect_file guard, checkpoint snapshot timing and unsaved-edit caveat, repour implications, decimal preservation, and the fabrication note requirement for via_in_pad. These are precisely the mutation side effects an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and critical safety warning, then structured Args and Returns sections; the extra detail on checkpoint and repour is warranted for a destructive write. No sentence appears wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no annotations and an existing output schema, the description covers preconditions, side effects, checkpoint safety, repour semantics, and return fields including via_in_pad. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it defines all four parameters in an Args section, explaining job_id constraints, expect_file as the full board path, checkpoint default and snapshot behavior, and repour default and when needed. It adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Write') and resource ('a finished pcb_autoroute job's tracks and vias to the board'), clearly distinguishing it from the sibling pcb_autoroute that generates the job. An agent can tell this applies finished routing results to the board.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear preconditions: job_id must be a finished layout_route job and the focused board must equal expect_file, implicitly saying when not to call. It also names app_restore_checkpoint as the recovery path, but does not explicitly contrast with pcb_autoroute or other sibling tools, so it is clear context rather than full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_auto_size_board_outlineA
Fit the board outline around the embedded-board array(s) plus a margin.
Use after pcb_panelize (or any embedded-board layout) to size the
panel outline to its content. Unions the embedded boards' extents, adds
margin_mils on every side, and converts the result to the board
outline.
Args: margin_mils: border added on each side (default 100).
Returns: {"width_mils", "height_mils"}.
| Name | Required | Description | Default |
|---|---|---|---|
| margin_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, but the description discloses the algorithm: union the embedded boards' extents, add margin on every side, and write the result as the board outline. That conveys that the existing outline is replaced and that the tool depends on embedded boards being present. It omits failure behavior when no embedded boards exist and any confirmation/undo semantics for overwriting the outline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by usage, mechanism, argument, and return value — nothing redundant, and each line adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, prerequisite, mechanism, parameter meaning, and return shape, which is ample for a one-parameter layout tool with an output schema. The only missing piece is what happens when there are no embedded boards to union or how an existing outline is handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no schema description, but the description fully compensates by defining margin_mils as the border added on each side with a default of 100. The unit (mils) is only implied via the parameter name, which is the one remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Fit the board outline') and the exact operation performed (union of embedded-board extents plus margin). It is clearly distinguishable from siblings like pcb_get_board_outline (read) and pcb_set_board_shape (explicit shape definition).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it 'after pcb_panelize (or any embedded-board layout)' — a clear sequencing prerequisite naming the relevant sibling. It does not, however, contrast itself with alternatives such as pcb_set_board_shape for the case where the agent wants a manually specified outline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_bevel_polygon_cornersA
Chamfer the corners of a copper polygon pour.
Replaces each sharp vertex with two points set back along its edges by bevel_mils (auto-clamped so neighbouring bevels never overlap), giving every corner a straight 45-style cut. Only straight-outline polygons are handled, a polygon containing arc segments is left untouched. The polygon is repoured after the edit.
Args: index: Which polygon to bevel (0-based, in board iteration order). net_name: If set, count only polygons on this net when applying index. bevel_mils: Set-back distance per edge (default 25).
Returns: {"beveled", "index", "orig_vertices", "new_vertices", "bevel_mils"}, or an error code (NOT_FOUND / BAD_POLYGON / HAS_ARC).
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| net_name | No | ||
| bevel_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the auto-clamping of bevels so neighbours don't overlap, the 45-style cut result, that arcs are skipped, that the polygon is repoured after the edit, and the error codes. It stops short of stating reversibility or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then constraints, then Args/Returns in a clean docstring layout. Slightly long, but every sentence conveys operative information and nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, applicability limits, the effect on the polygon, parameter semantics, and error outcomes. An output schema exists, so the Returns block is a bonus rather than a necessity; nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: index is explained as 0-based in board iteration order, net_name as a filter that re-scopes which polygons index counts over, and bevel_mils as the per-edge set-back with default 25. The index/net_name interaction is the key non-obvious semantic and it is made explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Chamfer the corners of a copper polygon pour') and immediately clarifies the mechanism (replace each sharp vertex with two points). It is readily distinguishable from siblings such as pcb_modify_polygon or pcb_repour_polygons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an applicability constraint (only straight-outline polygons; arc-containing polygons are left untouched) and error codes, but it never says when to choose this over pcb_modify_polygon or pcb_repour_polygons, nor any prerequisites. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_bind_pad_netsA
Assign component pads to existing board nets, batch in ONE call.
Second leg of the netlist-driven SCH->PCB bridge: after
pcb_create_nets_from_list, feed every (designator, pin, net)
row of the compiled netlist here. Each binding finds the placed
component, matches the pad by name, and sets its net. Nets must
already exist on the board -- a binding to a missing net fails
(it does not create the net).
Bindings are processed in order; keep rows for the same
designator adjacent (the handler caches the component lookup per
consecutive run -- pcb_build_from_project orders them this way
automatically).
Args:
bindings: List of dicts, each with designator (e.g. "U1"),
pin (pad name, e.g. "3" or "A1"), net.
Returns:
Dict with bound / failed counts plus
missing_components / missing_pads / missing_nets
name lists (each capped at 50 entries).
| Name | Required | Description | Default |
|---|---|---|---|
| bindings | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the non-creating failure mode for missing nets, the ordering/caching constraint on adjacent designators, and the aggregate bound/failed plus capped missing_* lists. It stops short of saying what happens to a pad that already carries a different net (overwrite vs. error) and says nothing about permissions or undo, which is the one real gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical constraint (nets must pre-exist) is front-loaded and each paragraph adds new information. Minor waste: the "Returns:" block largely restates the existing output schema, and the "Second leg of the netlist-driven SCH->PCB bridge" framing is atmospheric rather than operational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter batch tool with an output schema, this covers everything an agent needs: prerequisite tool, input row shape, ordering requirement, failure semantics, and result shape. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only says "array of objects with additionalProperties: true", so the description must compensate — and it does, spelling out the three required keys `designator` ("U1"), `pin` (pad name, "3" or "A1"), and `net`, with concrete examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource+scope: "Assign component pads to existing board nets, batch in ONE call." It also positions itself against the sibling `pcb_create_nets_from_list` as the second leg of the same bridge, so an agent can place it precisely in the workflow 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the prerequisite ("after `pcb_create_nets_from_list`"), the correct input source (every (designator, pin, net) row of the compiled netlist), and a hard exclusion: nets must already exist, a binding to a missing net fails and does not create it. It even names `pcb_build_from_project` as the sibling that produces correctly ordered rows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_build_from_projectA
Build the PCB's net set and pad connectivity from the netlist.
The SCH->PCB bridge orchestrator (replaces the unscriptable ECO
netlist transfer): derives the distinct net list and every
(designator, pin, net) binding from the compiled netlist, creates
the missing nets (pcb_create_nets_from_list) and binds every
pad (pcb_bind_pad_nets) in two IPC round-trips.
It does NOT place footprints -- pcb_place_components exists for
that. Intended sequence: place components, then run this to build
nets and bind pads, then verify with proj_compare_sch_pcb.
Args:
netlist_csv_path: Optional path to a tabular netlist CSV
written by proj_export_netlist(net_format="tabular")
(component,pin,pin_name,net rows). Empty (default) =
pull the compiled netlist from the open project directly.
Returns:
Dict with components (distinct designators in the
netlist), nets_created, nets_existing, pads_bound,
failed, plus the missing_components /
missing_pads / missing_nets lists from the bind step.
| Name | Required | Description | Default |
|---|---|---|---|
| netlist_csv_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does the heavy lifting: it discloses that this is a mutating orchestrator that creates nets and binds pads in two IPC round-trips, that it replaces an otherwise unscriptable ECO transfer, and that it reports per-item failures. It stops short of saying what happens to pads already bound to a net or whether the operation is idempotent/atomic on partial failure, which matters for a bulk mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded with the core action, followed by mechanics and then sequence, which is the right order. The 'Returns:' block duplicates what the output schema already expresses and the hard-wrapped docstring formatting adds noise, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating orchestrator with one optional param, the description covers prerequisites, sequencing, exclusions, input format, and failure reporting. Since an output schema exists, the return section is a bonus rather than a requirement, leaving nothing essential missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter entirely, and it does: the CSV is described as tabular output from proj_export_netlist with the exact row shape (component,pin,pin_name,net), and the empty default is defined as pulling the compiled netlist from the open project. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Build the PCB's net set and pad connectivity from the netlist') and unpacks it into concrete mechanics: derive nets and (designator, pin, net) bindings, create missing nets, bind pads. It also names the two internal tools it composes and explicitly excludes footprint placement, so an agent can separate it from pcb_place_components and pcb_bind_pad_nets at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit order of operations: place components, then run this, then verify with proj_compare_sch_pcb. It also states the negative case ('It does NOT place footprints -- pcb_place_components exists for that') and names the producer of the optional CSV input (proj_export_netlist with net_format="tabular").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_impedanceA
Characteristic impedance of a PCB trace via IPC-2141 / Wadell closed-form approximations. Pure math, no Altium hit.
Use this BEFORE routing a high-speed signal to pick the track width that matches your transceiver's target impedance (USB 90 Ω diff, HDMI 100 Ω diff, single-ended PCIe 50 Ω, MIPI 100 Ω diff, etc). For controlled-impedance fab spec sheets, the accuracy of these closed-form formulas is ± ~10% -- good enough for picking widths but fab houses will refine the actual stackup. For real controlled-impedance boards, send the stackup to your fab and use their Polar Si9000 / similar report values.
Chaining with the layer stack: call pcb_get_layer_stackup
first to read the actual dielectric heights and εr values
from the project, then feed those into this calculator. This
is essential -- guessing FR-4 at εr=4.2 ignores the stackup
the user actually picked and can give a 15-20% off answer
if they're using Megtron 6 or Rogers.
Supported geometries:
"microstrip"-- single-ended outer-layer track with reference plane below. IPC-2141 microstrip formula."microstrip_diff"-- differential pair on outer layer. Adds Wadell's mutual-coupling correction."stripline"-- single-ended inner-layer track between two reference planes."stripline_diff"-- differential pair on an inner layer between two reference planes.
Formula sources:
IPC-2141 microstrip: Z₀ = (87 / √(εr + 1.41)) × ln(5.98 × h / (0.8 × w + t))
Symmetric stripline: Z₀ = (60 / √εr) × ln(4 × b / (0.67 × π × (0.8 × w + t)))
Differential variants apply the standard Wadell correction: Zdiff ≈ 2 × Z₀ × (1 - 0.48 × exp(-0.96 × s/h)) for microstrip, similarly with empirical coefficients for stripline.
Args:
geometry: One of "microstrip", "microstrip_diff",
"stripline", "stripline_diff".
width_mils: Track width in mils. For differential, this
is the width of EACH conductor (not the pair).
dielectric_height_mils: For microstrip, the dielectric
thickness BELOW the trace (track-to-reference-plane).
For stripline, this is the TOTAL dielectric thickness
between the two reference planes (b in IPC).
dielectric_constant: εr of the dielectric. Common: 4.2
(FR-4 at 1 GHz), 3.5 (Megtron 6), 3.0 (Rogers 4350B),
2.2 (PTFE). Default 4.2.
copper_oz: Copper weight in oz/ft² (used for t,
trace thickness). 1 oz = 1.378 mils. Default 1.0.
spacing_mils: Edge-to-edge gap between conductors of a
differential pair, in mils. Ignored for single-ended.
Returns:
Dict with:
- geometry, width_mils, dielectric_height_mils,
dielectric_constant, thickness_mils,
spacing_mils (when diff)
- z0_ohms: single-ended characteristic impedance
- zdiff_ohms (diff geometries only): differential
pair impedance
- propagation_delay_ps_per_inch: propagation delay,
derived from the effective εr (microstrip uses
εr_eff = (εr + 1)/2; stripline uses εr directly).
| Name | Required | Description | Default |
|---|---|---|---|
| geometry | Yes | ||
| copper_oz | No | ||
| width_mils | Yes | ||
| spacing_mils | No | ||
| dielectric_constant | No | ||
| dielectric_height_mils | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it states this is pure math with no Altium side effects, discloses ±10% accuracy, explains formula sources, and warns that fab houses should refine controlled-impedance stackups. This is unusually transparent for a calculation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured and front-loads purpose, usage, and chaining guidance before details. It is somewhat long and includes formula blocks plus a Returns section that is redundant with the output schema, but most of the length is justified by the tool's technical complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high technical complexity, zero schema descriptions, no annotations, and the presence of an output schema, the description is complete: it covers when to use the tool, prerequisite stackup data, supported geometries, parameter meanings, accuracy limitations, and expected outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by documenting all six parameters, including geometry values, the meaning of width for differential pairs, the differing meaning of dielectric height for microstrip vs. stripline, common εr values, copper-oz conversion, and that spacing is ignored for single-ended geometries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb/resource: calculating characteristic impedance of a PCB trace using IPC-2141/Wadell approximations. It distinguishes itself from Altium-modifying tools by saying 'Pure math, no Altium hit,' but does not differentiate itself from the closely related sibling pcb_calc_trace_width_for_impedance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use before routing high-speed signals, with examples such as USB 90 Ω diff and HDMI 100 Ω diff. It also names the prerequisite chaining step pcb_get_layer_stackup, though it does not explicitly route the agent to or away from the sibling pcb_calc_trace_width_for_impedance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_length_matchA
Length-match tolerance and serpentine compensation for a bus / pair.
Turns a timing budget into the length-match window the routing must hold,
and -- given the routed lengths -- the serpentine copper each net needs.
The complement of Altium's pcb_tune_length (which executes the
meander) and pcb_get_trace_lengths (which reads lengths back). Pure
math, no Altium. Rests on the ns/in == ps/mil identity, so skew maps to
length exactly; propagation speed uses the effective dielectric constant
(stripline = Er, the usual inner-layer bus case; microstrip reduced).
The skew budget is taken from skew_budget_ps if > 0, else from
match_fraction * rise_time_ns (the "match to within 10-20 % of the
edge" rule).
Args:
lengths: Optional {net: length_mils} of routed lengths; when
given, returns a per-net match report targeting the longest net.
skew_budget_ps: Allowed skew in ps (e.g. a DDR byte-lane budget).
rise_time_ns: Edge rate, used with match_fraction if no ps budget.
match_fraction: Fraction of the rise time allowed as skew (default 0.1).
dielectric_constant: er (default 4.2 FR-4).
geometry: stripline (default) or microstrip.
width_mils, dielectric_height_mils: Microstrip geometry for the
Hammerstad Er_eff (optional).
Returns:
{"ok": True, "er_eff", "t_pd_ps_per_mil", "skew_budget_ps", "tolerance_mils", "members"?: [{net, length_mils, mismatch_mils, skew_ps, compensation_mils, within_tolerance}], "target_length_mils"?, "worst_skew_ps"?, "all_matched"?, "summary"}.
| Name | Required | Description | Default |
|---|---|---|---|
| lengths | No | ||
| geometry | No | stripline | |
| width_mils | No | ||
| rise_time_ns | No | ||
| match_fraction | No | ||
| skew_budget_ps | No | ||
| dielectric_constant | No | ||
| dielectric_height_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden, and it does: 'Pure math, no Altium' tells the agent this is a side-effect-free computation that needs no open board, and it discloses the underlying model (ns/in == ps/mil identity, stripline vs microstrip Er_eff, Hammerstad). It stops short of stating determinism or error behavior for invalid geometry/zero inputs, which is the only material gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then the sibling routing, then the physical model, then Args/Returns. Well structured and mostly earns its space, though the propagation-speed rationale runs slightly longer than needed for selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter pure-math tool with a 0% schema description coverage, the description closes every gap an agent needs: purpose, alternatives, model assumptions, per-parameter semantics with defaults, and the shape of both return modes. An output schema exists, so the Returns block is a bonus rather than a crutch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it names all eight parameters with meaning and defaults: lengths as {net: length_mils}, match_fraction default 0.1, dielectric_constant default 4.2 FR-4, geometry stripline/microstrip, width_mils and dielectric_height_mils flagged as microstrip-only. The interaction between skew_budget_ps, rise_time_ns, and match_fraction is spelled out rather than left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Length-match tolerance and serpentine compensation for a bus/pair') and immediately differentiates itself from the two nearest siblings, pcb_tune_length (executes the meander) and pcb_get_trace_lengths (reads lengths back). An agent can tell exactly what class of operation this is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool as the complement of two named siblings and describes both modes: budget-only (returns the tolerance window) versus with routed lengths (returns a per-net compensation report targeting the longest net). It also states the precedence rule for the skew budget (skew_budget_ps if > 0, else match_fraction * rise_time_ns). Little 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_calc_polygon_areaA
Report the area of each copper polygon on the active board.
Returns each polygon's overall boundary area in square mils and square millimetres, optionally filtered by net and/or layer. Useful for estimating copper coverage / plane area.
Args: net: Only polygons on this net (optional). layer: Only polygons on this layer name (optional).
Returns:
Dict with polygons (each: name, net, layer, area_sq_mils,
area_sq_mm) and count.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the disclosure burden; it makes clear this is a read-only reporting operation and clarifies that the area reported is the 'overall boundary area' (addressing hole handling). It says nothing about cost, board-state prerequisites, or behaviour when no polygons match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by units, filtering, and a use case; the Args block is tight. The Returns block restates information already carried by the output schema, which is mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param read-only calculation with an output schema, the description covers purpose, filtering, units, and the qualitative caveat about boundary area. Minor gaps remain around default empty-string behaviour and result ordering/failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain both parameters: net restricts to polygons on that net, layer restricts by layer name, both optional. It does not specify matching semantics (exact name vs substring) or that empty string means 'no filter'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reports the area of each copper polygon on the active board, which is meaningfully distinct from listing polygons. It doesn't explicitly contrast with siblings like pcb_get_polygons or pcb_get_board_statistics, so an agent must infer which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for estimating copper coverage / plane area' gives a use context, but there is no explicit when-to-use vs when-not guidance and no sibling is named. The 'optionally filtered by net and/or layer' phrasing implies the filtering workflow but leaves the choice of alternatives to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_terminationA
Decide if a net needs termination and size the resistor(s).
Two questions the impedance calc does not answer: is this net
electrically long for its edge rate, and -- if so -- what termination
value? A net stays a lumped wire while its one-way flight time is under
length_fraction of the rise time (Johnson & Graham's 1/6 rule by
default; pass 1/2 for the looser convention); past the critical length
the reflection arrives during the edge and the net must be matched to
z0_ohms. Pure math, no Altium. Propagation speed uses the effective
dielectric constant (Er for stripline; reduced for microstrip, Hammerstad
when width_mils/dielectric_height_mils are given, else the
0.475*Er+0.67 approximation).
Args:
length_mils: Routed (or estimated) net length.
rise_time_ns: Signal edge rate (the driver's 10-90 % rise time).
z0_ohms: Line characteristic impedance (size it with
pcb_calc_impedance; default 50).
dielectric_constant: er (default 4.2 FR-4).
geometry: microstrip or stripline.
driver_impedance_ohms: Driver output impedance, subtracted for the
series value (Rs = Z0 - Rdriver).
vcc: Supply rail; enables the Thevenin split option when > 0.
width_mils, dielectric_height_mils: Microstrip geometry for the
Hammerstad Er_eff (optional; falls back to the approximation).
length_fraction: Electrically-long threshold (default 1/6).
multi_load: True for a bus / multi-receiver net (recommends
far-end Thevenin/parallel instead of source series).
Returns:
{"ok": True, "needs_termination", "recommended", "critical_length_mils", "flight_time_ns", "options": {...}, "summary"} -- options carries
the ideal and nearest-E24 resistor values (and the AC cap) for every
applicable scheme.
| Name | Required | Description | Default |
|---|---|---|---|
| er | No | ||
| z0 | No | ||
| vcc | No | ||
| z0_ohms | No | ||
| geometry | No | microstrip | |
| multi_load | No | ||
| width_mils | No | ||
| height_mils | No | ||
| length_mils | Yes | ||
| rise_time_ns | Yes | ||
| length_fraction | No | ||
| driver_impedance | No | ||
| dielectric_constant | No | ||
| driver_impedance_ohms | No | ||
| dielectric_height_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does state the key behavioral fact: 'Pure math, no Altium' — no design mutation, no side effects. It also discloses the underlying model (Johnson & Graham 1/6 rule, Hammerstad Er_eff, the 0.475*Er+0.67 fallback), which is the sort of context annotations could never provide. It does not discuss precision/rounding limits of the math, a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long but front-loaded: the decision the tool makes comes first, then the physical rationale, then Args, then Returns. The prose in the rationale paragraph is dense but each sentence carries technical content. The duplicate-parameter aliasing is not addressed anywhere, which is the one structural omission.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter engineering calculator with no annotations, the definition supplies the physics, the defaults, the unit conventions, and an explicit return shape with the meaning of the options map. An output schema exists, so the Returns block is bonus rather than required. The remaining hole is the alias parameters, which leaves ambiguity about which name an agent should pass.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it gives units, defaults, and derivation for length_mils, rise_time_ns, z0_ohms, dielectric_constant, geometry, driver_impedance_ohms ('Rs = Z0 - Rdriver'), vcc, width_mils/dielectric_height_mils, length_fraction, and multi_load. However, four schema parameters — er, z0, height_mils, and driver_impedance — are undocumented aliases with no stated precedence over their canonical counterparts, which an agent could easily misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: 'Decide if a net needs termination and size the resistor(s).' It also positions itself explicitly against the sibling it complements ('Two questions the impedance calc does not answer'), so an agent can separate it from pcb_calc_impedance without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the decision context (electrically-long check, then termination value) and names the alternate convention (length_fraction 1/2 vs the 1/6 default) and the multi_load case that routes to Thevenin/parallel rather than series. It lacks an explicit 'do not use this when…' exclusion, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_thermal_viasA
Size a thermal-via field under a power pad (Fourier conduction).
The thermal calcs answer "what junction-to-ambient resistance does the
part need" (required_theta_ja); this answers "how many vias get the
heat into the board". A plated via is a copper tube of axial resistance
R = L / (k * A); vias conduct in parallel (R_array = R/N). Give a
target -- target_k_per_w directly, or power_w with a delta_t_c
budget (target = dT/P) -- to solve the count, or an explicit
via_count to score a layout. Pure math, no Altium. Models the via
field's conduction bottleneck and assumes good copper spreading on the
pad and the receiving plane (a thin-copper spreading term is left to a
field solver).
Args:
drill_mm: Finished via drill diameter.
board_thickness_mm: Conduction length -- top layer to the heat- The EasyEDA and KiCad builds
spell this length_mm; either is accepted.
length_mm: Alias for board_thickness_mm.
spreading plane (full thickness for a bottom plane).
plating_um: Barrel plating thickness (default 25 = 1 oz).
filled_copper: True for a copper-filled via (full-circle copper),
False for an unfilled / resin-filled barrel (annulus only).
k_cu: Copper thermal conductivity, W/(m.K) (default 385).
power_w: Dissipation, for the target (with delta_t_c) and the
realized temperature rise.
delta_t_c: Allowed rise across the via field.
target_k_per_w: Explicit target array resistance.
via_count: Score this exact count instead of solving one.
Returns:
{"ok": True, "via_count", "single_via_k_per_w", "array_k_per_w", "target_k_per_w", "temp_rise_c", "barrel_area_mm2", "summary"}.
| Name | Required | Description | Default |
|---|---|---|---|
| k_cu | No | ||
| power_w | No | ||
| drill_mm | Yes | ||
| delta_t_c | No | ||
| length_mm | No | ||
| via_count | No | ||
| plating_um | No | ||
| filled_copper | No | ||
| target_k_per_w | No | ||
| board_thickness_mm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well by stating it is pure math with no Altium interaction, explaining the parallel-resistance model, and disclosing assumptions about copper spreading. It does not explicitly cover validation behavior or error cases when the target inputs are insufficient, so it is strong but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but justified by the 10-parameter, zero-schema-description context, and it is front-loaded with purpose and usage before details. The Args block is useful, but the malformed conduction-length text and some redundant return-value detail reduce structure quality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 10 parameters, 0% schema coverage, and an output schema, the description is substantially complete: it explains the physical model, target modes, parameters, assumptions, and return fields. The main gap is the garbled board_thickness_mm/length_mm explanation, which slightly undermines otherwise strong completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does by explaining each parameter's meaning, units, defaults, aliases, and modes. However, the board_thickness_mm and length_mm explanations are garbled or split awkwardly, leaving the conduction-length description less clear than the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: sizing a thermal-via field under a power pad using Fourier conduction. It clearly distinguishes this calculation from the thermal junction-to-ambient calculation and from placement-oriented via sibling tools by stating that this answers how many vias get heat into the board. An agent can identify the tool's 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use this to solve via count from a target resistance or from power and delta-T, or to score an explicit via_count. It also distinguishes the calculation from the related thermal calculation. It does not name specific sibling alternatives such as via placement tools or state exclusions, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_trace_width_for_currentA
Minimum track WIDTH to carry a target current (inverse IPC-2221).
The design-time complement of pcb_calc_track_current_capacity:
instead of "what current does this width carry?", it answers "I need N
amps, how wide?". Pure math, no Altium hit.
Solves I = k * dT^0.44 * (h*w)^0.725 for w with the same
constants as the forward tool (so they round-trip), k = 0.048
external / 0.024 internal, h = copper_oz * 1.378 mils.
Args:
current_amps: Target current the track must carry. The
EasyEDA and KiCad builds spell this current_a;
either is accepted here, so one call works on any
backend.
current_a: Alias for current_amps.
copper_oz: Copper weight, oz/ft^2 (0.5 / 1.0 / 2.0 / 3.0).
delta_t_c: Allowed temperature rise above ambient (10 degC is a
common conservative budget; 20-30 degC for tight boards).
layer: "external" (top/bottom) or "internal" (inner; needs
~2.6x the width for the same rise).
margin: Fractional widening above the bare IPC minimum for the
recommendation (default 0.2 = 20 %).
length_mils: If > 0, also returns DC resistance and voltage drop at
the recommended width.
Returns:
{"ok": True, "min_width_mils", "recommended_width_mils", "copper_oz", "delta_t_c", "layer", ...optional resistance/drop}
or {"ok": False, "reason": ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | external | |
| margin | No | ||
| copper_oz | No | ||
| current_a | No | ||
| delta_t_c | No | ||
| length_mils | No | ||
| current_amps | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: 'Pure math, no Altium hit' tells the agent this is a side-effect-free computation that touches no design document, which is the critical safety fact. It also discloses the exact formula and constants used, notes round-trip consistency with the forward tool, and describes both success and {"ok": False, "reason": ...} failure shapes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the sibling relationship are front-loaded in the first two sentences, and the Args/Returns blocks are information-dense rather than padded. It is somewhat long and restates the formula twice, but nearly every line carries actionable detail an agent would otherwise have to infer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter computation tool with no annotations, the description covers the physics, the safe/stateless nature, per-parameter meaning and units, defaults, and the conditional extra outputs. An output schema exists, and the description's return summary is consistent with it, so nothing material is missing before invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must do all the work and it does: every one of the 7 parameters is explained, including the current_amps/current_a alias (backend portability), copper_oz allowed values (0.5/1.0/2.0/3.0), layer's external/internal semantics with the ~2.6x width penalty for inner layers, margin's default 20% widening, and length_mils' >0 trigger for resistance/voltage-drop output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (compute minimum track WIDTH for a target current) and immediately frames it against a named sibling: the inverse of pcb_calc_track_current_capacity, answering 'I need N amps, how wide?' rather than 'what current does this width carry?'. The IPC-2221 basis and formula make the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the forward tool pcb_calc_track_current_capacity for the opposite question, and gives practical selection guidance for delta_t_c (10 degC conservative, 20-30 for tight boards). It does not mention the other width sibling, pcb_calc_trace_width_for_impedance, nor state when not to use this tool, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_trace_width_for_impedanceA
Trace WIDTH to hit a target impedance (inverse of pcb_calc_impedance).
The design-time complement: instead of "what impedance does this width
give?", it answers "I need 90 ohm USB / 100 ohm HDMI differential, or
50 ohm single-ended; how wide?". Inverts the same IPC-2141 / Wadell
closed forms, so it round-trips with the forward calc. Pure math, no
Altium. Same +/-10 % caveat -- a fab field solver refines the stackup;
read the real dielectric heights / er with pcb_get_layer_stackup.
Args:
target_ohms: Single-ended Z0 for microstrip/stripline, or
the differential Zdiff for microstrip_diff/
stripline_diff.
geometry: One of microstrip, microstrip_diff, stripline,
stripline_diff.
dielectric_height_mils: Trace-to-plane height (microstrip) or full
between-plane thickness (stripline).
dielectric_constant: er (default 4.2 FR-4).
copper_oz: Copper weight for trace thickness (default 1.0).
spacing_mils: Edge-to-edge gap (required for *_diff).
Returns:
{"ok": True, "width_mils", "single_ended_z0_ohms", "feasible", ...} (feasible False when the target needs a width <= 0: raise the
dielectric height or lower the target), or {"ok": False, ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| geometry | Yes | ||
| copper_oz | No | ||
| target_ohms | Yes | ||
| spacing_mils | No | ||
| dielectric_constant | No | ||
| dielectric_height_mils | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: 'Pure math, no Altium' tells the agent it does not mutate the PCB document (critical in a suite where nearly everything else writes), it discloses the +/-10% accuracy limit and that a fab field solver refines the stackup, and it spells out the failure mode (feasible=False when width would be <= 0, plus the remedy).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scope in the first two lines, and the Args block is justified by zero schema coverage. The Returns block partially restates the existing output schema, so a little length is redundant, though the feasible=False guidance is behavioral rather than schema-derived.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, 3-required numeric calculator with no annotations, everything an agent needs is present: parameter meanings, unit conventions, validity caveats, the failure case, and which sibling tool supplies trustworthy inputs. An output schema exists, so return-value detail is a bonus rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema has no enum for geometry, so this is where the description earns its keep: it enumerates the four geometry values, explains that target_ohms means Z0 for single-ended but Zdiff for *_diff variants, distinguishes trace-to-plane vs between-plane meaning of dielectric_height_mils, and flags spacing_mils as required for *_diff despite its schema default of 0.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+goal: 'Trace WIDTH to hit a target impedance', immediately qualified as the 'inverse of pcb_calc_impedance'. That single parenthetical distinguishes it from the forward-calc sibling in a suite with ~300 tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Frames the exact usage scenario ('design-time... I need 90 ohm USB / 100 ohm HDMI differential, or 50 ohm single-ended; how wide?') and names the alternative it inverts (pcb_calc_impedance). It also prescribes a prerequisite step: read real dielectric heights/er via pcb_get_layer_stackup rather than relying on defaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_calc_track_current_capacityA
IPC-2221 current-carrying capacity for a PCB track.
Pure math, no Altium hit -- safe to call without an attached session. Returns the current the track can sustain at each of several temperature rises (1, 5, 10, 20, 30 °C above ambient), plus DC resistance if a length is supplied.
Formula (IPC-2221, also IPC-2152's curve-fit predecessor):
I = k × (ΔT)^0.44 × (h × w)^0.725
where h and w are in mils, ΔT in °C, and:
k = 0.048 for external layers (top, bottom)
k = 0.024 for internal layers (mid)
Internal-layer derating is the dominant correction; running a
signal that draws 5 A on TopLayer might be fine but on an
inner plane the same width only handles ~3 A at the same
ΔT because heat dissipates more slowly.
Copper thickness conversion: 1 oz/ft² ≈ 1.378 mils. So
copper_oz=1.0 → h = 1.378 mils, copper_oz=2.0 →
h = 2.756 mils.
Resistance: R = ρ × L / (h × w) with ρ = 6.7 × 10⁻⁷ Ω-mil
(annealed copper, 25 °C). Multiply current × resistance to
get voltage drop across the track.
Exposes the track-current math so the agent can apply it
across an entire power net after pulling track widths from
pcb_get_trace_lengths.
Args:
width_mils: Track width in mils.
copper_oz: Copper weight in oz/ft². Common values:
0.5 oz (HDI inner), 1.0 oz (standard), 2.0 oz (power
planes), 3.0 oz (heavy-current).
layer: "external" (top / bottom) or "internal"
(mid / inner planes). Defaults to external.
length_mils: If > 0, also returns DC resistance and
voltage drop at each temperature rise.
Returns:
Dict with:
- width_mils, copper_oz, thickness_mils, layer
- current_amps (dict, keys 1c, 5c, 10c,
20c, 30c)
- resistance_mohm (only if length_mils > 0)
- voltage_drop_mv (only if length_mils > 0, dict
keyed same as current_amps)
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | external | |
| copper_oz | No | ||
| width_mils | Yes | ||
| length_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so well: it declares no-session/no-side-effect behavior, explains internal-vs-external derating with a concrete 5 A vs 3 A example, and discloses conditional outputs (resistance/voltage drop only when length_mils > 0). This is the kind of context an agent needs to trust calling it in a batch loop.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and sectioned (formula, derating rationale, unit conversion, Args, Returns), but it is long and partly redundant: an output schema already exists, so the verbose Returns block re-specifies what structured data provides, and the derating paragraph is explanatory padding for a pure-math call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An agent has everything needed to call it correctly: units, defaults, allowed layer values, conditional-output trigger, the underlying formula, and how to chain it with pcb_get_trace_lengths for a net-wide check. Nothing material is missing for a stateless calculation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does fully: width_mils units, copper_oz with four named typical values (0.5/1.0/2.0/3.0 oz), layer with both permitted values and its default, and length_mils' threshold behavior at 0. It even supplies the oz→mil conversion so the agent can sanity-check inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'IPC-2221 current-carrying capacity for a PCB track', and the formula and inputs make clear it maps width/copper/layer → current. It never names the inverse sibling `pcb_calc_trace_width_for_current` (or `pcb_calc_impedance`, `pcb_calc_thermal_vias`), so an agent must infer the direction difference from the formula alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage precondition ('Pure math, no Altium hit -- safe to call without an attached session') and a concrete workflow hook ('apply it across an entire power net after pulling track widths from pcb_get_trace_lengths'). It does not explicitly state when to prefer this over the width-for-current sibling, so the boundary is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_check_placement_collisionA
Dry-run check whether moving a component to (x, y[, rotation]) would overlap any other placed component on the same side.
DOES NOT actually move the component. Computes the predicted
axis-aligned bounding box at the proposed pose, then AABB-tests
against every other component's current bounding rect. Use this
BEFORE every pcb_move_components call when placing parts on a
board that already has placed parts.
Args: designator: Component to test (must exist on the board). x: Proposed X position in mils (component reference point). y: Proposed Y position in mils. rotation: Proposed rotation in degrees. When None the target's current rotation is used. Quarter-turn deltas (~+/-90 from current) swap the AABB dimensions; other angles use the current-orientation bbox as an approximation. margin_mils: Extra clearance to require around the target. Default 0 (touching bounding boxes count as collision).
Returns: Dict with: - designator: target. - proposed: {x, y, rotation, bbox:{x1,y1,x2,y2}, margin_mils}. - clear: True if no collisions, False otherwise. - colliding_count: number of collisions. - colliding: list of {designator, bbox:{...}} per collider.
Caveats: - AABB only; rotated non-square footprints will report an inflated bbox. - Same-side check is automatic; the target's bbox is compared only against components on the same layer (Top vs Bottom). - Does not detect courtyard violations or pad-to-pad clearances, only solid-box overlap. Use DRC for actual clearance rules.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| rotation | No | ||
| designator | Yes | ||
| margin_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does: it discloses the read-only dry-run nature, the exact algorithm (predicted AABB vs. every other component's current bbox), the same-side-only comparison rule, the rotation-swap approximation, and three concrete limitations (inflated bbox for rotated non-square parts, no courtyard/pad-to-pad clearance). It also fully specifies the return payload even though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose and the critical negative claim, then structured Args/Returns/Caveats. Every caveat earns its place, but the Returns block restates what the existing output schema already provides, so it is slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter check tool with no annotations, the definition covers trigger conditions, algorithm, unit conventions, defaults, approximate cases, and explicit non-goals. Nothing an agent needs in order to call it correctly and interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for all five parameters: units (mils), reference point, the None-means-keep-current-rotation default, the quarter-turn AABB swap behavior, and margin_mils default with the semantic that touching boxes count as collision. This adds real meaning beyond the bare typed properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (dry-run collision check of a proposed placement) and immediately delimits scope: "DOES NOT actually move the component." It explicitly distinguishes itself from the mutation sibling pcb_move_components, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger — "Use this BEFORE every `pcb_move_components` call when placing parts on a board that already has placed parts" — and an explicit when-not in the caveats: use DRC for real clearance/courtyard rules. Both the alternative and the condition selecting it are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_cleanup_tracksA
Tidy stray track geometry: delete slivers and/or merge collinear runs.
Modes:
"slivers" (default): delete every track shorter than min_length_mils. Catches the zero/near-zero stubs left behind by editing.
"merge": join two collinear, same-layer, same-width, same-net tracks that meet end to end into a single track. The merge only fires when the shared point is a clean degree-2 junction (exactly those two track ends, with no via, pad, arc, or third track present), so it is safe to run on routed copper without breaking connectivity.
"both": slivers pass, then merge pass.
Args: mode: "slivers", "merge", or "both" (default "slivers"). min_length_mils: Sliver threshold (default 1).
Returns: {"slivers_deleted", "merged", "mode"}.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | slivers | |
| min_length_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that slivers mode permanently deletes geometry below a threshold, and it spells out the exact preconditions under which merge fires (degree-2 junction, no via/pad/arc/third track) and claims it is 'safe to run on routed copper without breaking connectivity'. It stops short of stating undo/reversibility or whether an open board must be active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary, then a mode block, then args, then returns — a clean hierarchy. The trailing Args/Returns sections partially restate schema and output schema, which costs a little, but nothing is padded or vague.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive cleanup mutation with no annotations and only two loosely typed params is well covered: modes, thresholds, safety preconditions and the returned triple (slivers_deleted, merged, mode) are all explained. The remaining gap is operational context — permissions, whether a board must be focused, and undo behavior — which an agent would still want before calling a delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: the allowed values and default for mode ('slivers', 'merge', 'both', default 'slivers') and the meaning, unit and default of min_length_mils ('Sliver threshold (default 1)') are all stated, which is more than the bare schema types give.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+outcome ('Tidy stray track geometry: delete slivers and/or merge collinear runs') and immediately enumerates the two distinct operations. An agent can tell without opening the schema which of its many PCB siblings (pcb_delete_invalid_objects, pcb_trim_extend_track, pcb_normalize_vias) this one is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each mode is given a clear when-to-use condition: slivers 'catches the zero/near-zero stubs left behind by editing', merge applies to collinear same-layer/same-width/same-net pairs, and 'both' runs them in order. It never names a sibling tool or a when-not-to-use case (e.g. use pcb_delete_invalid_objects instead), so routing 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.
pcb_clear_source_footprint_libraryA
Clear Comp.SourceFootprintLibrary on board components.
Background: when a project is created from an Integrated
Library, every placed component remembers WHICH library it
came from. If the user later renames, moves, or consolidates
that library, ECO and "Update From Library" start failing
with "library not found" warnings because the component
still points at the stale path. Clearing
SourceFootprintLibrary unpins it so Altium re-matches by
library-reference name from whatever's currently in
Available Libraries.
This is a standard step when consolidating multiple legacy libraries into a single curated library: drop the new lib into Available Libraries, call this tool, then run an ECO -- the components now bind to the new library.
Generalized with an optional filter.
Args:
designator_filter: Restrict to these designators
(e.g. ["U1", "U5"]). None / empty clears all
components on the board. Match is case-sensitive
whole-string.
Returns:
Dict with {total, cleared}. total counts components
inspected after filter; cleared counts ones that
actually had a non-empty SourceFootprintLibrary cleared.
| Name | Required | Description | Default |
|---|---|---|---|
| designator_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it well: it explains what is being unset, what Altium does afterward (re-match by library-reference name), and where it fits in a workflow. It omits practical preconditions such as needing an active PCB document and whether the change is persisted in-memory versus on disk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action is front-loaded in the opening sentence and the rest is well-organized into background, workflow, args, and returns. The failure-mode narrative is slightly verbose for the decision it supports, but every paragraph carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation tool with an output schema, this covers purpose, motivation, sequencing, filter behavior, and even return-value semantics ({total, cleared}). An agent has everything needed to call it correctly and to explain the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it defines the filter's meaning, the None/empty behavior ('clears all components on the board'), the example format (["U1", "U5"]), and the matching rule (case-sensitive whole-string). Nothing about the single parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence gives a specific verb and a precisely named target property on a named object class ('Clear Comp.SourceFootprintLibrary on board components'), which is far beyond a tautology of the tool name. The background makes the effect of the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the triggering conditions (library renamed/moved/consolidated, 'library not found' ECO or Update-From-Library failures) and gives an ordered recipe: install new lib into Available Libraries, call this tool, run ECO. It does not, however, reference the obvious sibling alternatives (lib_clear_source_library, sch_clear_source_library) that an agent could confuse this with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_copy_component_placementA
Clone placement from source components onto destination components.
For each src -> dst pair, copy the source's PCB placement
(layer, X, Y, rotation) onto the destination. With the optional
flags also clone the designator-text placement (X/Y offset from
component centre, rotation, size, width, layer, on/off) and the
comment-text placement.
Real-world use: a board with N identical channels (filter / amp /
switching stages). Lay out channel 1 once, then call this tool
with a mapping like {"R1": "R11", "C1": "C11", "U1": "U2"}
and channel 2 picks up channel 1's layout instantly. Saves the
manual click-and-drag-drag-drag of replicating identical layouts.
Mapping-driven rather than relying on sort-order matching of selections -- the agent-callable equivalent of a manual replicate.
Args:
mapping: {source_designator: dest_designator}. Each
source must already be placed somewhere; each dest gets
overwritten with the source's placement.
include_designator: Also copy designator-text placement
(offset, rotation, size, layer, visibility). Default
True.
include_comment: Also copy comment-text placement. Default
True.
Returns:
Dict with:
- applied: pairs that succeeded
- failed: pairs that failed (src/dst missing or apply
exception)
- items: per-pair {src, dst, ok, error}
| Name | Required | Description | Default |
|---|---|---|---|
| mapping | Yes | ||
| include_comment | No | ||
| include_designator | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses that destination placement is overwritten (a destructive, non-additive effect), that sources must already be placed, that flags control whether text placements are also overwritten, and how failures are reported per pair. It omits reversibility/undo behavior and any edit-mode or document-state prerequisites, which keeps it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is strong – purpose first, then the concrete channel-replication scenario, then args, then returns – so the key constraint is front-loaded. Some prose is decorative ('Saves the manual click-and-drag-drag-drag') and the Args block partially duplicates what a richer schema would say, but with 0% schema coverage it earns most of its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no annotations, the description covers purpose, preconditions, destructive effect, parameter meanings, and the failure model (applied/failed/items). An output schema exists, yet the Returns block still adds useful semantics about partial success, which an agent needs to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% – the input schema only has titles and defaults – so the description must carry the whole load, and it does: mapping is defined as {source_designator: dest_designator} with the precondition that each source is already placed, and both booleans are spelled out in terms of exactly what text properties get cloned, with their defaults restated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: clone PCB placement (layer, X, Y, rotation) from source components onto destinations, plus optional designator/comment text. It is clearly a placement-copy operation, but it never distinguishes itself from near-siblings like pcb_replicate_layout, pcb_import_placement, or pcb_align_components, so the agent must infer which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Real-world use' paragraph gives a concrete triggering scenario (N identical channels, lay out channel 1 then replicate) with a sample mapping, which makes the when-to-use condition clear. It does not say when NOT to use it or name the alternative tool for overlapping cases, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_copy_designators_to_mechB
Copy each component designator onto a mechanical layer (assembly prep).
Places a .Designator special-string text on layer over every
component, for an assembly drawing that survives silkscreen edits.
Args: layer: target mechanical layer (default Mechanical1).
Returns: {"copied": N, "layer": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | Mechanical1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full disclosure burden. It usefully explains what object type is created and why (assembly drawing durable against silkscreen edits), but omits key mutation behavior: whether repeat calls duplicate text, whether existing designator text is replaced, and whether the board must be open/active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operative sentence is front-loaded and the Args/Returns blocks are short. Slight redundancy in restating the return shape that the output schema already covers, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, purpose and effect are adequately conveyed. What is missing is the idempotency/precondition information that determines whether an agent can safely call it twice or on any board state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single `layer` param. It clarifies that `layer` is a *mechanical* layer and repeats the default 'Mechanical1', but adds no accepted value format or naming rules beyond what the schema default already shows, leaving the gap only partly closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (copy component designators onto a mechanical layer) plus the concrete mechanism: it places `.Designator` special-string text over every component. That is far more specific than the tool name alone, though it never explicitly contrasts itself with silkscreen-placement siblings such as pcb_autoplace_silkscreen.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(assembly prep)' and the clause 'for an assembly drawing that survives silkscreen edits' imply when to use it. There is no explicit when-not guidance, no named alternative for putting designators on silkscreen, and no stated preconditions (active board, existing components).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_copy_tracks_radialA
Array the selected tracks/arcs/vias radially about a center point.
Replicates the current selection count - 1 more times, each rotated
a further angle_step degrees about (center_x, center_y) -- a
circular/radial copy. Reuses the same verified Replicate +
RotateAroundXY transform as pcb_replicate_layout. Copies are added
unselected so the source set stays put.
Args:
center_x: Rotation-center X in mils.
center_y: Rotation-center Y in mils.
count: Total instances including the original (>= 2).
angle_step: Degrees between instances. Defaults to 360 / count
(a full even ring).
Returns: {"copied", "count", "angle_step"} or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | ||
| center_x | Yes | ||
| center_y | Yes | ||
| angle_step | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral load well: it discloses that copies are left unselected so the source set stays put, and that the transform is the same verified one used by pcb_replicate_layout. It is thin on failure modes (just 'or an error') and says nothing about undo or layer/net implications of the copied primitives.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core behavior is front-loaded in the first two sentences, followed by conventional Args/Returns sections. Mild waste from reST double-backticks and some repetition of the count/angle semantics between prose and Args.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers selection precondition, geometry semantics, default derivation, and side effects (unselected copies), which is everything needed for a 4-parameter mutation tool. An output schema exists, and the description's brief Returns note is consistent rather than redundant filler.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (bare titles), so the description must compensate and does: units for center_x/center_y (mils), the meaning of count as total instances including the original, and angle_step's default of 360/count with the 'full even ring' interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: radially array the selected tracks/arcs/vias about a center point, replicating them count-1 times. It also positions itself relative to pcb_replicate_layout by noting it reuses the same Replicate + RotateAroundXY transform, so an agent can tell the two apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes clear this acts on the current selection (not on named objects) and that count must be >= 2, which is enough context to invoke it correctly. It does not explicitly state when to prefer it over pcb_replicate_layout or pcb_place_via_array, so the alternative-selection 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.
pcb_create_design_ruleA
Create a new design rule on the active PCB.
Args:
name: Rule name (e.g., "Min Clearance 6mil").
rule_type: Type of rule to create. Options:
"clearance" - Electrical clearance (value = gap in mils).
"width" - Track width constraint (value = min width
in mils; max_value / favored_value optional).
"via_size" - Hole size constraint (value = min hole
in mils; max_value optional).
"differential_pairs" - Differential-pair routing rule
(value = min gap, max_value = max gap,
favored_value = preferred gap, max_uncoupled_length =
max uncoupled length in mils).
"solder_mask_expansion" - The mask opening at each pad
and via site (value = radial expansion in mils,
SIGNED). A negative value contracts the opening,
which is how a via ends up covered. Scope it with
"IsVia" to tent vias and leave pads alone.
"paste_mask_expansion" - Same shape, stencil side
(value = radial expansion in mils, signed).
"vias_under_smd" - Whether the autorouter may put a
via inside an SMD pad. Boolean: set allowed, not
value. This is the DRC that catches via-in-pad,
which needs filling and capping at fabrication.
value: Rule's primary value in mils. For width / via_size /
differential_pairs this is the MIN side. Default 10.
max_value: For width / via_size / differential_pairs. When
supplied, sets the MAX side independently of value. When
None, falls back to 5x value (legacy default).
favored_value: For width / differential_pairs. Sets the
preferred value. Defaults to value when None.
max_uncoupled_length: For differential_pairs only.
MaxUncoupledLength in mils (single scalar, not per-layer).
Defaults to 1000 mils when None.
scope: Optional query expression for Scope1. Pick the
predicate that matches the rule kind:
- net-based rules (clearance, width, via_size):
"InNet('GND')", "InNetClass('Power')",
"All".
- differential_pairs: "InDifferentialPair('USB')",
"InDifferentialPairClass('HighSpeed')",
"IsDifferentialPair" (matches any diff pair),
or "All".
Mixing predicates across kinds (e.g., InNet on a
differential_pairs rule) creates a rule that never matches.
Bracket a comparison joined by And/Or/Xor/Not:
"IsPad And (HoleSize > 3)", or use &&/||.
Altium binds And tighter than >, and an unbracketed
"IsPad And HoleSize > 3" is refused before anything
is sent, with the bracketed form in suggested_scope.
net_scope: Which nets the rule applies between. Options:
"different_nets" (default) for Clearance rules;
"any_net" for all-pairs; "same_net" for same-net
only. Has no effect on differential_pairs, and none on
the mask or vias_under_smd kinds, which are not
net-pair rules.
allowed: For vias_under_smd only. False forbids a via inside
an SMD pad. Omitted means True, which is Altium's own
default and creates a rule that changes nothing, rather
than one that silently bans via-in-pad board-wide.
Returns: Dictionary with created rule details.
Note: Creating ComponentClearance, HoleToHoleClearance,
BoardOutlineClearance, and other newer rule kinds is not
supported on this Altium build because the relevant symbolic
constants (eRule_ComponentClearance, ...) are not exposed in
DelphiScript. Existing rules of those kinds can be UPDATED via
pcb_set_rule_properties (gap_mils field), which dispatches
through Rule.RuleKind without needing the symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| scope | No | ||
| value | No | ||
| allowed | No | ||
| max_value | No | ||
| net_scope | No | different_nets | |
| rule_type | No | clearance | |
| favored_value | No | ||
| max_uncoupled_length | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses critical pitfalls: unsupported rule kinds, scope predicates that create never-matching rules, signed solder-mask expansion semantics, default allowed=True behavior, and max_value fallback behavior. These are exactly the behavioral details an agent needs before invoking a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and well structured: purpose first, then parameter guidance, return value, and a critical note. The length is justified by nine parameters and multiple rule-type-specific behaviors, with no wasted filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, a 0% schema description coverage, and the presence of an output schema, the description supplies all necessary context for correct invocation. It covers parameters, defaults, supported and unsupported rule kinds, scope pitfalls, and return shape without redundantly explaining return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description documents every parameter with per-rule-type meaning, defaults, examples, and edge cases. It adds substantial meaning beyond the bare schema, including default fallbacks, scope expression syntax, and parameter interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource, "Create a new design rule on the active PCB," and immediately enumerates supported rule types so the agent can distinguish the scope from generic rule utilities. It clearly establishes that this is a creation tool for PCB design rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context through supported rule types, per-type value semantics, and a clear unsupported-kinds note directing agents to pcb_set_rule_properties for updates. It does not explicitly compare against siblings such as pcb_create_diff_pair or pcb_get_design_rules, so the sibling-routing guidance is not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_create_diff_pairA
Create a differential pair object from two existing nets.
The two nets must already exist on the board (typically present after update_pcb / ECO). The diff-pair object lets Altium apply differential routing constraints and the interactive router to honour impedance / matched-length rules between the pair.
Args: positive_net: Positive-side net name (e.g. "USB_DP") negative_net: Negative-side net name (e.g. "USB_DM") name: Optional diff-pair name (defaults to "_")
Returns: Dictionary confirming creation with name, positive_net, negative_net
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| negative_net | Yes | ||
| positive_net | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose that this is a mutating creation step, its prerequisite, and its downstream effect (enabling differential routing / impedance constraints). It does not say what happens on failure (e.g. missing net, name collision) or whether re-creating an existing pair errors, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and precondition are front-loaded, and the args block is compact and scannable. The Returns section duplicates what the output schema already conveys, so it is slightly redundant, but nothing else is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutating PCB tool with no annotations, the description covers purpose, prerequisite state, parameter meaning, and expected result — enough for correct invocation. Missing error/edge-case behavior (duplicate pair, unknown net) is the only notable gap, and the existence of an output schema reduces the need to explain returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (titles only), so the description must compensate and does: it explains each argument, gives concrete example values ("USB_DP"/"USB_DM"), and documents the default naming convention for the optional name. That is materially more information than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: create a differential pair object from two existing nets. It is clearly distinct from siblings such as pcb_get_differential_pairs (read) or pcb_create_net_class (different resource), though it does not name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete precondition — both nets must already exist on the board, typically after update_pcb/ECO — which tells the agent when this tool is applicable and what must happen first. It does not spell out an explicit 'do not use when' clause or name an alternative tool, 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.
pcb_create_net_classA
Create a net class (or add nets to an existing one) on the active PCB.
Args: name: Name for the net class (e.g., "PowerNets", "HighSpeed") nets: Comma-separated list of net names to add (e.g., "VCC,GND,3V3")
Returns: Dictionary with class_name, class_created (bool), nets_added count
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| nets | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the meaningful upsert semantics (creates the class if absent, otherwise adds nets) and the active-document dependency, which is genuinely useful. However, it is silent on error behavior for unknown net names, whether existing class membership is preserved or replaced, and whether a new class gets default rules/clearances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads the action and its upsert nuance, then Args/Returns are scoped and tight with no filler. The Returns block is partially redundant with the output schema, but it is short enough not to be wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter PCB mutation on the active board, the definition gives enough to invoke correctly: target context, encoding of both parameters, and the create-vs-append behavior. What remains missing is failure/validation behavior and the absence of a 'use pcb_get_net_classes first' hint, both of which matter for a mutate operation with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — both properties are bare title-only strings — so the description must do all the work, and it largely does: the name parameter gets purpose plus two realistic examples, and nets gets its encoding (comma-separated) plus the "VCC,GND,3V3" example, which is essential to call this correctly. It stops short of stating whether net names are validated or case-sensitive, keeping it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a net class") on a scoped target ("the active PCB") and clarifies the upsert behavior by noting it can also add nets to an existing class. It does not name or disambiguate against siblings like pcb_get_net_classes or pcb_create_nets_from_list, so an agent must infer the boundary, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent learns it creates classes or appends nets, and that it operates on the active board. There is no statement of prerequisites (must nets already exist?), no when-not case, and no pointer to pcb_get_net_classes for inspection or pcb_create_nets_from_list for bare net creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_create_nets_from_listA
Create net objects on the active PCB for names not already there.
First leg of the netlist-driven SCH->PCB bridge (Altium's ECO is
not scriptable): place footprints with pcb_place_components,
create the nets here, bind pads with pcb_bind_pad_nets, then
verify with proj_compare_sch_pcb. The whole list is one IPC
round-trip; names already on the board are counted, not duplicated.
Args: nets: Net names to ensure exist (e.g. from the compiled netlist). Duplicates and empty strings are ignored.
Returns:
Dict with created and existing counts.
| Name | Required | Description | Default |
|---|---|---|---|
| nets | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses idempotency ('counted, not duplicated'), the cost model ('one IPC round-trip'), and that it acts on the active PCB. It stops short of stating preconditions (a PCB document must be active/focused) or behavior on error/invalid names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, then workflow context, then Args/Returns. Dense and structured with no filler; every clause carries information an agent would otherwise have to infer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since an output schema exists, the Returns line is mildly redundant, but the workflow ordering, idempotency, and parameter rules make the definition complete enough to call correctly. Minor gap: no statement of what happens when no PCB document is active.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the array items have no description — so the description must compensate, and it does: it explains what the names represent (from the compiled netlist) and that duplicates and empty strings are ignored. It does not mention format or matching constraints against schematic names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb (create) plus resource (net objects) plus scope (on the active PCB, only names not already present). It is clearly distinguishable from siblings like pcb_create_net_class, pcb_create_diff_pair, and pcb_delete_net, and the opening line alone tells an agent what it produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly situates the tool in a multi-step workflow (place footprints with pcb_place_components, create nets here, bind with pcb_bind_pad_nets, verify with proj_compare_sch_pcb) and explains the reason (Altium's ECO is not scriptable). It also implies safe re-runs by stating existing names are counted rather than duplicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_create_roomA
Create a room for component grouping on the active PCB.
Creates a confinement constraint rule that defines a rectangular region. Components can be assigned via scope expression.
Args: name: Room name (e.g., "Power Section", "USB Block") x1: First corner X in mils y1: First corner Y in mils x2: Second corner X in mils y2: Second corner Y in mils components: Comma-separated component designators to confine (e.g., "U1,U2,R1,R2"). Optional; empty = applies to all.
Returns: Dictionary with created status, name, coordinates, and scope
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| name | Yes | ||
| components | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the mutation ('Creates a confinement constraint rule'), the target context ('active PCB'), the geometry semantics (rectangular region from two corners), and the default behavior for empty components ('applies to all'). It omits error conditions (name collision, room overlapping existing rooms, what happens to already-placed components) and permission/precondition requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a compact structure (summary, args, returns) that scans well. Slightly padded: the 'Returns' block is redundant with the existing output schema, and the example lists in Args add length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation tool with 0% schema coverage and no annotations, the description supplies units, defaults, and examples – enough to call it correctly. The main gap is sibling disambiguation against pcb_create_design_rule and failure modes; the Returns block is unnecessary since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: units are given for x1/y1/x2/y2 (mils), name examples are provided, and components is documented as comma-separated designators with an explicit empty-string default meaning. This is meaningfully more than the schema's bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Create a room for component grouping on the active PCB', and clarifies the underlying object ('confinement constraint rule' defining a rectangular region). It does not distinguish itself from sibling pcb_create_design_rule, which is the closest functional overlap, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description explains that components are assigned via scope expression and shows example names/designators, which hints at the workflow. But there is no explicit when-to-use vs. pcb_create_design_rule, no prerequisites (does an active PCB must be open and un-routed?), 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_delete_design_ruleC
Delete a design rule by name from the active PCB.
Args: name: Exact name of the design rule to delete
Returns: Dictionary confirming deletion
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for a destructive mutation. It confirms deletion happens but says nothing about irreversibility, whether built-in/system rules can be deleted, what happens if the name doesn't match any rule, or the permission state required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and resource in the first sentence, then cleanly separated Args/Returns. Slight waste in the 'Returns: Dictionary confirming deletion' line, which duplicates the output schema, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return explanation is not strictly needed, and the core action is stated. Gaps remain around no-match behavior and deletability of built-in rules, which matter for a destructive single-parameter tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it does add one meaningful qualifier ('exact name'), implying no wildcards or prefix matching. However it does not specify case sensitivity, whether fully qualified scope prefixes are needed, or where to obtain valid names, leaving real ambiguity for a single required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (design rule) with a clear scope qualifier ('from the active PCB'), which distinguishes it from library-level or project-level operations. It does not name or differentiate itself from nearby siblings like pcb_create_design_rule, pcb_get_design_rules, or pcb_set_rule_properties, but the operation itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus pcb_set_rule_properties (disable a rule) or pcb_set_rules_enabled, no prerequisites, and no mention of how to discover rule names (e.g., via pcb_get_design_rules). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_delete_invalid_objectsA
Remove degenerate primitives from the active PCB.
Deletes zero-length tracks and zero-area regions (board hygiene that accumulates from edits and imports). Returns the count removed.
Returns: {"removed": N}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so reasonably: it says this deletes geometry, scopes the blast radius narrowly (degenerate zero-length/zero-area primitives only), and notes it acts on the 'active PCB.' It omits undo/reversibility and whether the operation is transactional, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and target, and the whole definition is three short sentences. The closing 'Returns the count removed. Returns: {"removed": N}.' restates the same fact twice, a small redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, narrowly scoped mutation the description covers what is removed and the result shape; an output schema already exists, so repeating the return payload is optional rather than required. Missing only reversibility/side-effect notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The stated scope ('active PCB') usefully implies the implicit target of the operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove degenerate primitives from the active PCB') and enumerates the target classes: zero-length tracks and zero-area regions. This makes it distinct from broad cleanup siblings like pcb_cleanup_tracks, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'board hygiene that accumulates from edits and imports' implies when to reach for it, but there is no explicit when-not guidance and no named alternative versus pcb_cleanup_tracks, pcb_unroute, or pcb_delete_object.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_delete_netA
Delete nets from the active PCB.
By default removes only EMPTY nets (no connected pads / tracks /
vias): the cleanup for stray nets left behind after deleting
components, e.g. nets created by pcb_place_components' synced
mode. A net that still has connections is skipped unless
force=True (forcing orphans those pads/tracks, so use it
deliberately).
Args: nets: Specific net names to delete. Omit (or pass an empty list) to sweep ALL empty nets on the board. force: Also delete nets that still have connected primitives (orphans them). Default False.
A net name containing a COMMA is refused rather than sent. The
list rides one comma-separated field and the handler splits it
with Pos(',', ...), so such a name would arrive as two, and
the fragments can match real nets: VCC,GND becomes VCC
and GND. With force=True that deletes nets nobody named
and orphans their pads and tracks.
Returns:
Dict with deleted (count removed), skipped_connected
(count), and skipped_nets (names skipped because still
connected). Or {"ok": False, "reason": ...} if a name
contains a comma, in which case nothing is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| nets | No | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so: default skip of connected nets, orphan consequences of force=True, the comma-in-name refusal and why it is dangerous (VCC,GND splitting into VCC and GND), and the exact return keys. That is unusually complete hazard disclosure for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the default behavior, then args, then the comma caveat, then returns – a sensible order. The comma paragraph is longer than needed and the Returns block partly duplicates the existing output schema, costing a little tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, parameter-light tool the description covers default scope, escalation path, failure modes, and result keys; even though an output schema exists, the added return details are consistent rather than contradictory. Nothing needed to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: 'nets' is described as specific names with omit/empty meaning sweep-all, and 'force' is described as also deleting connected nets and orphaning them, with its default. Both undocumented schema fields gain real meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete nets from the active PCB') and immediately narrows the scope to empty nets by default, which separates it from sibling reads like pcb_get_nets and from broader mutators like pcb_unroute. The purpose is unambiguous 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context ('cleanup for stray nets left behind after deleting components, e.g. nets created by pcb_place_components' synced mode') and an explicit when-not ('A net that still has connections is skipped unless force=True... use it deliberately'). It stops short of naming alternative siblings for broader net removal, but the conditional guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_delete_objectA
Delete a PCB object closest to specific coordinates on a layer.
Finds the nearest matching object within 100 mils of the given coordinates and removes it from the board. Distance is to the object itself: a track by its segment less half its width, an arc by its curve, a via by its centre less its radius, anything else by its bounding rectangle (0 inside it). A point anywhere on a track finds that track.
Args:
x: Target X position in mils
y: Target Y position in mils
layer: PCB layer name (default "TopLayer")
object_type: Type of object to delete. Options:
"track" - Track segment
"via" - Via
"fill" - Copper fill
"text" - Text string
"pad" - Free pad
"arc" - Arc
"polygon" - Copper polygon pour
"region" - Region / split-plane
"component" - Placed component
(for bulk/filter-based deletes use obj_delete)
Returns: Dictionary with deleted status, object_type, distance_mils, the deleted object's net and bbox_mils, and others_as_close: how many other objects were exactly as near, so a pick among equals is visible.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| layer | No | TopLayer | |
| object_type | No | track |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does meaningful work: it defines the exact proximity metric per object type (track segment less half width, via centre less radius, bounding rectangle otherwise) and explains the 'others_as_close' tie-count in the return. Gaps remain for a destructive tool with no annotation coverage — it never says whether the delete is undoable, whether it requires a selection/lock state, or what the 'deleted status' is when no candidate is found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-sentence summary, then the matching semantics, then args, then returns — good ordering. It is somewhat long: the distance-metric paragraph is dense, and the Returns section restates what the output schema already declares, which is redundant given has_output_schema=true.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter destructive geometry operation with an output schema and no annotations, the definition covers selection semantics, parameter meanings, and the sibling alternative. The remaining gap is safety context — nothing about undo/reversibility or permission requirements for removing copper from a board.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (titles and types only), and the description fully compensates: units for x/y ('mils'), the meaning of layer and its default, and an explicit enumeration of all nine object_type values with a one-line gloss each. This is meaning the schema alone cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource plus the selection mechanism: 'Delete a PCB object closest to specific coordinates on a layer.' It is immediately distinguishable from siblings like obj_delete (bulk deletes) or pcb_unroute (net-based removal) because the selection model is proximity-based.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete operational precondition (nearest match within 100 mils) and points to the alternative for bulk/filter-based work: 'for bulk/filter-based deletes use obj_delete'. However, that routing hint is buried in a parenthetical inside the parameter list rather than stated up front, and there is no guidance on what to do when nothing is within 100 mils.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_distribute_componentsA
Evenly space components along an axis.
Moves each named component so its X (or Y) coordinate lands at
equally-spaced stops from start to end. Order follows the
designators list, designators="R1,R2,R3" with start=0 end=200
places R1 at 0, R2 at 100, R3 at 200 on the chosen axis. Y (or X)
is untouched.
Args: designators: Comma-separated list of component designators axis: "x" or "y" (default "x") start: First position in mils end: Last position in mils
Returns: Dictionary with distribution result
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| axis | No | x | |
| start | No | ||
| designators | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It helpfully discloses that components are moved, that the other axis is untouched, and that order follows the designators list, but it omits failure conditions, permission needs, and whether prior placement is overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core behavior and follows with a useful concrete example, argument explanations, and return note. Every section contributes without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 fully explained. The description covers the mutation behavior, axis behavior, ordering, units, and parameters well enough for invocation, though it could say more about prerequisite component existence or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters, and it does: designators are comma-separated, axis is x/y with default x, and start/end are positions in mils. It adds meaningful semantics beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: evenly spacing components along an axis, with a concrete example. It is clear what the tool does, but it does not explicitly differentiate itself from nearby siblings such as pcb_align_components or pcb_move_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation implies when the tool is useful—when named components need equal spacing along one axis. However, it gives no explicit when-not guidance and does not name alternatives like pcb_align_components or pcb_autoplace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_export_coordinatesA
Export component placement coordinates formatted for pick-and-place (like pcb_get_components, but the pick-and-place shape: adds side, omits bbox detail).
Returns designator, footprint, comment, position (x, y), rotation, layer, and side (Top/Bottom) for every component. Useful for manufacturing pick-and-place machine programming.
Returns: Dictionary with "placements" array (each with designator, footprint, comment, x, y, rotation, layer, side) and "count"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does most of it: the Returns block disambiguates the ambiguous 'export' verb by making clear the tool returns a dictionary rather than writing a file, and enumerates the exact payload. It does not state prerequisites (an open PCB document) or confirm read-only/no-mutation explicitly, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the sibling differentiation, which is the highest-value information. However, the per-field list (designator, footprint, comment, x, y, rotation, layer, side) is stated twice — once in prose and again in the Returns block — and duplicated a third time by the output schema, so a sentence does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-parameter, read-only export tool is simple, and an output schema already exists so return values need not be explained in prose. The description covers purpose, contrast, and payload; only the missing note about document prerequisites and the no-file-written guarantee 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to convey; the baseline for a 0-param tool is 4. The description correctly adds no speculative parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (export component placement coordinates) and immediately names the sibling it contrasts with (pcb_get_components), explaining the exact delta: adds side, omits bbox detail. An agent can distinguish it from pcb_get_components and pcb_get_selected_objects 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case (manufacturing pick-and-place machine programming) and implicitly routes away from pcb_get_components by naming it as the alternative shape. It lacks explicit exclusions such as 'do not use for BOM or assembly drawing output' (proj_get_bom, proj_export_pdf exist as siblings), so it falls short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_export_stackup_csvA
Write the layer stackup to a conventional fab CSV report.
Fetches the structured stackup (pcb_get_layer_stackup) and writes
it as the board-house stackup table: one row per physical layer,
copper and dielectric interleaved top-to-bottom, thickness in mil and
mm, dielectric constant where it applies. Columns: index, layer, type,
material, thickness_mil, thickness_mm, dielectric_constant.
Args:
output_path: Destination .csv file. Defaults to
workspace/<board>_stackup.csv.
Returns: {"output_path", "rows", "layer_count", "total_thickness_mils"} or an error dict if the board / stackup could not be read.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must carry the full disclosure burden. It does disclose the default destination path and that failures surface as an error dict rather than raising, which is useful. It does not state whether an existing file is overwritten, whether the directory is created, or what happens to non-physical layers — material gaps for a file-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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and behavior, then Args and Returns. Every line contributes, though the explicit return-field listing is somewhat redundant given an output schema exists. Still efficiently sized for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter export tool, the definition covers source, output format, columns, default path, and failure mode. With an output schema present, the extra return listing is a bonus rather than a necessity. The main omission is file-overwrite semantics, which prevents a full 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single property has no title or default documented meaningfully, yet the description fully compensates: it says output_path is the 'Destination .csv file' and that it defaults to 'workspace/<board>_stackup.csv'. That is everything an agent needs to either pass a path or omit it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource — 'Write the layer stackup to a conventional fab CSV report' — and the following sentence pins down the exact content and column set. It also identifies the source tool (pcb_get_layer_stackup), so an agent can distinguish this from the plain reader sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by showing that the tool internally fetches the stackup from pcb_get_layer_stackup, which tells an agent not to call the reader first for this purpose. However, it gives no explicit when-to-use/when-not guidance and doesn't mention alternative exports (e.g. proj_generate_fab_package or pcb_get_fab_stats) or when those would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_filter_variant_componentsA
Select a variant's components of one fitted-class on the board.
Classifies every component under variant_name (fitted original /
alternate / not fitted) and selects exactly the chosen class on the
active PCB, deselecting the rest -- so, e.g., the not-fitted parts of a
variant stand out for review or for building a component class. The
agent-callable equivalent of the community VariantFilter script;
selection uses the deterministic component API, not a query process.
Args:
variant_name: The project variant to classify against.
select: Which class to select -- not_fitted (default),
fitted_original, alternate, or all_fitted
(fitted_original + alternate).
An unrecognised select is REJECTED rather than guessed. The
handler's If chain falls through to not-fitted for any word it
does not know, and the reply echoes back the word you sent, so a
typo would select the opposite class and report success.
Returns:
{"variant", "select", "matched", "designators"}, or
{"ok": False, "reason": ...} if select is not one of
the four classes, in which case nothing is sent or selected.
| Name | Required | Description | Default |
|---|---|---|---|
| select | No | not_fitted | |
| variant_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the chosen class is selected and the rest are DESELECTED on the active PCB, that selection is via the deterministic component API rather than a query, and that an unrecognised select is rejected with {"ok": False, ...} and nothing is sent or selected. The failure mode is spelled out rather than left to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its effect, with Args/Returns clearly sectioned. The explanation of the handler's If chain fallthrough and echoed reply is a bit redundant next to the preceding 'REJECTED rather than guessed' sentence, but it justifies the wrapper's guard and each remaining sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter selection tool with an output schema present, everything an agent needs is covered: valid inputs, defaults, side effects on the board selection, and the shape of both the success payload (variant, select, matched, designators) and the error payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: variant_name is defined as the project variant to classify against, and select is enumerated as not_fitted (default) / fitted_original / alternate / all_fitted with the meaning of all_fitted spelled out as the union. The rejection of unknown values closes the otherwise-unbounded string parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: classify every component under a variant into fitted original / alternate / not fitted and select exactly one class on the active PCB. It also distinguishes itself from the surrounding family by noting it is the agent-callable equivalent of the community VariantFilter script using the deterministic component API, not a query process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case (making not-fitted parts stand out for review or for building a component class) and documents the default class, so the agent knows the normal operating mode. It stops short of naming sibling alternatives or exclusions (e.g. proj_list_variants to enumerate variants, audit_variant_not_fitted to report rather than select).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_flip_componentB
Flip a component to the other side of the board (top to bottom or bottom to top).
Args: designator: Component reference designator (e.g., "U1", "R5")
Returns: Dictionary with designator, old_layer, and new_layer
| Name | Required | Description | Default |
|---|---|---|---|
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the mutation and the returned fields but says nothing about whether attached copper, silkscreen, or 3D bodies flip with the part, whether the action is undoable, whether internal layers are valid targets on multilayer boards, or what happens if the designator is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence conveys the operation and its direction; the Args line adds only the needed parameter example. The Returns line is mild redundancy given an output schema exists, but it is short enough to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no annotations, the definition covers what it does and what it returns, but leaves the side-effect profile unspecified. An agent could call it correctly, yet not confidently predict the consequences for attached routing or footprint primitives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does, naming the designator parameter and giving concrete examples ('U1', 'R5'). It stops short of stating the expected format constraints (case sensitivity, prefix+number pattern) or error behavior for a bad designator.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — flip a component to the other board side — and clarifies the direction (top↔bottom). It distinguishes itself from the move-oriented siblings (pcb_move_components, lib_move_components) by naming a distinct operation, though it never explicitly contrasts with them or with sch_mirror_component.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation itself: use it when a part must be relocated to the opposite side. There is no explicit when-to-use/when-not statement, no prerequisite (e.g., component must exist in the PCB, board must have a defined stackup), and no pointer to alternatives for other kinds of relocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_focus_boardA
Make a specific PCB the focused/current board.
When several PcbDocs are open, the other PCB tools
(pcb_get_components, pcb_delete_object, pcb_delete_net,
pcb_plan_placement, design_visual_review, …) operate on the
focused board, and app_set_active_document does NOT reliably set
that for a PcbDoc. Call this first to point them all at the board
you mean. (pcb_place_components already accepts board_path
directly.)
Args: board_path: Absolute path to the .PcbDoc to focus.
Returns:
Dict with focused and the resolved board file name.
| Name | Required | Description | Default |
|---|---|---|---|
| board_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it does the important part: it discloses that this mutates implicit global state that every other pcb_* tool reads, and that the obvious sibling (`app_set_active_document`) silently fails to set it. It does not cover failure modes (invalid path, non-PcbDoc) or whether focus persists across document closes, which keeps it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the rationale, then the exception, then Args/Returns. The parenthetical list of affected tools (`pcb_get_components`, `pcb_delete_net`, …) is illustrative rather than exhaustive and costs a line, but it earns most of its space by making the blast radius concrete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter state-setting tool this is complete: what it does, why it must be called before other PCB tools, the sibling that does not substitute for it, the argument format, and a pointer to the return shape (which the output schema also covers). 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must supply the meaning itself, and the Args block does: shape/format (absolute path) and target type (.PcbDoc). That is the full semantics needed for a single required parameter, though it says nothing about path normalization or relative-path behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: 'Make a specific PCB the focused/current board.' It also preempts the closest sibling by naming `app_set_active_document` as the thing that does not work for PcbDocs, so an agent can distinguish the two without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'When several PcbDocs are open... Call this first.' It also carves out an exception where this tool is unnecessary (`pcb_place_components` already takes `board_path`), which is exactly the alternative-routing guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_board_outlineA
Get the board outline vertices and bounding rectangle.
Returns outline geometry as a list of vertices (line segments and arcs) plus the bounding rectangle dimensions.
Returns: Dictionary with "point_count", "vertices" array (each with index, kind, x, y, and optionally cx, cy, angle1, angle2 for arcs), and "bounding_rect" (left, bottom, right, top in mils)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses the return structure, arc-specific fields, and mils units, but does not explicitly state read-only behavior, side effects, permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and immediately followed by the return shape. Although the detailed return block partly duplicates the output schema, it is organized and not padded with irrelevant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with an output schema, the description provides enough context to call the tool correctly and interpret its geometry output. It lacks usage routing versus alternatives, but the core retrieval behavior is fully covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to explain. The baseline for zero-parameter tools is 4, and the empty input schema is consistent with the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving board outline vertices plus the bounding rectangle. It does not explicitly differentiate from nearby siblings such as get_board_info or pcb_get_board_statistics, but the geometry focus is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains what is returned but gives no when-to-use guidance, no exclusions, and no alternatives among the many PCB-related sibling tools. The usage is only implied by the tool name and first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_board_statisticsB
Get comprehensive statistics for the active PCB board.
Returns counts of all object types, total trace length, board dimensions, and layer count. Useful for design reviews and progress tracking.
Returns: Dictionary with track_count, via_count, pad_count, component_count, fill_count, text_count, polygon_count, unrouted_connections, total_trace_length_mils, board_width_mils, board_height_mils, board_area_sq_mils, layer_count, and board_name
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. It does establish scope (only the 'active' board) and implies a non-mutating read via 'Get', but does not say whether statistics are computed live or cached, whether a board must be open/focused, or what happens when no board is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening two sentences are front-loaded and efficient, but the 'Returns:' block enumerates fourteen field names that are already declared in the output schema, which is redundant padding rather than new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an existing output schema, the basic burden is met: purpose, scope, and use case are stated. The notable gap is positioning against sibling aggregation tools (pcb_get_fab_stats, proj_get_stats, proj_get_board_info) and any note on data freshness, which an agent in this dense toolset needs in order to choose correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly signals that no inputs are required by framing the call purely around the active board.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get comprehensive statistics for the active PCB board') and enumerates what is measured. However, it never distinguishes itself from closely named siblings such as pcb_get_fab_stats, proj_get_stats, or get_board_info, so an agent cannot tell from the description which stats tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'Useful for design reviews and progress tracking' implies a context of use, but there is no explicit when-to-use/when-not-to-use guidance and no named alternative among the many stats/diagnostics siblings. Usage is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_clearance_violationsA
Read the violations ALREADY on the board, optionally filtered to one net. Does NOT run DRC.
This is a pure board read: it walks the eViolationObject
records the last DRC run (batch or online) left behind. It
opens no dialog and cannot block the bridge. Use it as the
default way to inspect violations.
It used to trigger PCB:DesignRuleCheck first, which raises
Altium's MODAL "Design Rule Checker" setup dialog: on a
241-component board that wedged the whole bridge for 30+ min
until the client timed out. A "get" tool must not do that, so
the trigger is gone. pcb_run_drc(allow_modal=True) is now
the only way to force a fresh run.
CAVEAT -- violation_count: 0 means "no violations are
stored on this board", NOT "the board passes". If DRC has
never been run in this Altium session, there is nothing to
read and the answer is 0 either way. The response carries
drc_triggered: false and a note saying so. To get
fresh data, run DRC from Altium's UI (Tools > Design Rule
Check) or call pcb_run_drc(allow_modal=True) and be ready
to click the dialog.
Filter is substring-matched against the violation's Description and Name, so it catches both "Net USB_DP and Net GND" clearance warnings and net-named via antennas.
Each violation carries x_mils / y_mils / layer for
the agent to navigate to, plus primitive1 / primitive2
objects with {detail, type, net, layer, x_mils, y_mils}.
Args: net: Net name to filter by (substring match). Empty string returns ALL stored violations. offset: How many matching violations to skip, for paging. limit: How many to return, 200 by default.
Returns:
Dict with {violation_count, offset, limit, returned, has_more, drc_triggered, note, violations}.
violation_count is every violation that matched; when
has_more is true, call again with offset raised by
returned.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full load, and it delivers: pure board read over eViolationObject records, no dialog, cannot block the bridge, historical 30-minute bridge wedge, and the key caveat that violation_count:0 means 'nothing stored', not 'board passes'. It even discloses the drc_triggered:false and note fields in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the 'does not run DRC' constraint, and most sentences earn their place. The multi-sentence retelling of the historical 241-component bridge wedge is slightly overlong for what it justifies, though it does explain why the behavior exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations and a 0%-documented schema, this is complete: paging protocol (raise offset by returned when has_more), the semantics of a zero count, per-violation fields (x_mils/y_mils/layer, primitive1/primitive2 shape), and the fallback path for fresh data. Nothing an agent needs to call and interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates fully: net is substring-matched against Description and Name (with concrete examples of what it catches), empty string returns all, offset is a paging skip, limit defaults to 200. None of this is recoverable from the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Read the violations ALREADY on the board, optionally filtered to one net. Does NOT run DRC.' That negative clause cleanly distinguishes it from pcb_run_drc, so an agent can pick correctly without consulting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use it as the default way to inspect violations' and routes the alternative ('pcb_run_drc(allow_modal=True) is now the only way to force a fresh run'). It also warns that fresh data may require Altium's UI or the modal path, giving both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_component_padsA
Get all pads of a specific PCB component.
Returns detailed pad information including pin name, position, net assignment, size, and hole information.
DATASHEET DISCIPLINE: Pad name -> pin function mapping comes
from the footprint, which can be wrong (especially the thermal
pad on QFN/DFN, which is rarely numbered consistently across
vendors). Before stating which pin a pad corresponds to,
cross-check the manufacturer datasheet's mechanical /
recommended-land-pattern section. The response carries
_datasheet_guidance + _datasheet_parts.
Args: designator: Component reference designator (e.g., "U1", "J3")
Returns:
Dictionary with "designator", "pads" array (each with name,
x, y, net, layer, hole_size, top_x_size, top_y_size,
rotation), "pad_count", plus _datasheet_guidance +
_datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and mostly does so: it discloses the response shape, the presence of `_datasheet_guidance`/`_datasheet_parts`, and a real correctness pitfall (vendor-inconsistent thermal pad numbering). It never explicitly confirms this is a non-mutating read or mentions error behavior for unknown designators, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is well front-loaded, but the explicit 'Returns:' block duplicates fields already available in the output schema, and the DATASHEET DISCIPLINE paragraph is verbose for a single-argument read tool. Useful content, but it is longer than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 restated, and the description goes beyond by flagging the datasheet caveat and the auxiliary metadata keys. Only gap is failure behavior for an invalid or unplaced designator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (a single undocumented `designator` string), so the description must compensate and does: 'Component reference designator (e.g., "U1", "J3")' adds both meaning and concrete format examples the schema lacks. Missing only notes on scoping, e.g. that the designator must exist on the current board.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get all pads of a specific PCB component', and lists what pad data is returned. It is clearly distinct from siblings like pcb_get_pad_properties or lib_get_pad_geometry, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear procedural guidance for using the result: cross-check the manufacturer datasheet's mechanical/land-pattern section before asserting pad-to-pin mapping, and warns that footprint pad names (thermal pads on QFN/DFN) are unreliable. It does not say when to prefer this tool over a sibling, 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.
pcb_get_componentsA
Get all components from the active PCB with position and properties.
DATASHEET DISCIPLINE: The response carries a _datasheet_guidance
block. Before drawing any conclusion about a listed part's
electrical behavior, pin function, or voltage rating, fetch its
manufacturer datasheet (use WebSearch + WebFetch if you don't
already have it). Library metadata here is NOT authoritative.
Returns:
Dictionary with "components" array (each with designator, x, y,
rotation, layer, footprint) and "count", plus
_datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the return envelope (components array, count, _datasheet_guidance, _datasheet_parts) and — unusually valuable — warns that library metadata in the response is not authoritative for electrical behavior. It does not cover failure modes (e.g., no active PCB) or coordinate/rotation units.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in one sentence, followed by two short, clearly separated blocks with headings (DATASHEET DISCIPLINE, Returns). Every sentence carries either an invocation hint or a behavioral caution; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the Returns block is partly redundant but harmless, and the safety profile is trivially implied by 'Get'. The main gap is coordinate and rotation conventions (units, degrees, layer naming), which matter for a placement-data tool and are not covered by either the empty input schema or the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline of 4 applies. The description correctly avoids inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Get all components from the active PCB' — plus the payload fields (position, properties), so an agent knows exactly what it returns. It does not, however, distinguish itself from nearby siblings such as list_components, proj_get_component_info, or pcb_get_component_pads, which an agent could plausibly reach for instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'active PCB' scoping is implied usage guidance, and the DATASHEET DISCIPLINE block gives a conditional follow-up action (fetch the manufacturer datasheet before concluding anything about electrical behavior). But there is no explicit statement of when to use this versus the component-listing siblings, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_design_rulesA
Get all design rules from the active PCB.
Reports every rule kind, including ones this toolset cannot create, because it iterates rule objects rather than switching on a kind.
rule_kind IS AN ALTIUM ENUM ORDINAL, NOT A NAME. It is the
raw integer, so it is only meaningful against the build that
produced it and is not worth comparing across versions. Read
descriptor instead: Altium composes it for display, so it
names the kind and carries the constraint values.
A CLEARANCE-FAMILY RULE ALSO CARRIES gap_mm, read from the
rule itself. Trust it over the descriptor for Board Outline
Clearance, whose descriptor says Gap=0mil whatever the rule
holds (measured on AD 26.10: 0.254 mm and 3 mm both described as
0). That rule's per-object table is not exposed to scripts, so a
value set only in the table is visible in Design > Rules alone.
Returns: Dictionary with "rules" array (each with name, rule_kind, enabled, priority, scope_1, scope_2, comment, descriptor, and gap_mm for clearance, component, hole-to-hole and board outline clearance rules) and "count".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so unusually well: it warns that rule_kind is a build-specific enum ordinal not to be compared across versions, that descriptor is the stable display string, that gap_mm should be trusted over the descriptor, and documents a specific Altium bug where Board Outline Clearance always reads Gap=0mil. It also flags that the per-object table is not exposed to scripts, which is exactly the kind of limitation an agent otherwise would not discover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then layered caveats in roughly descending importance. It runs long for a zero-argument getter, and the 'Returns' block partially duplicates the output schema, but the emphasis formatting on the enum warning is justified because misreading rule_kind would corrupt downstream reasoning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since an output schema exists, the description need not restate return values, yet it still explains the field semantics an agent cannot infer. The only real gap is the missing routing guidance against related rule-reading tools; otherwise it is complete for a zero-parameter read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema baseline of 4 applies. The description does add meaning to the returned fields (rule_kind vs descriptor vs gap_mm) rather than to arguments, which is useful but sits outside this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get all design rules from the active PCB") and clarifies the scope with "Reports every rule kind, including ones this toolset cannot create." That implicit breadth signal helps separate it from pcb_get_rule_properties and pcb_get_room_rules, but no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the note that it "iterates rule objects rather than switching on a kind" tells the agent this is the exhaustive path, but there is no explicit 'use this when... / use pcb_get_rule_properties when...' routing. For a toolset with at least three other rule-reading siblings, that omission matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_differential_pairsA
Enumerate every IPCB_DifferentialPair on the active PCB
and report each pair's two halves with length skew.
Length mismatch between the two halves of a diff pair is one of the most common high-speed routing bugs. Transceiver specs:
USB 2.0: skew < 150 mils
USB 3.x SuperSpeed: skew < 5 mils per pair
HDMI: skew < 200 mils within pair, < 800 mils between
MIPI D-PHY (high-rate): skew < 5 mils
PCIe Gen3+: skew < 5 mils within lane
Ethernet PHY: typically < 50 mils Catching skew violations pre-fab saves a respin -- the agent should call this near the end of a layout review.
Returns one row per pair with:
name: pair name (e.g."USB_DATA"if the SCH had.DiffPairdirectivesUSB_DATA_P/USB_DATA_N)positive_net/negative_net: the two member netspos_length_mils/neg_length_mils: summed track + arc length for each half (signal layers only)skew_mils: absolute difference, the number you compare against the transceiver specboth_routed: false means one half is still ratsnest- only (lengths are unreliable in that state)
Uses the PCB API IPCB_DifferentialPair interface.
Returns:
Dict with {count, pairs: [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that lengths come from summed track + arc length on signal layers only, and that both_routed=false means one half is ratsnest-only so lengths are unreliable. It doesn't state whether the tool is read-only or any permission/rate constraints, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and behavior are front-loaded in the first sentences, and the returns section is well-structured. The six-line transceiver skew spec table is useful domain context but is somewhat bulky for a tool description; it earns most, not all, of its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and the description complements it with field-by-field return semantics and the critical both_routed reliability caveat. For a no-input, read-only enumeration tool, an agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. There is nothing for the description to disambiguate on input, and it correctly focuses on output and semantics instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence states a specific verb and resource: enumerate every IPCB_DifferentialPair on the active PCB and report each pair's halves with skew. This clearly separates it from siblings like pcb_get_diff_pair_rules (rules, not actual pairs) and pcb_get_trace_lengths (single-net lengths). An agent can identify the tool without opening its schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Catching skew violations pre-fab saves a respin -- the agent should call this near the end of a layout review' gives clear when-to-use context and workflow placement. It stops short of naming explicit alternatives (e.g. pcb_calc_length_match or pcb_get_diff_pair_rules), so it's not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_diff_pair_rulesA
Get all differential pair routing rules from PCB design rules.
Returns design rules of kind eRule_DifferentialPairsRouting, these are routing rules, NOT IPCB_DifferentialPair pair objects on the board.
Returns: Dictionary with "diff_pair_rules" array (each with name, enabled, scope_1, scope_2, comment, descriptor) and "count"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the underlying rule kind and return shape, including that each entry carries an 'enabled' flag (implying disabled rules are also returned). It does not state what happens when no rules exist or whether any permission/active-document prerequisite applies, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed immediately by the disambiguation, which is the right ordering. The 'Returns:' block duplicates part of the output schema, though the field list adds modest value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with an output schema already describing returns, the definition covers what is fetched, what it is not, and where it comes from. The only missing piece is an explicit behavioral edge case (empty result, active document requirement), which is minor at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to mis-specify or leave ambiguous. The return-field enumeration it does provide is extra value rather than a parameter gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all differential pair routing rules from PCB design rules') and then explicitly carves out the boundary: these are eRule_DifferentialPairsRouting routing rules, NOT IPCB_DifferentialPair board objects. That distinction is exactly what separates it from the sibling pcb_get_differential_pairs, so an agent can choose correctly from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'NOT IPCB_DifferentialPair pair objects on the board' clause functions as an explicit exclusion that points the agent toward the pair-object tool for that other need. It is clear context for when this tool is right, though it stops short of naming the alternative tool or stating prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_fab_statsA
DFM (Design For Manufacturing) summary -- the numbers fab houses ask for on their quote forms.
One IPC call returns:
board_width_mm,board_height_mm,board_area_mm2num_copper_layersvias_total,vias_through,vias_blind,vias_buriedpads_plated,pads_unplated,pads_slottedmin_annular_ring_mils-- across all plated holes (vias + plated pads). Most fabs need ≥ 4 mil for the standard process; sub-4-mil bumps to HDI.min_track_width_mils-- minimum across all copper layers. Standard fabs offer 4-5 mil; sub-3 mil is HDI.smallest_hole_mils,largest_hole_mils,distinct_hole_count-- the drill bit story. Fab houses charge per distinct drill diameter; collapsing from 7 distinct sizes to 4 can shave noticeable cost.
Useful before sending gerbers to the fab: the agent can spot
sub-process-minimum values and warn the user. Aspect-ratio
check (depth / drill) is NOT included here because it
requires layer-stack walking; if you need it, fetch
pcb_get_layer_stackup separately.
Returns:
Dict with all keys above. All linear measurements use the
stated unit suffix (_mm vs _mils).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden and does reasonably well: it discloses that this is a single IPC call, how values are aggregated (min annular ring across vias + plated pads, min track width across all copper layers), and what it deliberately does not compute. Read-only nature and any cost/latency expectations are only implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a scannable field list, then usage and exclusion notes. Slightly verbose in the fab-cost commentary (drill bit story, HDI thresholds), though that context is genuinely interpretive rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so explaining return values is optional; the description goes further by telling the agent how to interpret thresholds (4 mil annular ring, 3-4 mil track width → HDI) and where to get the omitted aspect ratio. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description correctly reflects that no arguments are needed and spends its words on the returned measures instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (DFM/fab statistics: board size, layer count, via/pad counts, min annular ring, min track width, hole sizes) and frames it as the numbers fab houses ask for on quote forms. That framing distinguishes it from the many sibling stats tools (pcb_get_board_statistics, proj_get_stats, get_board_info).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the moment to use it ('before sending gerbers to the fab' so the agent can spot sub-process-minimum values) and names an alternative for the excluded metric ('if you need aspect ratio, fetch pcb_get_layer_stackup separately'). Lacks an explicit statement of when NOT to use it versus pcb_get_board_statistics, which is the nearest sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_layer_displayA
Visibility and colour for every layer on the active board.
Covers signal, plane, mechanical, mask, paste, silk, keepout and
multilayer. Each entry gives the internal layer id, the user's
name for it, whether it is visible, and its colour both as
Altium's raw integer and as color_hex.
Read this before recolouring: Altium stores a colour as a Windows TColor, which is byte-reversed against the #RRGGBB people write, and getting that backwards produces a plausible wrong colour rather than an error.
Returns:
Dict with layers, count and visible_count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and mostly does: it scopes the result to the active board, declares the exact return keys, and warns that Altium stores colour as a byte-reversed Windows TColor so a reversal yields a plausible wrong colour rather than an error. That is a genuine behavioral trap disclosed proactively. It never explicitly states read-only/no side effects or pagination/scale limits, which keeps it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded: the one-line purpose comes first, then coverage, then the critical gotcha, then returns. Every sentence carries information. Minor waste in the explicit 'Returns: Dict with layers, count and visible_count' block, which restates the output schema and could be dropped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument read on the active board with an output schema available, the description supplies everything needed to call it correctly and interpret results: scope, layer coverage, field meanings, and the colour-encoding pitfall. The returns section is redundant but harmless given the schema, not a completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the baseline of 4 applies by rule. The description's field-level explanations (layer id, name, visible, color/color_hex) describe outputs rather than inputs, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource — visibility and colour for every layer on the active board — and enumerates the layer families covered (signal, plane, mechanical, mask, paste, silk, keepout, multilayer). It also lists the per-entry fields, so the agent knows exactly what it gets without opening the schema. Clearly distinct from the setters (pcb_set_layer_color, pcb_set_layer_visibility) and from pcb_get_layer_stackup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Read this before recolouring' gives an explicit when-to-use trigger tied to a downstream action, which is unusually actionable. It does not name the alternative/sibling it feeds into (pcb_set_layer_color) or state exclusions, so it stops 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.
pcb_get_layer_stackupB
Get the full PCB layer stackup information.
Returns copper layers with thickness, dielectric type/height/constant, and board name.
Returns: Dictionary with "layers" array (each with name, order, copper_thickness_mils, dielectric_type, dielectric_height_mils, dielectric_constant), "layer_count", and "board_name"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; 'Get' plus the return listing makes clear this is a non-mutating read of stackup data. It stops short of stating which board is read (active document?), whether a PCB must be open, or whether layers include non-copper/mixed-plane entries, all of which matter for a board-scoped getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and generally tight, but the opening paragraph ('Returns copper layers with thickness, dielectric type/height/constant, and board name') is restated almost verbatim in the following 'Returns:' block. Since an output schema already exists, that block is largely duplicated information taking up half the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with an output schema, the definition covers what the agent needs to decide to call it. The remaining gap is operational context: which document/board the stackup is read from, which the description never states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to disambiguate; baseline 4 applies. The description correctly avoids inventing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Get the full PCB layer stackup information' tells an agent exactly what is retrieved, and the field list (copper thickness, dielectric type/height/constant, board name) confirms scope. It does not differentiate against adjacent siblings such as pcb_export_stackup_csv, pcb_get_layer_display, or pcb_get_mech_layer_names, so an agent cannot resolve the choice from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is present. The most likely confusion, pcb_get_layer_stackup vs pcb_export_stackup_csv, is never addressed, and no prerequisite (open PCB document, active board) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_mech_layer_namesA
Every enabled mechanical layer on the board, and what is on it.
WHAT IS ON THE LAYER IS THE PART YOU CANNOT GET ELSEWHERE. A
PcbLib header carries USEDBYPRIMS; a PcbDoc does not, so on a
board there is no way to ask which mechanical layers the
geometry occupies. This counts, because moving kinds around on a
board you cannot inspect is how an assembly drawing gets
orphaned. primitive_count of 0 is a layer that is genuinely
spare; -1 means the count was not attempted or failed.
ENABLED, NOT DISPLAYED. This used to list only layers the view
happened to be showing, so a layer carrying the whole fab
drawing was missing from the answer whenever it was toggled off.
Display is a view setting and is reported separately as
displayed.
Each entry carries its kind, which is what the layer is FOR
rather than what it is called. Read it before setting one: a
kind belongs to a single layer, so assigning it moves it, and a
PAIRED kind is held by the layer pair. kind_id of -1 means
this Altium build has no mechanical layer kinds.
Args: count_primitives: Count what sits on each layer. The board is walked once per enabled layer, so pass False when only the names are wanted.
Returns:
Dict with mechanical_layers (each: layer, number, name,
enabled, displayed, kind, kind_id, primitive_count),
count, occupied_count, counted_primitives and
scanned_to, the layer number the scan stopped at.
| Name | Required | Description | Default |
|---|---|---|---|
| count_primitives | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load well: it discloses the cost model ('the board is walked once per enabled layer'), sentinel semantics ('primitive_count of 0 is genuinely spare; -1 means not attempted or failed'), and 'kind_id of -1 means this Altium build has no mechanical layer kinds'. It stops short of stating any document/permission requirement or whether the scan is bounded by the scanned_to limit under normal conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the Args/Returns blocks are well formed, but the prose is padded with rhetorical asides ('This counts, because moving kinds around on a board you cannot inspect is how an assembly drawing gets orphaned') and the kind paragraph partly addresses a setter concern ('assigning it moves it') rather than this read-only call. Several sentences could be trimmed without losing an agent-relevant fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read on an opaque Altium concept, everything an agent needs is present: scope (enabled vs displayed), sentinel values, cost of the flag, and a return-field inventory. An output schema exists, yet the description still names the keys so the agent can reason about partial scans via scanned_to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: count_primitives is defined functionally ('Count what sits on each layer') plus operationally ('the board is walked once per enabled layer, so pass False when only the names are wanted'). That is both meaning and a decision rule for the flag.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Every enabled mechanical layer on the board, and what is on it', and the 'ENABLED, NOT DISPLAYED' section clarifies the scope against the display-oriented view of the same data. It does not name a sibling tool, so the differentiation is conceptual rather than explicit (pcb_get_layer_display is never mentioned), which keeps it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is motivated rather than routed: 'WHAT IS ON THE LAYER IS THE PART YOU CANNOT GET ELSEWHERE' explains why to call it, and the args note says when to pass False. There is no explicit when-not, no named alternative tool, and no statement of prerequisites (e.g. a PCB must be the active document).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_net_classesA
Get all net classes on the active PCB, with the nets in each.
Altium's script host does not expose a class's member list, so
each class is asked about every net in turn. That is one call per
class and net, so on a big board members=False is quicker when
only the names are needed.
Args: members: Read each class's nets (default). False returns the class names only.
Returns: Dictionary with "net_classes" (each with name, super_class and, when members are read, "nets", "member_count" and "probe_errors"), "count" and "members_read". A class with probe_errors above 0 may have more nets than listed.
| Name | Required | Description | Default |
|---|---|---|---|
| members | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does well: it discloses the Altium script-host limitation, the quadratic call cost, and the probe_errors caveat that a class may have more nets than listed. It does not explicitly declare the tool read-only, but the read semantics are evident from "Get" and the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by the cost model, the parameter, and the caveat. The Args/Returns block is somewhat docstring-boilerplate, but the probe_errors warning earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-boolean read tool with no annotations, the description covers purpose, cost, parameter meaning, and the accuracy caveat an agent needs to interpret results. Return documentation is partly redundant with the output schema but adds the probe_errors interpretation, which the schema alone would not explain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no schema description, so the description must compensate and does: "members: Read each class's nets (default). False returns the class names only." It also ties the flag to a performance tradeoff, adding meaning beyond the boolean type and default in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Get all net classes on the active PCB, with the nets in each." That is unambiguous and distinct from a plain net listing. It does not explicitly distinguish itself from nearby siblings such as pcb_get_nets or pcb_create_net_class, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete conditional: on a big board use ``members=False`` when only names are needed, because the probe is one call per class-and-net pair. That is real when-to-use guidance backed by a cost model. It offers no routing advice versus sibling tools (e.g. pcb_get_nets), so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_netsB
Get all unique net names from the active PCB board.
Returns: Dictionary with "nets" array of net name strings and "count"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden itself; the verb 'Get' makes the read-only nature clear, and the active-board scoping hints at a prerequisite state. It does not state whether an open board is required or what happens if none is loaded, and the return description is largely redundant with the existing output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what the tool returns. The 'Returns' block restates information already covered by the output schema, a small redundancy, but nothing is padded or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema, the description suffices: it names the resource, its scope, and the returned shape. The remaining gap is sibling disambiguation (PCB vs project nets), which matters given the crowded net-related tool family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly implies the single implicit input is the active board selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all unique net names') with explicit scope ('from the active PCB board'), so an agent knows exactly what it retrieves. It does not, however, distinguish itself from close siblings such as proj_get_nets or list_nets, leaving ambiguity about which net-listing tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, despite several sibling tools that also enumerate nets (proj_get_nets, list_nets, pcb_get_unrouted_nets, pcb_get_net_classes). Usage is only inferable from the 'active PCB board' scoping phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_pad_propertiesA
Get detailed pad information filtered by net or component.
Returns pad shape, size, hole, thermal relief, and solder/paste mask expansion details. Provide at least one filter (net or designator) to avoid returning all pads on the board.
Args: net: Filter by net name (e.g., "GND", "VCC"). Optional. designator: Filter by component designator (e.g., "U1"). Optional.
Returns: Dictionary with "pads" array (each with name, component, x, y, net, layer, shape, top_x_size, top_y_size, hole_size, rotation, is_smd, solder_mask_expansion, solder_mask_bottom_expansion, solder_mask_separate, paste_mask_expansion) and "count". solder_mask_expansion is the TOP side when solder_mask_separate is true and both sides when it is false; the bottom value is stored either way and takes effect once the sides are unlinked. Expansions read 0 when the pad follows the board's rule.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| designator | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so reasonably: it discloses the returned field set, the unbounded-query hazard, and the non-obvious semantics of solder_mask_expansion (top side when separate is true, both sides otherwise, zero when following board rules). It does not mention permissions, read-only nature, or performance/limits, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core guidance is front-loaded in the first sentence, which is good, but a large share of the body restates return fields already covered by the output schema. The mask-expansion caveat is worth keeping; the field enumeration largely is not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema, nothing an agent needs to call it correctly is missing: filter requirement, return shape, and the one genuinely confusing field semantic are all covered. The remaining verbosity is redundancy, not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it defines both parameters, gives concrete value examples ("GND", "VCC", "U1"), marks them optional, and explains they act as filters. It stops short of describing interaction between the two filters (AND/OR) or default empty-string behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get pad properties) and scopes it to filtering by net or component, which is clear. It does not name the nearest sibling (pcb_get_component_pads or lib_get_pad_geometry), so an agent has to 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the caller to supply at least one filter and explains the consequence of omitting it (returns all pads on the board). That is real usage guidance rather than a restated name. It lacks any when-to-use-this-vs-sibling routing, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_polygonsA
Get all polygon pours on the active PCB with copper area.
Each polygon row carries:
index,name: positional + Altium-assigned namenet: assigned net (oftenGND/ a power rail)layer:TopLayer,InternalPlane1, etc.hatch_style:Solid/45Degree/Horizontal...pour_over: pour-policy flagarea_sqmils/area_mm2: the polygon OUTLINE's area. It does not change when the pour does, and it includes copper a clearance or the board edge has cut away.copper_area_mm2: the copper actually poured, summed over the polygon's regions with the holes cleared around other nets taken off. Use this for current-capacity audits (multiply by copper thickness for cubic copper, then apply IPC-2152 / IPC-2221). A hatched pour is tracks, so it reportscopper_pieceswith a region area of 0.copper_area_exact: false when a region's holes could not be read, in which casecopper_area_mm2is the regions' outer area and overstates the copper.copper_pieces: how many pieces the pour is in; 0 on a poured polygon means nothing was poured.poured: false for a shelved polygon.bbox_mm2: bounding-rectangle area; ratiocopper_area_mm2 / bbox_mm2shows how much of the outline is real copper.vertex_count: a smooth pour has 4-8 vertices; many more usually means hand-editing that may have introduced narrow necks.
Pair with pcb_calc_track_current_capacity for
per-net current-carrying analysis.
Returns:
Dict with {polygons: [...], count: N}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well for the key output fields: it explains that copper_area_exact=false overstates copper, that hatched pours report copper_pieces with zero region area, and that copper_pieces=0 means nothing was poured. It does not explicitly state read-only/no-side-effect behavior, but the 'Get' framing and detailed caveats make the tool's data behavior largely transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-sentence purpose and then organizes field semantics in a useful bullet list. It is long and overlaps somewhat with the available output schema, but the explanations of copper area, exactness, and poured state earn their place for interpreting the result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a zero-parameter read tool, an output schema, and no annotations, the description is complete enough to call and interpret correctly: it names the active-PCB scope, covers key return fields and caveats, and points to a relevant downstream analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so there is no parameter meaning for the description to add. The baseline for a parameterless tool is 4, and nothing in the description lowers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource: get all polygon pours on the active PCB with copper area. That is clear enough to distinguish it from generic object queries, but it never names or contrasts with close siblings such as pcb_calc_polygon_area, pcb_repour_polygons, or pcb_get_board_statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use copper_area_mm2 for current-capacity audits and to pair the tool with pcb_calc_track_current_capacity for per-net analysis. That gives clear usage context, but it does not state when to choose this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_room_rulesA
Get all room-like rules (confinement constraint design rules).
Returns design rules of kind eRule_ConfinementConstraint, these are NOT physical IPCB_Room objects on the board. The rule bounding rect is reported as x1/y1/x2/y2 in mils.
Returns: Dictionary with "room_rules" array (each with name, enabled, kind, scope_1, comment, x1, y1, x2, y2) and "count"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well by disclosing the return shape, field names, coordinate units in mils, and the important semantic caveat that these are not physical room objects. It does not explicitly state read-only safety or side-effect behavior, but 'Get' strongly implies a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, immediately follows with the key semantic caveat, and then presents the return structure compactly. There is no wasted or redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with an output schema, the description provides ample context: what is returned, the rule kind, coordinate units, and the distinction from physical room objects. The output schema can cover exact value types, so the description does not need to do more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain. The baseline for zero-parameter tools is 4, and nothing in the description is misleading or incomplete in that respect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get room-like rules, explicitly of kind eRule_ConfinementConstraint. It also distinguishes the result from physical IPCB_Room objects, which prevents confusion with sibling tools like pcb_create_room.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by clarifying that these are confinement-constraint design rules, not physical board rooms. However, it does not explicitly say when to use this versus pcb_get_design_rules or pcb_create_room, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_rule_propertiesA
Read properties of a named PCB design rule.
Returns metadata (name, rule_kind, enabled, priority) plus a
descriptor string that contains the rule's constraint values
in human-readable form, e.g.:
"Width Constraint (Min=0.102mm) (Max=5.08mm) (Preferred=0.127mm) (All)"
"Clearance Constraint (Gap=0.127mm) (All),(All)"
"Hole Size Constraint (Min=0.1mm) (Max=4mm) (All)"
"Routing Via (Templates Used To Check Via: v30h10m0mx0, ...) (All)"WHY THE DESCRIPTOR AND NOT THE NUMBERS. Constraint values live on per-kind subtype interfaces (IPCB_ClearanceConstraint, IPCB_MaxMinWidthConstraint, ...). This handler holds a base IPCB_Rule, where those members do not exist, so reading them gives nothing and the descriptor is what is offered instead. Parse it client-side if you need numeric values.
THAT IS A LIMIT OF THIS READ, NOT OF THE API, and the difference
matters because the sentence above has already been read as
"constraints are unreachable" and stopped someone who then
reported a rule as unwritable. DelphiScript DOES narrow an
interface, but only at iterator return, so a typed local
assigned straight from BoardIterator.FirstPCBObject reaches
the constraint members. pcb_set_rule_properties writes them
that way. To CHANGE a value, use that tool. obj_modify will
not do it: it dispatches through the base reference and reports
a match while changing nothing.
A clearance-family rule also returns gap_mm, read from the
rule itself; for Board Outline Clearance the descriptor says
Gap=0mil whatever the rule holds, so read gap_mm.
Args: name: Design rule name (e.g., "Clearance", "Width", "RoutingVias").
Returns: Dict with name, rule_kind, enabled, priority, descriptor, and gap_mm for a clearance-family rule.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it discloses that constraint values are only available as a parseable descriptor string, why (base IPCB_Rule vs. per-kind subtypes), and the Board Outline Clearance edge case where the descriptor reports Gap=0mil and gap_mm must be read instead. It also preempts a real misreading that caused a false 'rule is unwritable' report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, and the descriptor examples are genuinely load-bearing. The middle section is somewhat editorial ('that sentence has already been read as...'), spending several lines on the history of a misunderstanding where one sentence about DelphiScript interface narrowing would suffice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still adds value by explaining the descriptor's human-readable format and the gap_mm special case, which are semantic details a schema cannot convey. For a one-parameter read tool, nothing an agent needs in order to call it or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; the Args section defines the single parameter as the design rule name and gives concrete example values ('Clearance', 'Width', 'RoutingVias'). It does not mention how to enumerate valid names (e.g., via pcb_get_design_rules), which is the one remaining gap for a name-keyed lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening line states a specific verb and resource: 'Read properties of a named PCB design rule.' It also enumerates what is returned (name, rule_kind, enabled, priority, descriptor), which separates it cleanly from the list-oriented sibling pcb_get_design_rules and the write-oriented pcb_set_rule_properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'To CHANGE a value, use that tool' (pcb_set_rule_properties) and warns 'obj_modify will not do it: it dispatches through the base reference and reports a match while changing nothing.' That is a rare, concrete when-not-to-use with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_selected_objectsA
Get properties of currently selected objects on the active PCB.
Args: properties: Comma-separated property names to return. Available: ObjectId, X, Y, X1, Y1, X2, Y2, Layer, Net, Width, Name, Rotation, HoleSize, TopXSize, TopYSize, Size, Pattern, SourceDesignator, Text, Descriptor, Selected
Returns: Dictionary with "objects" array and "count"
| Name | Required | Description | Default |
|---|---|---|---|
| properties | No | ObjectId,X,Y,Layer,Net |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It makes clear this is a read operation and describes the return shape, but it does not state selection prerequisites, behavior when nothing is selected, or any other operational caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with its purpose, then cleanly documents the argument and return shape. It is appropriately sized and contains no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with one parameter and an existing output schema, the description provides enough context to invoke it correctly. Minor gaps remain around selection state and alternatives, but the core information is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the single parameter. It does so well by specifying comma-separated property names and listing all available properties, though it does not explain the meaning of individual properties such as TopXSize or Descriptor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get properties of currently selected objects on the active PCB. It is clear and scoped to selection, though it does not explicitly distinguish itself from sibling query tools such as obj_query or pcb_get_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by referring to currently selected objects on the active PCB, but it gives no explicit when-to-use guidance or alternatives. An agent must infer that selection must happen first and that other query tools may be more appropriate for non-selected objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_trace_lengthsA
Get total routed track length per net on the active PCB.
Sums all track segment lengths for each net. Useful for length matching analysis and checking differential pair balance.
Args: net: Optional net name filter. If provided, only returns the length for that specific net. Empty = all nets.
Returns: Dictionary with "trace_lengths" array (each with net name and length_mils) and "net_count"
| Name | Required | Description | Default |
|---|---|---|---|
| net | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description has to carry the safety profile itself. 'Get' and 'Sums' imply a read-only, non-mutating measurement, which is useful. But it does not state permissions, whether unrouted nets appear, whether vias or pads count toward length, or the scope of 'active PCB' versus other open documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the main statement, then clearly labeled Args and Returns sections. The Returns block partially repeats the output schema, which is slight waste, but the overall structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return value does not strictly need re-explaining. The key missing piece, the undocumented parameter, is covered, making the definition sufficient for correct invocation. Only minor behavioral details are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document the parameter, and it does: optional net name filter, behavior when empty (all nets). The only gap is that the string matching is unspecified (exact, wildcard, case sensitivity).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: total routed track length per net on the active PCB. An agent can tell this is a read/measurement tool. It does not distinguish itself from close siblings such as pcb_calc_length_match or pcb_get_differential_pairs, which also deal with trace length.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives intended usage context ('length matching analysis and checking differential pair balance'), which implies when to reach for it. But it never names alternatives or exclusions, so the agent must infer whether to use this versus pcb_calc_length_match or pcb_get_differential_pairs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_unrouted_netsA
Get list of nets with unrouted connections (ratsnest lines).
Identifies nets that still have ratsnest lines, meaning they are not fully routed. Useful for checking routing completion status.
The count is of the connection lines stored on the board, and
those can be out of date: boards whose nets were all joined have
been reported with open connections. reanalyze has Altium
re-derive the lines of every net that has one first, as it does
after an edit. obj_query on eConnectionObject lists each
line with its ends, layers, IsRedundant and Mode.
Args: reanalyze: re-derive the ratsnest before counting (default False).
Returns: Dictionary with "unrouted_nets" array (each with net name and unrouted_connections count), "net_count", "total_unrouted" and "reanalyzed"
| Name | Required | Description | Default |
|---|---|---|---|
| reanalyze | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does it well: it discloses that counts are derived from stored connection lines that can be stale and may be over-reported, and that reanalyze forces re-derivation. That is exactly the kind of non-obvious reliability caveat an agent needs before trusting the numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one and each following paragraph (stale-count caveat, reanalyze, sibling alternative, return shape) adds distinct value. Slightly verbose, since the Returns section largely restates the output schema, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema, everything an agent needs is present: what it counts, when the count can be wrong, how to force correctness, and where to go for finer-grained data. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only says "boolean, default false", so the description must compensate — and it does: reanalyze is explained as re-deriving the ratsnest for every net that has one before counting, plus the default and the reason you would want it. This is meaningfully beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ("Get list of nets with unrouted connections") and immediately disambiguates from the sibling pcb_get_nets by scoping to nets that are not fully routed. It also defines the domain term (ratsnest lines) so an agent cannot confuse this with a general net listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case explicitly ("checking routing completion status") and names a concrete alternative path — obj_query on eConnectionObject — for per-line detail with ends, layers, IsRedundant and Mode. It stops short of explicitly contrasting with pcb_get_nets or pcb_get_net_classes, but the context is clear and no incorrect path is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_get_viasA
Get all vias on the active PCB board.
Returns via position, pad size, hole size, net assignment, and start/end layer for every via on the board.
Returns: Dictionary with "vias" array (each with x, y, size, hole_size, net, low_layer, high_layer) and "count"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: 'Get' establishes a read-only enumeration and the description goes on to enumerate exactly what data comes back. It omits whether an active board is required or what happens if none is loaded, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short front-loaded sentences plus a compact return inventory. The 'Returns:' block partly restates the output schema, but it is brief and the field list is the most useful part of the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 needn't explain return values, and it does so only lightly. For a parameterless read tool, the only real gap is the absent precondition (active PCB document required) and no mention of volume or performance on large boards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly supplies no parameter detail and instead spends its words on scope ('active board', 'all') and returned fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get all vias on the active PCB board.' The 'active board' scope plus 'all' distinguishes it in practice from pcb_get_selected_objects and pcb_normalize_vias, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 inventory read for vias — but there is no explicit when-to-use, no when-not-to-use, and no pointer to alternatives such as pcb_get_selected_objects or pcb_get_board_statistics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_import_placementA
Position components from a coordinate list (pick-and-place import).
The inverse of pcb_export_coordinates. Each entry repositions a
component already on the board, by designator. Absolute coordinates in
mils, rotation in degrees; supplying side/layer flips the component
to that side.
Args: placements: list of dicts, each supporting: designator (required) x (optional) , X in mils y (optional) , Y in mils rotation (optional) , degrees side (optional) , "top" or "bottom" layer (optional) , "TopLayer" / "BottomLayer" (overrides side)
Returns: {"applied": N, "failed": M}.
| Name | Required | Description | Default |
|---|---|---|---|
| placements | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it discloses that only existing components are affected, that coordinates are absolute in mils and rotation in degrees, that `side`/`layer` flip the component, that `layer` overrides `side`, and that the return is `{"applied": N, "failed": M}`. It does not state atomicity, whether a partial failure leaves the board half-imported, or what happens when a designator does not resolve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose, then scope/units, then a compact Args/Returns block. Every line carries information; nothing is repeated from structured fields or padded with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter bulk-mutation tool with an output schema present, the description covers purpose, input shape, units, and result envelope — enough to call it correctly. The remaining omission is failure behavior (partial application, unknown designators), which matters for a mutation tool with no annotations to signal safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the single `placements` array degrades to `additionalProperties: true`), so the description is the only documentation — and it fully enumerates the per-entry fields with required/optional status, units, and the side/layer precedence rule. The gap is defaults semantics: for optional `x`/`y`/`rotation`, it never says whether omission leaves the current value untouched or resets it, which is the ambiguity an agent is most likely to hit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Position components from a coordinate list") with the domain alias "pick-and-place import" so an agent can map a user's phrasing onto it. It also anchors to a known sibling by declaring itself the inverse of `pcb_export_coordinates`, which uniquely disambiguates it from `pcb_move_components`/`pcb_place_components`-style siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The inverse-of-export framing makes the intended scenario clear (bulk repositioning from an external coordinate file) and the constraint "component already on the board, by designator" tells the agent this is not a create path. It stops short of naming the alternative to use when components do not yet exist (e.g. `pcb_place_components`) or when ad-hoc moves are wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_layout_auditA
Measure a board for the layout stages' exit gates. Changes nothing.
Reads the focused board exactly, the way pcb_autoroute does
(pcb.get_layout_model), or a saved LayoutBoard JSON, and runs the
in-house checks over it. Every check returns counts and itemised
findings with coordinates in mils:
placement_audit: overlapping bodies on one side, pads of different nets closer than the clearance rule, parts on keepouts or mounting holes, parts off the board.connectivity_summary: nets routed / partly routed / not started, and every unreached pad.drc: the exact clearance check.corner_audit: track junctions bending sharper than 45 degrees.return_via_audit: signal vias with no ground or plane via withinmax_distance_mils.plane_region_audit: pour and plane copper broken into islands.
Log the result as data on the stage_result
(design_session_log); design_next_action checks the numbers
against the stage's gate.
Args:
checks: names from the list above; None runs them all.
expect_file: full path of the focused board, for a live read.
The read refuses on the first reply if another board is
focused.
board_json_path: a saved LayoutBoard (.json or .json.gz) to audit
offline instead; nothing is read from the editor.
nets: the signal nets return_via_audit checks. None checks
differential-pair and high-speed-class nets, or every signal
via when the board names neither.
max_distance_mils: how near a return via must be (centre to
centre). Default 40.
limit: findings listed per kind; counts are never cut.
Returns:
{"board", "pass", "summary": {check: {pass, counts...}}, "checks": {check: full result}, "source": "live"|"file"}, or
{"error": ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| nets | No | ||
| limit | No | ||
| checks | No | ||
| expect_file | No | ||
| board_json_path | No | ||
| max_distance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it says the tool changes nothing, reads the focused board or a saved file, refuses the live read if another board is focused, and explains that `limit` truncates findings but never counts. It also specifies coordinate units in mils.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well front-loaded with purpose and source modes, then uses structured bullets for the six checks and a clean Args/Returns layout. It is somewhat long, but the length is justified by the six checks and six otherwise-undocumented parameters, so very little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex read-only audit tool with six parameters, no annotations, zero schema descriptions, and an output schema, the description supplies the missing operational context. It covers check meanings, source selection, return shape, error possibility, and downstream logging workflow, so an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document all six parameters. It does: `checks` names the allowed check families, `expect_file` and `board_json_path` explain live vs offline sources, `nets` explains the return-via-audit population, `max_distance_mils` gives the centre-to-centre rule and default 40, and `limit` clarifies per-kind finding truncation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise read-only audit action: measuring a board for layout-stage exit gates, with six named internal checks. It clearly distinguishes this aggregated audit from pcb_autoroute, pcb_run_drc, and the many single-purpose audit_find_* siblings by listing the exact check families it combines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context: run it before passing layout exit gates, then log the result as `data` on the stage_result for `design_next_action` to evaluate. It also explains the live vs saved-JSON modes. However, it does not explicitly say when to use this aggregate over sibling tools like `pcb_run_drc` or individual `audit_find_*` checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_lock_net_routingA
Lock or unlock track / arc / via primitives on a list of nets.
Standard workflow: before letting the autorouter touch the board,
lock the power / ground / clock / oscillator nets so a partial
re-route pass doesn't undo your careful hand-routing on them.
Set lock=False afterwards to free everything up.
Locked primitives have Moveable=False; the autorouter and
the interactive editor respect that flag when DXP Preferences →
PCB Editor → General → "Protect Locked Objects" is enabled.
The net-list-driven MCP equivalent of a cursor-driven lock.
Args:
nets: Net names to lock / unlock (e.g. ["VCC", "GND", "CLK_24M"]). Case-sensitive.
lock: True to lock (sets Moveable=False), False to unlock.
lock_components: Also lock any component with at least one
pad on a matched net. Useful to freeze the connectors /
regulators that anchor a hand-routed power section.
Default False.
Returns:
Dict with:
- locked: True / False mirror of the input
- matched_primitives: track + arc + via objects whose
net matched
- updated_primitives: how many actually changed state
- matched_components: components touched (only filled
when lock_components=True)
- updated_components: components whose Moveable flipped
| Name | Required | Description | Default |
|---|---|---|---|
| lock | Yes | ||
| nets | Yes | ||
| lock_components | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it states that locked primitives get ``Moveable=False``, that the autorouter/editor respect that flag only when 'Protect Locked Objects' is enabled, and that ``lock=False`` reverses the operation. It could still mention permission requirements or side effects on selection/UI state, but the behavioral disclosure is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and workflow, then uses structured Args and Returns sections. Despite its length, every section adds actionable information for calling and interpreting the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a multi-parameter PCB mutation with no annotations, no schema descriptions, and an output schema. The description compensates by explaining the workflow, behavioral flag semantics, parameter meanings, and return fields, leaving nothing critical unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains net names are case-sensitive, ``lock=True`` sets ``Moveable=False``, ``lock_components`` also locks any component with a pad on a matched net, and default behavior is documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: lock or unlock track / arc / via primitives on a list of nets. It clearly distinguishes the operation from sibling PCB mutation tools and leaves no ambiguity about what is being changed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete standard workflow: use before autorouting to protect power, ground, clock, and oscillator nets, then set ``lock=False`` afterward. It does not name a competing sibling tool as an alternative, but the usage context and exclusions are strong enough that an agent knows when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_make_paste_gridA
Split a single pad's solder-paste opening into a grid of smaller fills. The classic use case is the central thermal pad on a QFN / DFN / QFP -- a full-area paste opening makes the IC "swim" sideways during reflow as the molten solder pool reduces friction. Splitting the opening into smaller squares totalling ~50-75% coverage gives the IC something to bond to while letting flux gases escape.
Standard datasheet recommendations:
QFN / DFN exposed pad: 50-75% coverage, 0.3-0.5 mm squares with ≥ 0.2 mm gap (≈ 15 mils / 8 mils)
QFP heat-spreader: 60-70% coverage
Large connector body pads: 60% is usually enough
ALWAYS consult the IC manufacturer's recommended stencil pattern before defaulting to this script -- some packages specify a star, diagonal, or windowpane pattern; this tool only does a regular grid.
Args:
designator: Component reference designator, e.g. "U5".
pad_name: Pad identifier on that component. For QFN /
DFN exposed pads this is usually "0" or the
largest-numbered pad. Check the footprint first.
min_grid_size_mils: Starting grid block size, in mils.
Bumped up in 5-mil steps if coverage % is below
target. Default 15 mils (≈ 0.38 mm).
min_gap_mils: Minimum spacing between grid blocks, in
mils. Default 5 mils (≈ 0.13 mm).
min_coverage_pct: Target paste coverage as a percentage
of pad area, 0-100. Default 60. Iterates grid size
upward until met.
Returns:
Dict with {designator, pad_name, grid_x, grid_y, grid_size_mils, gap_x_mils, gap_y_mils, fills_placed, coverage_pct}. The existing full-area paste opening is
suppressed via PasteMaskExpansion = -pad_dimension on
the pad cache before the grid fills are laid down.
| Name | Required | Description | Default |
|---|---|---|---|
| pad_name | Yes | ||
| designator | Yes | ||
| min_gap_mils | No | ||
| min_coverage_pct | No | ||
| min_grid_size_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the burden, and it does disclose key behavior: the existing full-area paste opening is suppressed via PasteMaskExpansion = -pad_dimension before fills are laid down, and grid size iterates upward in 5-mil steps until coverage is met. It doesn't mention permissions, failure modes, or reversibility, keeping it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then a rationale, then datasheet guidance, then args/returns — a clean structure. The datasheet recommendation block is slightly long but earns its place by informing parameter choices.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotations, the description covers purpose, behavior (paste suppression), iteration, params, and returns are documented via the output schema. Missing only edge-case behavior (missing component/pad) and permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate — and it does, documenting all five params with meaning, units, defaults, and iteration logic (e.g. min_grid_size_mils bumped in 5-mil steps, min_gap_mils default 5 mils ≈ 0.13mm, min_coverage_pct target driving iteration).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Split a single pad's solder-paste opening into a grid of smaller fills.' The QFN/DFN/QFP thermal-pad framing makes it immediately distinguishable from all the routing/via/teardrop siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case (central thermal pad, IC 'swimming' during reflow) plus a clear when-not caveat: 'ALWAYS consult the IC manufacturer's recommended stencil pattern... this tool only does a regular grid' for star/diagonal/windowpane specs. It also supplies numeric guidance (50-75% coverage, 0.3-0.5mm squares) that steers parameter choices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_modify_layerA
Tune properties on an existing copper layer.
Every optional parameter is applied only if provided (non-empty string / non-zero number). Maps to: name IPCB_LayerObject.Name copper_thickness_mils IPCB_LayerObject.CopperThickness dielectric_type Dielectric.DielectricType (one of "none", "core", "prepreg", "surface") dielectric_height_mils Dielectric.DielectricHeight dielectric_constant Dielectric.DielectricConstant dielectric_material Dielectric.DielectricMaterial
Args: layer: Target layer name, e.g. "MidLayer1" name: New layer name (optional) copper_thickness_mils: New copper thickness in mils (optional) dielectric_type: "none" | "core" | "prepreg" | "surface" (optional) dielectric_height_mils: New dielectric height in mils (optional) dielectric_constant: New Dk value (optional) dielectric_material: New dielectric material string (optional)
Returns: Dictionary confirming the changes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| layer | Yes | ||
| dielectric_type | No | ||
| dielectric_constant | No | ||
| dielectric_material | No | ||
| copper_thickness_mils | No | ||
| dielectric_height_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the burden and does disclose a genuinely non-obvious behavior: optional parameters are applied only when provided (non-empty string / non-zero number), which warns the agent it cannot reset a value to zero/empty. It also discloses the underlying API targets and that a confirming dictionary is returned. Missing are failure modes (nonexistent layer) and confirmation/reversibility, keeping it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the field-mapping table plus Args list is readable. There is mild redundancy, since name, copper_thickness_mils and the dielectric fields are explained twice (mapping block and Args block), costing some space without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with 0% schema coverage and no annotations, the description supplies parameter meaning, units, enum values, and partial-update semantics. An output schema exists so return values needn't be documented. Remaining gap is error/precondition behavior for a nonexistent layer, which matters for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully, and it does: every one of the 7 parameters is explained with units (mils), semantics (Dk value, dielectric material string), and even an enumerated value set for dielectric_type that the schema does not encode as an enum. This is exactly the value-add the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: modify/tune properties on an existing copper layer. This clearly separates it from siblings like pcb_add_layer and pcb_remove_layer, though it never names those alternatives explicitly. An agent knows what the tool does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it operates on an *existing* layer and applies only supplied fields, so the agent can infer it is an edit-not-create tool. However, there is no explicit when-to-use/when-not guidance and no routing to alternatives such as pcb_get_layer_stackup for reading values or pcb_add_layer for creating a layer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_modify_polygonA
Modify a polygon pour's properties and its pour options.
Changes net, layer, hatching style, or the three "remove" options
from the Polygon Pour dialog. Use pcb_get_polygons first to
find the polygon index.
NOTHING HERE REPOURS. The pour options and the hatch style decide
what the NEXT pour produces, so the board does not change until
pcb_repour_polygons runs. The reply carries repour_needed
for that reason: a change that has been recorded and not yet
poured is otherwise indistinguishable from one that did nothing.
Args:
index: Polygon index (from pcb_get_polygons output)
net: New net name to assign (optional, empty = no change). A
name that matches no net on the board is reported under
not_applied rather than ignored.
layer: New layer name (optional, empty = no change)
hatch_style: New hatch style (optional). Exactly four are
accepted, and anything else is reported rather than
silently dropped:
"Solid" - solid copper fill
"NoHatch" - outline only, no fill
"45Degree" - 45-degree crosshatch
"90Degree" - 90-degree crosshatch
remove_dead: Remove dead copper, the islands with no connection
to the polygon's net. None leaves it unchanged.
remove_narrow_necks: Remove necks narrower than the polygon's
threshold. None leaves it unchanged.
remove_islands_by_area: Remove islands below the polygon's area
threshold. None leaves it unchanged.
Returns:
{"modified": bool, "success": bool, "index": N, "name": ..., "changed": [field names], "not_applied": [{item, reason}], "repour_needed": bool, "note": ...}.
``modified`` reports whether anything actually changed, not
whether the call ran. ``changed`` names each field that took.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| index | Yes | ||
| layer | No | ||
| hatch_style | No | ||
| remove_dead | No | ||
| remove_narrow_necks | No | ||
| remove_islands_by_area | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that the tool records changes without repouring, explains repour_needed, distinguishes modified from ran, and describes not_applied for rejected values. This is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but earns its length. Purpose is front-loaded, critical non-repour behavior is emphasized early, and the Args/Returns structure makes the 0%-documented schema usable without wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 7-parameter mutation tool with no annotations and 0% schema coverage. It documents all parameters, the side-effect boundary around repouring, and the return fields, so an agent can call it correctly without external context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents every parameter: index source, optional empty-string no-change semantics for net/layer, how unmatched net names are reported, the four accepted hatch styles, and None semantics for the three remove options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Modify a polygon pour's properties and its pour options.' It explicitly distinguishes this from repouring by naming pcb_repour_polygons and directs the agent to pcb_get_polygons for the index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use pcb_get_polygons first to find the polygon index, and states that nothing is repoured here so pcb_repour_polygons must run for the board to change. This gives clear when-to-use and alternative-tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_move_componentsA
Move and/or rotate MANY PCB components in ONE IPC round-trip.
PREFER THIS over moving one component per call. Each singular move is a full LLM turn (5-15 s); one call to this tool repositions every component in the list in a single Altium transaction.
Typical uses: applying a full layout pass, running an auto-placement result, undoing and redoing a placement set, adjusting a row of components relative to each other.
Args: moves: List of move dicts. Each dict supports: designator (required) , target component x (optional) , new X in mils y (optional) , new Y in mils rotation (optional) , new rotation in degrees
Example:
[
{"designator": "U1", "x": 5000, "y": 5000, "rotation": 0},
{"designator": "R1", "x": 5200, "y": 4800},
{"designator": "C1", "rotation": 90},
]Returns: Dictionary with per-designator results and a count.
| Name | Required | Description | Default |
|---|---|---|---|
| moves | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and adds useful behavioral context: all moves happen in a single Altium transaction and avoid the cost of separate LLM turns. It does not explicitly describe permissions, rollback behavior on partial failure, or validation of invalid designators, so the behavioral profile is not fully complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and rationale, then structured into Args, Example, and Returns. Despite being longer than a one-liner, every section helps with a nested parameter tool and there is no notable filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the nested parameter format and notes the return value, and an output schema exists. However, for a mutating batch operation with no annotations, it could be more complete by stating preconditions and what happens when one designator fails or is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only a minimally described array with additionalProperties, and schema description coverage is 0%. The description compensates by defining each move object's fields: required designator, optional x/y in mils, and optional rotation in degrees, plus a concrete example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: moving and/or rotating PCB components. It also scopes the operation as batch-oriented ('MANY ... in ONE IPC round-trip') and explicitly contrasts it with singular moves, so an agent can distinguish 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage guidance by preferring this tool over moving one component per call and by listing typical batch-use scenarios. It does not explicitly compare against PCB placement/alignment siblings such as pcb_align_components or pcb_place_components, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_move_tracks_to_layerA
Move all tracks of a net to one layer, adding vias where needed.
Relayers every track of net_name onto target_layer, then drops a
via at each same-net single-layer (SMD) pad that is NOT on the target
layer, since that pad can now only connect through a layer change.
Multilayer (through-hole) pads need no via. This flattens a net's
routing onto one layer, so use it deliberately.
Args: net_name: Net whose tracks move. target_layer: Destination signal layer (e.g. "BottomLayer"). via_size_mils: Via pad diameter for added vias (default 50). via_hole_mils: Via hole diameter (default 28).
Returns: {"net", "target_layer", "moved", "vias_added"}.
| Name | Required | Description | Default |
|---|---|---|---|
| net_name | Yes | ||
| target_layer | Yes | ||
| via_hole_mils | No | ||
| via_size_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does well: it states the flattens-everything side effect, explains exactly which pads get new vias and which (through-hole) do not, and warns to use it deliberately. It omits preconditions (net must exist, active PCB document) and reversibility, keeping it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its consequence before the mechanics and args; no filler sentences. The Args section is somewhat redundant with the schema but adds defaults/units, so it still earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, no-annotation, 4-parameter tool this covers purpose, side effects, parameters, and returns; an output schema exists, so the Returns line is a bonus rather than a necessity. The remaining gap is precondition/error behavior and the set of legal layer names, which an agent may need before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all parameter meaning, and it documents all four parameters including units (mils) and defaults (via_size_mils 50, via_hole_mils 28). It also gives a concrete example value for target_layer ("BottomLayer"), which the bare schema does not. It stops short of listing valid layer names or net-name format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb+resource+scope: move all tracks of a named net onto one layer, adding vias as needed. The follow-up explains the exact mechanics (relayer tracks, drop a via at same-net SMD pads not on the target layer). It does not distinguish itself from nearby siblings like pcb_place_tracks or pcb_cleanup_tracks, so it is clear but not sibling-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'This flattens a net's routing onto one layer, so use it deliberately' signals a caution/context but never states when to choose this over pcb_place_tracks or pcb_cleanup_tracks, nor any prerequisite such as an open board or a valid net. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_normalize_viasA
Set free vias to their Routing Via rule's sizes, or to given ones.
Without size_mils/hole_mils, each via takes its dominant
Routing Via rule's preferred diameter and hole. A rule in template
mode ("Templates Used To Check Via") is refused for its vias: its
size fields are not what it checks, and reading them once set nearly
every via on a board to a pad no larger than its hole. Use pcb_apply_via_template
for a template rule. Any target without an annular ring is refused.
Refused vias are left as they were.
Args: size_mils, hole_mils: An explicit diameter and hole, together. net: Only vias on this net. from_size_mils, from_hole_mils: Only vias at this size now (within 0.05 mil), e.g. to fix one group. dry_run: Report what would change and change nothing.
Returns:
changed, unchanged, failed (did not read back), the
refusal counts, and before/after: vias counted by
"diameter/hole" in mils. success is false when any via was
refused or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| dry_run | No | ||
| hole_mils | No | ||
| size_mils | No | ||
| from_hole_mils | No | ||
| from_size_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses refusal conditions (missing annular ring, template-mode rule), that refused vias are left untouched, that some vias may fail to read back, and that success is false when anything is refused or failed. It omits only things like undo/reversibility and permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavior statement is front-loaded and the Args/Returns blocks are well structured, but the prose is dense and slightly novelistic ('reading them once set nearly every via on a board...'), which costs a little tightness. Still, no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation with zero annotation and zero schema-description coverage, the description supplies defaults, refusal logic, tolerance, and failure semantics. An output schema exists, so the extra Returns detail is a bonus rather than a necessity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must supply all parameter meaning, and it does: size_mils/hole_mils must be supplied together, from_size_mils/from_hole_mils match 'within 0.05 mil', net restricts scope, and dry_run reports without changing. Every one of the six parameters is given semantics beyond its title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb ('Set') and object ('free vias') and states both modes of operation (rule-derived sizes or explicit sizes). It explicitly separates itself from the sibling pcb_apply_via_template, so an agent can route between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It spells out the default path (no size/hole args → dominant Routing Via rule), names the alternative tool and the exact condition that selects it (a rule in template mode), and gives a concrete use case for the from_* filters ('to fix one group'). Exclusions and alternatives are explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_panelizeA
Build a production panel on the CURRENT (blank) PCB document.
Open a new empty .PcbDoc and run this on it. Creates an embedded-board
array of child_path, a rectangular panel outline, corner tooling
holes, and fiducials. Supply the source board size
(board_width_mils / board_height_mils).
Args: child_path: path to the source .PcbDoc to array. board_width_mils, board_height_mils: source board size (mils). rows, cols: array dimensions. col_gap_mils, row_gap_mils: spacing between adjacent boards. border_mils: rail width around the array (also half the tooling inset). tooling_holes, fiducials: whether to add them.
Returns: {"panel_width_mils", "panel_height_mils", "rows", "cols", "tooling_holes", "fiducials"}.
| Name | Required | Description | Default |
|---|---|---|---|
| cols | No | ||
| rows | No | ||
| fiducials | No | ||
| child_path | Yes | ||
| border_mils | No | ||
| col_gap_mils | No | ||
| row_gap_mils | No | ||
| tooling_holes | No | ||
| board_width_mils | Yes | ||
| board_height_mils | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does well: it discloses that the tool mutates the active document, requires a blank document, emits several generated artifact classes, and specifies the return payload. It does not say what happens if the document isn't blank, whether prior content is wiped, or whether the operation is retryable/reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the critical precondition and effect, then a compact Args block and a Returns block; essentially no wasted sentences. Slightly long, and the Returns block partially duplicates the declared output schema, but the structure aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no annotations, the description covers preconditions, per-parameter meaning, and outputs, which is enough to call it correctly. The remaining gap is edge-case behavior (non-blank document, existing geometry, failure modes) which an agent would have to discover empirically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates fully: it defines every one of the 10 parameters, including units (mils), the non-obvious semantics of border_mils ('also half the tooling inset'), and what child_path and the two flags control. This is meaning the schema titles alone could not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Build a production panel on the CURRENT (blank) PCB document') and enumerates exactly what gets created: embedded-board array, panel outline, tooling holes, fiducials. The scope constraint (must run on a blank doc) immediately separates it from placement/outline tools like pcb_place_embedded_board or pcb_set_board_shape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition narrative: 'Open a new empty .PcbDoc and run this on it,' which implies the when-not (do not run on a populated board). It does not name an alternative tool for panelizing an existing design, but no obvious sibling competes, so context is clear though not exhaustively comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_3d_bodyA
Place a STEP model directly on the open PCB, as a free 3D body.
The equivalent of Altium's Place > 3D Body > Generic STEP Model: the model lands on the document itself, not inside a component.
USE THIS RATHER THAN lib_link_3d_model WHEN THE MODEL IS NOT
A PART. That tool writes into a .PcbLib footprint, so putting a
fixture, an enclosure or a device-under-test onto a board with it
means inventing a library, authoring a footprint, placing it and
then deleting all of that again. Reach for it only when the model
genuinely belongs to a component in a library.
Rotation cannot be set from here. IPCB_ComponentBody exposes
no Rotation, and the rotation that does exist lives on the
model behind an undocumented four-argument call, so the reply
reports rotation_applied: false rather than guessing. Rotate
in the editor if the orientation is wrong.
Args: model_path: absolute path to the .step / .stp file. x: body origin X in mils. This is the model's own origin, so where it lands depends on how the STEP was authored; check it against a known feature such as a silkscreen outline rather than assuming it is centred. y: body origin Y in mils. layer: board layer to attach it to. Default TopLayer. standoff_height: height in mils of the body's underside above the board. 0 sits it on the surface.
Returns:
{"success": true, "model_path": ..., "x": N, "y": N, "layer": ..., "standoff_height": N, "standoff_applied": bool, "rotation_applied": false, "note": ...}. The x and y are
READ BACK from the placed body, not echoed, because the
position is the one thing that cannot be checked without
opening the 3D view.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| layer | No | TopLayer | |
| model_path | Yes | ||
| standoff_height | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does well: it discloses that rotation cannot be applied and why, that x/y are read back from the placed body, and that standoff is a height in mils. It stops short of stating prerequisites (an open PCB document is implied) or what happens on re-placement over an existing body.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then use/avoid routing, then the rotation caveat, then args and returns — a sensible order. Some prose is expansive (the library round-trip aside), but every sentence still conveys actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, alternative routing, a hard capability limit (no rotation), all parameters with units and pitfalls, and the return payload despite an output schema existing. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for all five parameters: absolute path for model_path, mils plus an origin caveat for x/y, layer defaulting to TopLayer, and standoff_height as underside height with 0 meaning flush. The origin/centering warning adds real meaning absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place a STEP model directly on the open PCB, as a free 3D body') and immediately anchors it to the Altium menu command, making the operation unambiguous. It explicitly contrasts with the sibling lib_link_3d_model, so an agent can distinguish the two without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('when the model is not a part', fixtures/enclosures/DUT) and when-not-to ('reach for lib_link_3d_model only when the model genuinely belongs to a component in a library'). This is the strongest possible routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_angular_dimensionA
Place an angular dimension (angle between two reference directions).
Args: center_x, center_y: Vertex of the angle in mils x1, y1: First reference direction endpoint in mils x2, y2: Second reference direction endpoint in mils radius: Arc radius at which to draw the dimension in mils layer: Layer (default "TopOverlay")
Returns: Dictionary confirming the angular dimension
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| layer | No | TopOverlay | |
| radius | No | ||
| center_x | Yes | ||
| center_y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It implies a placement/write operation and notes the return value, plus units and default layer, but it does not state whether an active PCB document is required, whether the operation is reversible, or what side effects occur on the board.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then follows a clean Args/Returns structure. Every line earns its place, with no redundant or vague sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an 8-parameter placement tool with no annotations and an output schema, the description covers purpose and all parameter meanings completely enough for correct invocation. It falls short only on usage context and some behavioral details, which are minor relative to the parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all eight parameters. It does so thoroughly: center_x/center_y define the angle vertex, x1/y1 and x2/y2 define the two reference directions, radius defines the arc radius, and layer is documented with its default, all with units in mils.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ("Place") and resource ("angular dimension") and clarifies that it measures the angle between two reference directions. It is distinguishable from radial-dimension siblings by the word "angular", but it does not explicitly name or contrast with those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and how its arguments are interpreted, but it never says when to use this tool versus alternatives like pcb_place_radial_dimension or pcb_place_dimension. No exclusions, prerequisites, or context for selection are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_arcA
Place an arc on the active PCB.
Creates a circular arc segment defined by center, radius, and angular range.
Args: x_center: Arc center X position in mils y_center: Arc center Y position in mils radius: Arc radius in mils start_angle: Start angle in degrees (default 0) end_angle: End angle in degrees (default 360 = full circle) width: Arc line width in mils (default 10) layer: PCB layer name (default "TopLayer")
Returns: Dictionary with placed arc geometry and layer
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | TopLayer | |
| width | No | ||
| radius | Yes | ||
| x_center | Yes | ||
| y_center | Yes | ||
| end_angle | No | ||
| start_angle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does carry behavioral detail: it names units in mils and degrees, gives defaults for start/end angle, width, and layer, and states that a geometry dictionary is returned. However, it does not disclose side effects, prerequisites such as requiring an open PCB document, or what happens if the layer is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded: the first sentence states the action and target, the second clarifies the geometry, and the Args/Returns sections are compact and scannable. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter placement tool with no annotations and an existing output schema, the description covers the core geometry, units, defaults, and return summary. It could additionally state that an active PCB document and valid layer are required, but the essential calling information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents all seven parameters with meaning and units: x_center/y_center and radius in mils, angles in degrees, width in mils, and layer defaulting to TopLayer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: place an arc on the active PCB. It further clarifies that this creates a circular arc segment defined by center, radius, and angular range, which distinguishes it from generic drawing or placement tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying the arc is placed on the active PCB, but it does not explicitly compare this tool with alternatives such as pcb_place_tracks, pcb_place_region, or lib_add_footprint_arc. There are no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_componentsA
Place one or many footprints from PcbLibs onto the board in ONE call.
The scriptable substitute for ECO / Design ▸ Update PCB Document: Altium's ECO always raises a modal, so for unattended population this drops footprints straight onto the board. It resolves the board once and places every footprint in a single Altium transaction (one IPC round-trip). Pass a single-element list to place just one.
Two modes per component: geometry only (omit unique_id /
pad_nets) leaves pads unconnected (DRC flags them), good for
artwork / panelization / fiducials / placement studies; synced
(pass both) stamps the schematic UniqueId so a later ECO matches the
part and creates+assigns each pad's net for real connectivity. Read
unique_id via query_objects(eSchComponent, "Designator.Text,UniqueId") and pad_nets from the compiled
netlist (proj_get_connectivity_many → pad number → net).
board_path: target a specific .PcbDoc when several are open
(resolved once for the whole batch). Otherwise the focused board
is used.
Args:
placements: List of placement dicts, each with:
footprint (required), library_path (required, .PcbLib),
x, y (mils), designator, lib_reference, comment,
rotation, layer, unique_id, and pad_nets
({pad_name: net_name}); omit unique_id/pad_nets for
geometry-only, include them for a synced placement.
board_path: Absolute .PcbDoc path to place onto (optional).
Returns:
Dict with placed (count), failed (count), total.
| Name | Required | Description | Default |
|---|---|---|---|
| board_path | No | ||
| placements | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses the mutation, the modal-free unattended workflow, single-transaction batching, DRC consequences in geometry-only mode, and real net creation in synced mode. It also clarifies that the board is resolved once for the whole batch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then structured into mode behavior, Args, and Returns. Its length is justified by the complex nested placements list and the absent schema documentation; every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex batch-placement operation, empty parameter schema, no annotations, and presence of an output schema, the description provides everything needed: placement modes, required fields, board targeting, sourcing of sync data, and a return summary. No material gaps remain for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document parameters, and it does: it lists required fields, units for x/y, optional placement metadata, the unique_id/pad_nets toggles, and board_path behavior. It even explains how to source unique_id and pad_nets, adding meaning well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: placing one or many PcbLib footprints onto the board in one call. It further distinguishes itself as the scriptable substitute for Altium's ECO/Update PCB Document workflow, making its role clear against the modal UI path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear mode-selection guidance: omit unique_id/pad_nets for geometry-only placement, include both for synced connectivity, and pass a single-element list to place one component. It also explains board_path for multi-board sessions, though it does not explicitly compare itself with sibling tools such as app_update_from_libraries or pcb_import_placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_dimensionA
Place a linear dimension between two points.
Horizontal dimension measures delta-X, vertical measures delta-Y. Orientation auto-detects from the larger axis delta if not given.
Args: x1, y1: First reference point in mils x2, y2: Second reference point in mils layer: Layer to draw the dimension on (default "TopOverlay") orientation: "horizontal" or "vertical" ("" = auto)
Returns: Dictionary confirming the dimension placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| layer | No | TopOverlay | |
| orientation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It adds coordinate units in mils, the default layer, auto-orientation behavior, and that it returns a confirmation dictionary, but it does not state that the tool mutates the PCB by creating an object or requires an active document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then briefly explains orientation behavior, followed by compact Args and Returns sections. Every sentence supports invocation or understanding of the parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers purpose, orientation logic, all parameters, and a return confirmation, which is sufficient to invoke the tool. It omits the active-document prerequisite and mutation side effects, which are notable for a placement tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all six parameters. It does so by documenting x1/y1 and x2/y2 as reference points in mils, layer with its default, and orientation with allowed values and auto behavior when empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, 'Place', and resource, 'linear dimension between two points'. The word 'linear' clearly distinguishes it from sibling tools pcb_place_angular_dimension and pcb_place_radial_dimension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains horizontal versus vertical measurement and auto-detection, which gives useful context for the orientation parameter. However, it does not explicitly say when to choose this tool over angular or radial dimension siblings, nor does it state prerequisites such as requiring an active board.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_embedded_boardA
Place an embedded-board array (panel) referencing a child PCB.
An embedded board is a grid of copies of a child .PcbDoc file, used for panelization (multi-up arrays, step-and-repeat).
Args: child_path: Full path to the child .PcbDoc file. x, y: Bottom-left corner of the array in mils. rows, cols: Grid size (default 1x1). row_spacing_mils, col_spacing_mils: Gap between array cells. mirror: Flip the child board over when True. layer: Placement layer for the embedded-board primitive.
Returns: Dict with success, child_path, rows, cols, x, y.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| cols | No | ||
| rows | No | ||
| layer | No | TopLayer | |
| mirror | No | ||
| child_path | Yes | ||
| col_spacing_mils | No | ||
| row_spacing_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses units (mils), defaults (1x1 grid, TopLayer), and a return dict shape, but says nothing about whether the current document is mutated, what happens on an invalid child_path, or whether the embedded board can later be updated when the child changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded conceptual definition followed by a compact Args block — well ordered and easy to scan. The Returns section is slightly redundant since an output schema exists, but it is short and does not crowd out the useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with nine params, no annotations, and an output schema. Parameters and return values are covered well, but the description omits operational preconditions (target board open, child file present) and the relationship to pcb_panelize, which are the main things an agent could get wrong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must do the work — and it documents all nine parameters with meaning beyond the bare names: x/y as the bottom-left corner in mils, rows/cols as grid size, spacing as gaps between cells, mirror as flipping the child. Only gap is no elaboration on valid layer values or whether spacing matters when a dimension is 1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place an embedded-board array referencing a child PCB') and explains what an embedded board is (grid of copies for panelization). An agent can distinguish it from generic placement tools, but it never names the closely related sibling pcb_panelize, so the differentiation is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the panelization framing (multi-up arrays, step-and-repeat), but there are no explicit when-to-use/when-not conditions, no prerequisites such as the child .PcbDoc needing to exist, and no pointer to pcb_panelize as the alternative for panelizing the current board.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_fillA
Place a rectangular copper fill on the active PCB.
Creates a solid copper rectangle. Useful for thermal pads, ground planes, and copper pours in specific areas.
Args: x1: First corner X in mils y1: First corner Y in mils x2: Second corner X in mils y2: Second corner Y in mils layer: PCB layer name (default "TopLayer") net_name: Net name to assign (optional, empty = no net)
Returns: Dictionary with placed fill coordinates and layer
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| layer | No | TopLayer | |
| net_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that this is a write operation creating a solid copper rectangle and that net assignment is optional, but it omits important behavior such as whether existing polygons need repouring, whether the net must already exist, and whether DRC runs automatically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by a brief use-case sentence and a compact Args/Returns block. Every sentence is relevant, though the Returns section is somewhat redundant because an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity PCB mutation tool with six parameters, an output schema, and no annotations, the description covers the effect, all argument semantics, units, and return shape. It is callable as written, though it lacks richer behavioral context about polygon repour side effects and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents all six parameters, including the crucial units ('X in mils'), the layer default ('TopLayer'), and the optional net behavior ('empty = no net'). This adds substantial meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Place a rectangular copper fill on the active PCB.' It also clarifies the object type ('solid copper rectangle') and common uses. It does not distinguish this from close siblings such as pcb_place_polygon_rect or pcb_place_region.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implied usage guidance by naming thermal pads, ground planes, and copper pours. However, it does not say when to choose this over pcb_place_polygon_rect, pcb_place_region, or pcb_repour_polygons, nor does it state any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_padA
Place a standalone pad on the active PCB.
Not part of any component. Use for fiducials, test points, mounting holes. Set hole_size=0 for surface-mount pads, nonzero for through-hole.
Args: x, y: Position in mils name: Pad designator / label (optional) net: Net to connect to (optional) shape: "round" (default) / "rect" / "oct", or spelled out as the library tools take them ("rectangular", "octagonal"). Any other word is refused; it used to become a round pad. x_size, y_size: Pad dimensions (default 60 mil) hole_size: Drill diameter (0 = SMD) layer: Copper layer (default "TopLayer") units: "mil" (default) or "mm", for the position and every size, kept exact rather than rounded to whole mils.
Returns: Dictionary confirming pad placement
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| net | No | ||
| name | No | ||
| layer | No | TopLayer | |
| shape | No | round | |
| units | No | mil | |
| x_size | No | ||
| y_size | No | ||
| hole_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses validation behavior ('Any other word is refused; it used to become a round pad'), the SMD vs through-hole semantics, and that unit conversions are kept exact rather than rounded. It still omits prerequisites (must a board be active? does the net need to exist?) and whether the placement is undoable, but the disclosure goes well past the minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action and the disambiguating scope lead, followed by use cases and then per-parameter notes, so a reader can stop early. The Args block is dense but every line adds information; the docstring framing is slightly verbose but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no annotations this is nearly complete: purpose, use cases, parameter meanings, and validation quirks are all present, and an output schema exists so return values need not be described. The remaining gap is preconditions on the active document and net existence, which an agent would still have to discover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely and it does: all ten parameters are explained with units, defaults, and meaning. It also supplies the shape vocabulary (including the long-form aliases the library tools accept) that the schema leaves as a bare string with no enum, and clarifies that units governs both position and every size.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place a standalone pad on the active PCB') and immediately scopes it against the large family of pad-related siblings with 'Not part of any component.' An agent can distinguish this from lib_add_footprint_pad or pcb_place_via 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases (fiducials, test points, mounting holes) and a decision rule for the key parameter branch (hole_size=0 for SMD, nonzero for through-hole). It does not name a specific alternative sibling for the 'I want a pad inside a footprint' case, so the routing 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.
pcb_place_polygon_rectA
Drop a copper polygon pour on a rectangular area.
Useful for placing a ground plane or power plane: pass the board's corners, the layer, and the net name (typically "GND"). Set pour_over=False to force the pour around same-net tracks/pads instead of covering them.
Args: x1: First corner X in mils y1: First corner Y in mils x2: Opposite corner X in mils y2: Opposite corner Y in mils net: Net name to assign (empty = no-net fill, unusual) layer: Copper layer (default "TopLayer") pour_over: Pour over same-net objects (default True)
Returns: Dictionary confirming the polygon placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| net | No | ||
| layer | No | TopLayer | |
| pour_over | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the non-obvious pour_over semantics (covering vs. flowing around same-net objects) and that an empty net means a no-net fill, but says nothing about prerequisites (an open/active PCB document), whether the resulting pour must be repoured, or mutating side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then a two-sentence usage note, then an Args block that earns its place. The only waste is the closing 'Dictionary confirming the polygon placement', which is redundant because an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations, the description covers purpose, parameters, units, and the one tricky flag, and it needn't explain return values thanks to the output schema. Missing prerequisites and the interaction with repour/DRC keep it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does: it documents all seven parameters including units (mils) for x1/y1/x2/y2, corner semantics (first vs. opposite), default layer 'TopLayer', pour_over default True, and the unusual empty-net case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening line gives a specific verb+resource+shape: 'Drop a copper polygon pour on a rectangular area.' That does distinguish it from pcb_start_polygon_placement (interactive/arbitrary shape) and pcb_place_region/fill, but it never names those siblings, so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the intended use ('ground plane or power plane', pass board corners, layer, net typically 'GND') and gives a conditional rule for pour_over, which is real guidance. It offers no explicit when-not-use case and no named alternative for non-rectangular pours or repouring (pcb_repour_polygons, pcb_start_polygon_placement).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_radial_dimensionB
Place a radial dimension around a center point with a given radius.
Args: center_x, center_y: Center point in mils radius: Radius to dimension in mils layer: Layer (default "TopOverlay")
Returns: Dictionary confirming the radial dimension
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | TopOverlay | |
| radius | Yes | ||
| center_x | Yes | ||
| center_y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the tool places an object, gives units in mils, states the default layer, and mentions a confirming return dictionary, but it does not describe side effects, whether existing dimensions are affected, permission or layer constraints, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action, followed by a structured Args section and a brief Returns note. The Returns sentence is somewhat redundant because an output schema exists, but there is little waste overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema removes the need to explain return values in detail, and parameter semantics are covered. However, for a PCB placement tool with several dimension-related siblings, the description lacks routing guidance and behavioral context that an agent would need to select and invoke it confidently in the right situations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does document all four parameters: center_x, center_y, radius, and layer. It adds meaningful semantics by specifying units in mils and the default layer value, though it does not enumerate valid layer names or coordinate origin details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: placing a radial dimension around a center point with a given radius. It is clear what the tool creates, but it does not explicitly distinguish itself from related siblings such as pcb_place_dimension or pcb_place_angular_dimension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of the standard or angular dimension tools, nor any prerequisites such as active document, board context, or layer requirements. The agent must infer appropriate usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_regionA
Place a solid copper region on a rectangular area.
Regions are solid primitives; unlike polygons, they don't participate in the connectivity engine unless you assign a net. Use for mechanical copper zones, thermal pads, or solder-mask openings. For a true ground plane with ratsnest tracking, prefer pcb_place_polygon_rect.
Args: x1, y1, x2, y2: Opposite corners in mils (any order) layer: Copper or mech layer (default "TopLayer") net: Optional net assignment
Returns: Dictionary confirming the region placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| net | No | ||
| layer | No | TopLayer |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose a non-obvious behavioral trait: regions do not participate in the connectivity engine unless a net is assigned. It does not state what happens on overlap with existing copper, whether placement is additive or overwriting, or whether it can be undone, which matters for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then a short rationale, then args. Mostly tight, but the "Returns: Dictionary confirming the region placement" line is redundant since an output schema exists, and the prose wraps more than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values are covered by the output schema and need not be described, and all six parameters are explained. What's missing for a board-mutating placement tool is any statement of preconditions (active document/board required) or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents units (mils), that corners may be given in any order, the layer default and accepted layer kinds, and that net is optional. It stops short of enumerating valid layer names or explaining what an empty net string means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Place a solid copper region on a rectangular area") and immediately differentiates the primitive type from polygons. An agent can distinguish this from pcb_place_polygon_rect or pcb_place_fill 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit positive use cases (mechanical copper zones, thermal pads, solder-mask openings) and an explicit negative/alternative routing rule: use pcb_place_polygon_rect for a true ground plane with ratsnest tracking. This is a full when/when-not/alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_stitching_viasA
Place a grid of stitching vias on a named net within a rectangle.
Standard RF / EMC tool: place GND stitch vias around high-speed traces so the return current has a low-inductance path between reference planes. Also used near connectors / clock generators / EMI-sensitive areas.
Algorithm: walk a regular grid inside the rectangle; for each
gridpoint, spatial-iterate within via_size_mils/2 + clearance_mils. Skip the gridpoint if any non-same-net
primitive (pad / via / track / arc) is in range. Otherwise
create a top→bottom through-via on the target net.
The default is dry-run because mutating a board with N×M
new vias is risky. Confirm the placed / skipped count
looks right, then call again with dry_run=False.
Args: net: Target net (must already exist on the board). x1_mils, y1_mils, x2_mils, y2_mils: Inclusive rectangle where the grid is placed. PCB origin is bottom-left by Altium convention. spacing_mils: Grid spacing (default 50). For GND stitching near a high-speed bus, /4 of the wavelength of the highest harmonic is a common rule of thumb. via_size_mils: Via pad diameter (default 30). via_hole_mils: Via drill diameter (default 14). clearance_mils: Min gap to any non-same-net existing primitive (default 10). dry_run: When True (default), only count would-be placements without mutating the board.
Returns:
Dict with {net, dry_run, placed, skipped, spacing_mils, clearance_mils}.
| Name | Required | Description | Default |
|---|---|---|---|
| net | Yes | ||
| dry_run | No | ||
| x1_mils | Yes | ||
| x2_mils | Yes | ||
| y1_mils | Yes | ||
| y2_mils | Yes | ||
| spacing_mils | No | ||
| via_hole_mils | No | ||
| via_size_mils | No | ||
| clearance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it discloses the default dry-run safety posture and why (N×M via mutation is risky), the exact skip rule (non-same-net pad/via/track/arc within via_size/2 + clearance), that it creates top→bottom through-vias, and that the target net must already exist on the board.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary, then rationale, algorithm, a bolded safety note, and conventional Args/Returns sections — easy to scan. Slightly long; the RF rationale paragraph is useful but could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutating board tool with no annotations, the description covers purpose, risk, algorithm, every argument, and the return dict's keys (net, dry_run, placed, skipped, spacing_mils, clearance_mils). Nothing an agent needs to call it safely and correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: all ten parameters are explained with units, defaults, and semantics (inclusive rectangle, bottom-left origin per Altium convention, spacing rule of thumb of λ/4 of the highest harmonic, clearance measured against any non-same-net primitive). This is meaning the schema titles alone would never convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (place), resource (stitching vias), and scope (grid on a named net inside a rectangle), and the algorithm paragraph makes the spatial-clearance behavior concrete. It never names the closely related siblings pcb_place_via_array / pcb_place_vias, so an agent must infer the difference from behavior rather than from an explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use context (RF/EMC return-path stitching around high-speed traces, near connectors, clock generators, EMI-sensitive areas) and a strong operating protocol (dry-run first, inspect placed/skipped, then re-call with dry_run=False). No explicit 'do not use for X, use tool Y instead' routing against the other via-placement tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_textA
Place a text string on the active PCB.
Args:
text: Text content to place
x: Text X position in mils
y: Text Y position in mils
layer: PCB layer name (default "TopOverlay"). Common choices:
"TopOverlay", "BottomOverlay", "TopLayer", "BottomLayer",
"Mechanical1"-"Mechanical16"
height: Text height in mils (default 60), decimals allowed
rotation: Rotation angle in degrees (default 0)
stroke: Stroke width in mils; 0 keeps Altium's default.
To resize existing designators use pcb_set_text_style.
Returns: Dictionary with placed text properties, height and stroke as read back from the placed text
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| text | Yes | ||
| layer | No | TopOverlay | |
| height | No | ||
| stroke | No | ||
| rotation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does meaningfully: it discloses that stroke=0 preserves Altium's default, that height accepts decimals, that coordinates are in mils, and that the return value reflects properties read back after placement. It stops short of stating undoability or what happens if no PCB is active, which is the remaining gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The docstring is front-loaded with the core action, then structured per-parameter with no filler. The Returns block is somewhat redundant given an output schema already exists, but it is brief and does not crowd out the essential content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter mutation tool with zero schema descriptions and no annotations, the description covers every parameter, defaults, units, and layer enumeration, and the output schema removes any need to document the return payload in depth. An agent has what it needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the schema carries only titles and defaults — so the description must compensate, and it does for all seven parameters. It adds units (mils, degrees), enumerates valid layer values including the Mechanical1–Mechanical16 range, and explains the special stroke=0 semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: "Place a text string on the active PCB." That is unambiguous and lets an agent distinguish it from library-side text tools such as lib_add_footprint_text or style tools such as pcb_set_text_style. It does not explicitly name the closest siblings (sch_place_text_frame, pcb_set_text_style) in a routing sense, keeping it just under a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete alternative for an adjacent task — "To resize existing designators use pcb_set_text_style" — plus defaults for layer, height, rotation, and stroke that guide invocation. It does not state prerequisites such as needing an open, active PCB document, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_thieving_padsA
Fill bare copper area with a grid of isolated thieving pads.
Drops a regular grid of small round pads on layer, inside the board
outline minus margin_mils. A grid point is skipped whenever any
existing primitive (track, arc, via, pad, fill, region, polygon, or
component body) sits within half-pad + clearance of it, so pads land
only in genuinely empty regions. Pads carry no net. Evens out plating
current on sparse boards. Capped at 5000 pads per run.
Args: layer: Copper layer to populate (default TopLayer). pad_size_mils: Pad diameter (default 20). pitch_mils: Grid spacing (default 50). clearance_mils: Keep-out from existing copper (default 15). margin_mils: Inset from board edge (default 100).
Returns: {"placed", "scanned", "layer"}.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | TopLayer | |
| pitch_mils | No | ||
| margin_mils | No | ||
| pad_size_mils | No | ||
| clearance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full load and does most of it: it discloses the grid-skip rule against existing primitives, that pads carry no net, and a 5000-pad cap. Missing only permission/side-effect framing (e.g. undo safety), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then geometry rules, then args/returns. Slightly long because defaults are restated from the schema, but every sentence conveys usable behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers decision rules (what gets skipped), limits (5000 cap), semantics (no net), and even echoes the return keys. With an output schema present, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the descstring documents all five parameters with units and defaults (pad diameter, grid spacing, keep-out, board-edge inset, layer). This fully compensates for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Fill'), specific resource ('thieving pads'), plus the key disambiguator that pads carry no net, which separates it from via-array/stitching-via siblings. An agent can tell this is additive copper grid generation, not a via placement tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The rationale 'Evens out plating current on sparse boards' implies when to reach for it, but there is no explicit when-not or named alternative (e.g., pcb_place_stitching_vias, pcb_make_paste_grid). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_tracksA
Place many track segments on the active PCB in ONE IPC round-trip.
PREFER THIS over placing one segment at a time whenever you have more than one segment to place. The whole batch is wrapped in a single PreProcess/PostProcess and a single save, so 50 tracks take roughly the same wall time as 1. Typical uses: routing a full net, laying down a whole stitch pattern, replicating a motif, drawing a keepout rectangle.
Args: tracks: List of track dicts. Each dict supports: x1, y1, x2, y2 (required, mils; decimals are kept) width (default 10, mils; decimals are kept, so a 0.1 mm rule stays 3.937), layer (default "TopLayer"), net_name (optional, empty = no net)
Example:
[
{"x1": 5010, "y1": 4785, "x2": 5070, "y2": 4785,
"width": 10, "net_name": "NetC8_2"},
{"x1": 5070, "y1": 4785, "x2": 5070, "y2": 4862,
"width": 10, "net_name": "NetC8_2"},
]Returns: Dictionary with "placed" and "failed" counts
| Name | Required | Description | Default |
|---|---|---|---|
| tracks | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description steps up well: it discloses the single PreProcess/PostProcess wrapper, a single save, and the resulting near-constant wall time. It also surfaces that failures are counted ('failed'), hinting at partial success. It stops short of stating whether a batch is atomic, whether permission/DRC checks apply, or whether regions must be repoured afterwards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the imperative and the batch-vs-single decision, then args, then example – good ordering. Slightly verbose: the wall-time rationale and a two-entry example run longer than strictly necessary, though both do add practical value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything needed to invoke it correctly: units, defaults, required vs optional keys, an example, and a return summary (with an output schema also present). For a one-parameter batch-write tool this is sufficient to call safely on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% – the schema is an untyped array of opaque objects – so the description carries the full burden and does: it names every per-track key (x1, y1, x2, y2 required; width default 10; layer default "TopLayer"; net_name optional with empty = no net), specifies mils as the unit, notes decimals are preserved with a worked mm-to-mil example, and supplies a sample payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place many track segments on the active PCB') plus a scoping mechanism ('in ONE IPC round-trip'). This clearly distinguishes it from single-segment placement, which the description calls out explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a direct routing rule ('PREFER THIS over placing one segment at a time whenever you have more than one segment to place') and then enumerates four concrete use cases (full net routing, stitch pattern, motif replication, keepout rectangle). An agent knows exactly when to pick this tool over iterating a single-placement call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_viaA
Place a via at specific coordinates on the active PCB.
Sizes take fractions of a mil, or millimetres through size_mm
and hole_size_mm, so a 1.2/0.6 mm via is exactly that and
matches a metric Routing Via rule. Whole mils made it
1.194/0.610 mm. A hole as wide as the pad is refused.
Args:
x: Via X position in mils
y: Via Y position in mils
net: Net name to assign (optional, empty = no net)
size: Via pad diameter in mils (default 50)
hole_size: Drill hole diameter in mils (default 28)
low_layer: Start layer (default "TopLayer")
high_layer: End layer (default "BottomLayer")
size_mm: pad diameter in mm, used instead of size
hole_size_mm: hole diameter in mm, used instead of
hole_size
Returns: Dictionary with placed via position and size (mils)
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| net | No | ||
| size | No | ||
| size_mm | No | ||
| hole_size | No | ||
| low_layer | No | TopLayer | |
| high_layer | No | BottomLayer | |
| hole_size_mm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it explains unit handling (fractions of a mil vs millimetres), states that a hole as wide as the pad is refused, lists defaults, and describes the return. It omits permission requirements, undo behavior, and DRC implications, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by a useful units caveat, then a structured Args list and Returns line. The first paragraph is slightly longer than necessary, but each sentence earns its place by preventing unit mistakes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no annotations, and an output schema, the description is largely complete: it defines units, defaults, constraints, and the return shape. It does not cover permissions or sibling-tool selection, but the core invocation is well supported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate fully, and it does. Every one of the 9 parameters is documented with meaning, units, defaults, and interaction (e.g., size_mm replaces size, hole_size_mm replaces hole_size, net optional empty = no net). This is exactly the semantic detail a caller needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb and resource: place a via at coordinates on the active PCB. It does not distinguish this tool from sibling tools like pcb_place_vias or pcb_place_via_array, which handle multiple vias, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Place a via at specific coordinates,' but the description offers no explicit guidance on when to choose this single-via tool over pcb_place_vias, pcb_place_via_array, or pcb_place_stitching_vias. There are no exclusions or alternative-routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_via_arrayA
Stitch vias in a regular grid across a rectangle.
Typical use: GND stitching between top and bottom layer copper pours. Places vias at every (pitch × pitch) grid intersection inside the rectangle.
Args: x1: First corner X in mils y1: First corner Y in mils x2: Opposite corner X in mils y2: Opposite corner Y in mils pitch: Grid spacing in mils (default 50) net: Net to assign (typically "GND"; empty = no net) size: Via pad diameter in mils (default 30) hole_size: Drill hole diameter in mils (default 12) low_layer: Start layer (default "TopLayer") high_layer: End layer (default "BottomLayer")
Returns: Dictionary with count of vias placed and rectangle/pitch echo
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| net | No | ||
| size | No | ||
| pitch | No | ||
| hole_size | No | ||
| low_layer | No | TopLayer | |
| high_layer | No | BottomLayer |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full behavioral burden. It describes the operation and return value (count, echo) but omits important side-effect details such as whether it modifies the board permanently, any layer restrictions, or potential DRC implications. This is useful but incomplete for a mutation tool without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded with the core purpose and use case, then systematically lists arguments and return value. It is slightly verbose but every sentence contributes necessary information; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters) and the presence of an output schema, the description covers parameters and return value well. It falls short only in not clarifying side effects or edge cases (e.g., existing vias, layer validity), but the essential information for an agent to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully by documenting all ten parameters with clear meanings, units, and defaults (e.g., 'pitch: Grid spacing in mils (default 50)', 'net: Net to assign (typically GND)'). This adds substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (stitch/place) and resource (vias in a regular grid across a rectangle), and includes a typical use case. However, it does not explicitly distinguish itself from related siblings like pcb_place_stitching_vias or pcb_place_vias, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a typical use (GND stitching between copper pours) but offers no explicit guidance on when to prefer this over similar tools (e.g., pcb_place_stitching_vias). Usage is implied rather than contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_place_viasA
Place many vias on the active PCB in ONE IPC round-trip.
PREFER THIS over pcb_place_via whenever there is more than one
via: the batch is one PreProcess/PostProcess and one broadcast.
Coordinates and sizes keep their decimals, so a via laid by a
router on a sub-mil grid lands where the router put it.
Args: vias: List of via dicts. Each dict supports: x, y (required, mils), size (default 50), hole_size (default 28), low_layer (default "TopLayer"), high_layer (default "BottomLayer"), net (optional, empty = no net)
Returns: Dictionary with "placed" and "failed" counts and "unknown_layers" naming any layer pair that did not resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| vias | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the batching model (one PreProcess/PostProcess and one broadcast), the coordinate fidelity guarantee (sub-mil decimals preserved), and the failure-reporting contract (placed/failed counts, unknown_layers). It omits prerequisites such as needing an active PCB document, whether the operation is undoable, and what happens when a layer pair fails to resolve beyond reporting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the selection rule before any mechanics, then Args/Returns in a predictable structure. Every sentence carries information — the decimal-preservation note justifies the design rather than padding it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with a 0%-coverage nested schema and an output schema, the description supplies what the schema cannot (per-key semantics) and what the annotations cannot (batch/broadcast behavior, failure counts). Nothing needed to call it correctly is missing; return values are covered by the output schema and briefly summarized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the schema is only an untyped array of open objects — so the description must compensate, and it does: every key is named with units (mils), defaults (size 50, hole_size 28, low_layer TopLayer, high_layer BottomLayer), required vs optional status (x/y required, net optional with empty meaning no net). This is meaning the agent could not obtain from the schema at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (place vias on the active PCB) plus a differentiating scale/mechanism (many vias in ONE IPC round-trip), and explicitly contrasts with the nearest sibling pcb_place_via. An agent can tell this apart from the single-via tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule: prefer this over ``pcb_place_via`` whenever there is more than one via. That is a clear when-to-use with a named alternative. It does not address the other overlapping siblings (pcb_place_via_array, pcb_place_stitching_vias) or state when this tool should not be used, so it stops short of a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_plan_placementA
Connectivity-driven auto-placement: shorten wirelength, keep components legal. Dry-run by default -- returns a proposed move list and quality metrics without touching the board.
A pure-Python solver run on the current board. It reads the compiled netlist and every component's real footprint bounding box, then improves positions to minimize half-perimeter wirelength (HPWL) while keeping components inside the board outline and free of same-layer overlaps.
Two solver cores are available via engine:
"refine"(default): a force-directed relaxation that nudges the board's CURRENT positions, then a legalization pass. Best for tidying an already-placed board."construct": a from-scratch constructor that sizes the placement, seeds parts at connectivity-weighted centroids, chooses orientations, legalizes, and runs a short cooled polish on a full multi-term objective (wirelength, overlap, board-edge, decoupling proximity, connector banding, thermal). Best for an unplaced or badly scrambled board. The full per-term objective is always returned underobjective_report.
With optimize_rotation (default on) it also picks each
eligible part's orientation (0/90/180/270) to point its pins at
the nets they connect -- the classic auto-place win for 2-pin
passives. This needs per-pin geometry, so the tool also reads the
board's pads and maps them to components; orientation is only
considered for top-side parts currently sitting at an orthogonal
angle (others keep their rotation).
Workflow: call once with apply=False (default), read the
hpwl_improvement_pct and overlap_pairs_after, eyeball the
moves, then call again with apply=True to commit them in
one pcb.batch_move_components transaction. Components on
opposite layers may share an X/Y footprint (they cannot
physically collide).
Seeding: by default the solver refines the board's CURRENT
positions (small, sensible nudges). Pass reseed_grid=True for
a from-scratch re-place (ignores current positions) -- use only
on an unplaced or badly-scrambled board.
Args:
designators: If given, ONLY these components are moved; every
other placed component is held fixed but still attracts
its nets and blocks overlaps. If omitted, all components
are candidates (minus fixed).
fixed: Designators to pin in place (connectors, mounting
holes, anything already positioned). Naming-agnostic --
you choose which; the tool does not guess by prefix.
region: Placement bounds {x1, y1, x2, y2} in mils. If
omitted, the board outline's bounding rectangle is used.
iterations: Global-placement relaxation steps (default 400).
More iterations = better convergence, longer runtime.
grid_mils: Snap grid for final positions (default 5).
clearance_mils: Extra copper-to-copper breathing room added
to each pair's half-extents (default 15).
max_net_fanout: Skip nets touching more than this many
components (default 0 = keep all). Set e.g. 20 to ignore
power/ground planes that do not usefully guide placement.
exclude_nets: Explicit net names to ignore (e.g. ["GND"]).
critical_nets: Net names to treat as placement-critical (e.g. a
clock, a high-speed pair, a sensitive analog feedback line).
Their pull is scaled by critical_weight so the solver
keeps their endpoints close and shortens those traces first,
at a small cost to ordinary nets. You (the planner) decide
which nets matter; the tool does not guess by name.
critical_weight: Multiplier applied to critical_nets pull
(default 3.0, clamped to [1, 20]). Higher = more aggressive
shortening of the critical nets versus the rest.
edge_parts: {refdes: band} mapping parts that must sit on a
board EDGE to which edge -- "L"/"R"/"T"/"B"
(left/right/top/bottom). The solver seats each against that
edge (centred on the free axis) and holds it there. Use for
connectors, mounting holes, USB/headers -- anything needing
cable or panel access. You (the planner) decide which; the
tool does not guess by designator prefix.
keepout_groups: {refdes: group} mixed-signal separation tags.
Parts in DIFFERENT groups are pushed apart (the
industrial-engineering "undesirable adjacency" relationship)
-- segregate a noisy switching / digital section from a
sensitive analog / RF one. The group string is opaque (only
equality matters); you (the planner) assign the domains
semantically. construct engine only. Separating the groups
usually also shortens wirelength by de-interleaving them.
match_groups: {refdes: group} matched-pair keep-together tags.
Parts in the SAME group are pulled ADJACENT even when they
share no net -- the absolutely-necessary-adjacency relationship
/ analog common-centroid matching (a differential pair's two
input resistors, a current mirror, a matched array). HPWL only
co-locates parts that share a net; this co-locates matched ones
that don't. construct engine only.
match_roles: {refdes: role} common-centroid sub-device labels
WITHIN a match_group (e.g. A/B for the two matched
halves of a cross-quad or interdigitated array). The optimiser
drives each role's centroid onto a common point so a linear
process/thermal gradient cancels -- it picks the balanced
ABBA/ABAB arrangement that match_groups alone (which only
keeps the cells compact) cannot distinguish from an unbalanced
AABB. Only meaningful with >= 2 roles per group and >= 2 cells
per role; needs match_groups set too. construct only.
plan_json: The DesignPlan (JSON string or dict) you authored. When
given, the placer auto-derives matched-pair match_groups
from differential nets and analog/digital keepout_groups
from the plan's net roles, and MERGES them under the explicit
match_groups / keepout_groups args (explicit wins per
refdes). No-op for a plan with no differential / mixed-signal
structure. What was inferred is echoed in auto_constraints.
reseed_grid: Re-place from a fresh grid instead of refining
current positions (default False).
optimize_rotation: Also choose part orientation to shorten
pin-level wirelength (default True). Set False to keep
every part's current rotation.
engine: "refine" (default, nudge current positions) or
"construct" (from-scratch placement). "construct"
implies a from-scratch re-place regardless of
reseed_grid.
restarts: "construct" engine only. When > 1, run that many
seeded restarts and keep the lowest-objective legal
placement (variance reduction at a cost linear in
restarts). Default 1 (single deterministic run).
render_png: Optional file path. When set, also render a preview
image of the proposed placement (board outline, courtyards,
net stars) to that path and return it as preview_png
(offline, matplotlib). Rendering never breaks the move data;
failures surface as preview_error.
apply: When True, commit the moves to the board. Default
False (dry-run).
Returns:
Dict with:
- dry_run: bool (True unless apply and moves exist)
- engine: the solver core used
- component_count, movable_count, fixed_count
- net_count (nets used after filtering)
- pin_count (pads mapped to components for rotation)
- summary: a one-line plain-language assessment synthesising
legality, utilization, signal routability, decoupling, and the
suggested board size -- read this first to judge the placement
- hpwl_before, hpwl_after, hpwl_improvement_pct
- overlap_pairs_before, overlap_pairs_after
- objective_report: every objective term un-weighted
(hpwl, via, cong, clear, edge,
decap, conn, therm) plus weighted_total,
legal, and utilization for the proposed layout
- net_length_report: longest_nets (the few nets with
the largest physical bounding span in mils -- the routing
risk, and the candidates to mark critical_nets) plus
critical_net_spans echoing the achieved span of each
net you flagged critical, so you can confirm it paid off
- ratsnest: routability / via-pressure indicator from the
straight-line MST of each net. signal_crossings (rails
above signal_fanout_cap pins excluded, since planes carry
no signal via) predicts routing difficulty -- different-net
MST edges that cross need a layer change; total_crossings
is the conservative all-net count
- decoupling_report: the engine's structural decoupling
analysis -- a list of {decap, ic, distance_mils} (worst
first) naming which cap decouples which IC (found on the
connectivity graph, never by reference) and how close it
landed to the served power pin. Empty when no decoupling is
structurally identifiable
- suggested_board: for the construct engine, the board
rectangle it sized and tightened to the placement
({x1, y1, x2, y2, width, height} in mils) -- the "best
PCB size" recommendation. null for the refine engine,
which works inside the existing outline
- moved_count, rotated_count and moves (each
{designator, from: {x, y, rotation}, to: {x, y, rotation}} in mils/degrees; to.rotation is null
when the orientation was unchanged)
- region used, notes from the solver, and
apply_result when apply=True.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | ||
| fixed | No | ||
| engine | No | refine | |
| region | No | ||
| restarts | No | ||
| grid_mils | No | ||
| plan_json | No | ||
| edge_parts | No | ||
| iterations | No | ||
| render_png | No | ||
| designators | No | ||
| match_roles | No | ||
| reseed_grid | No | ||
| exclude_nets | No | ||
| match_groups | No | ||
| critical_nets | No | ||
| clearance_mils | No | ||
| keepout_groups | No | ||
| max_net_fanout | No | ||
| critical_weight | No | ||
| optimize_rotation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description bears the full burden and does so: it discloses the dry-run default, that the solver is pure-Python and reads the compiled netlist plus real footprint bounding boxes, that same-layer overlaps are avoided while opposite-layer parts may share an X/Y footprint, that rendering failures surface as preview_error rather than breaking move data, and that the tool never infers intent from designator prefixes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical facts are front-loaded: dry-run default, what the solver does, engine choices, and a Workflow sentence appear before the long Args block. The description is very long, and the exhaustive Returns enumeration duplicates the output schema, which costs some concision, but each section remains scannable and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter, two-engine, dry-run-by-default placement solver, the description covers inputs, engine choice, constraint semantics, output reading order (summary first), and commit path — everything an agent needs to invoke it correctly. The return-value detail is redundant against the output schema but not harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 21 parameters, so the description must carry everything and does — each arg gets purpose, units, defaults, valid values and behavioural implications (e.g. iterations vs runtime, max_net_fanout to drop power planes, critical_weight clamped to [1,20], match_roles only meaningful with >=2 roles and requiring match_groups, plan_json merged under explicit groups with explicit winning per refdes).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource (connectivity-driven auto-placement to shorten wirelength while keeping components legal) and immediately flags the dry-run default. It is clearly distinguishable from neighbours like pcb_autoplace, pcb_move_components and pcb_replicate_layout, and even names the sibling used for committing moves (pcb.batch_move_components).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit workflow (call with apply=False, read hpwl_improvement_pct and overlap_pairs_after, inspect moves, then call apply=True) and spells out when to pick each engine core (refine for tidying a placed board, construct for unplaced/scrambled boards). It also states when reseed_grid should and should not be used, so no alternative 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_remove_layerA
Remove a copper layer from the PCB layer stack.
Calls IPCB_LayerStack.RemoveFromStack on the requested layer. Does nothing if the layer is not currently in the stack.
Args: layer: Layer name, e.g. "MidLayer1", "InternalPlane2"
Returns: Dictionary confirming the layer was removed.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose the underlying API call and the idempotent no-op behavior when the layer is absent. It omits critical details for a destructive stack edit: whether objects on the removed layer are deleted or orphaned, whether the change is undoable, and whether a minimum stack depth is enforced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines with the core action front-loaded, followed by implementation detail and the no-op edge case. No filler, and the Args/Returns blocks are scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the Returns line is redundant but harmless. For a destructive layer-stack mutation with zero annotations, the definition should say whether copper on the removed layer is lost and whether the operation is reversible; that gap is significant for an agent deciding to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does by giving concrete layer-name examples ('MidLayer1', 'InternalPlane2') that convey the expected string format. It stops short of covering naming variants or validation rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a copper layer from the PCB layer stack') and names the underlying API call, which pins down the operation precisely. It doesn't explicitly contrast with pcb_add_layer or pcb_modify_layer, so sibling differentiation is left to the verb alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Does nothing if the layer is not currently in the stack' line is a precondition/behavior note rather than usage guidance. There is no statement of when to reach for this versus pcb_add_layer, pcb_modify_layer, or pcb_set_layer_visibility, though the destructive verb makes the intent fairly self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_remove_teardropsA
Remove teardrops board-wide.
Opens the same modal Teardrop dialog as pcb_add_teardrops; choose
Remove and confirm it in Altium.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does disclose a key behavioral trait: this is not a silent API call but a modal-dialog operation requiring a Remove selection and confirmation inside Altium, which implies a blocking UI dependency. It does not say what happens on cancel, whether the dialog stays open, or whether the caller can confirm programmatically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action and scope front-loaded, with the interaction caveat second. Every clause adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and there are no parameters, so the description need not cover returns or arguments. The only residual gap is behavioral edge cases around the dialog (cancellation, non-appearance), which the description does not address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No schema burden is left uncovered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Remove') and resource ('teardrops') with an explicit scope qualifier ('board-wide'), which distinguishes it from the add counterpart it names. An agent can tell immediately what this does and how it relates to pcb_add_teardrops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the actual interaction path: the same modal as pcb_add_teardrops opens, the agent must choose Remove, and confirm in Altium. That is actionable context for invocation. It stops short of stating preconditions or what to do if the dialog does not appear, so it is not a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_render_svgA
Render the active PcbDoc to an SVG file (in-house renderer).
SCOPE: a VISUAL artifact for when an image is genuinely needed
(placement / silkscreen / spacing review, sharing a picture).
It is NOT an input to a design review's electrical findings.
NEVER judge connectivity, net assignment, or clearance from this
render -- read those from the board data (pcb_get_nets,
pcb_get_unrouted_nets, pcb_get_clearance_violations,
pcb_run_drc, proj_compare_sch_pcb). The render shows
geometry; the netlist shows connection.
Pulls the board outline, every track, arc, pad, via, and text
primitive from the active PCB via the bridge, then emits a
per-layer SVG. Layers are grouped in render order (KeepOut at
bottom, then bottom copper, top copper, overlays, outline on
top, drills last) and every track / arc / pad / via group
carries data-net, data-layer, data-shape so a
downstream dashboard or LLM tool can cross-probe or net-
highlight without re-parsing.
v1 surface: board outline + tracks + arcs + pads (round / rect / octagonal / rounded-rect) + vias + texts on overlays. Regions (polygon fills / copper pours) and component-body silkscreen outlines are deferred to v1.1.
Args:
output_path: Where to write the SVG. Defaults to the
transient <workspace>/renders/ dir (kept out of the
workspace root so renders don't pile up in your folder).
layers: Restrict to these Altium layer names (e.g.
["TopLayer", "TopOverlay", "KeepOutLayer"]). When
None (default) every known layer is rendered.
MultiLayer (vias) and the outline are always drawn.
margin_mils: Padding around the board bbox in mils.
flip_y: When True (default) flip Y so the SVG reads in
Altium's bottom-left-origin space.
show_drills: Punch hole circles through pads / vias.
show_texts: Render text primitives on overlay layers.
show_designators: Draw component designators on the overlay.
interactive_legend: Emit a clickable per-layer legend group
in the SVG (for the dashboard / cross-probe consumers).
background: Board-background fill (defaults to a slate
review colour; pass "none" for transparent).
Returns:
Dict with ok, svg_path, counts (per primitive
kind), bbox (in mils), bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| flip_y | No | ||
| layers | No | ||
| background | No | #1f2937 | |
| show_texts | No | ||
| margin_mils | No | ||
| output_path | No | ||
| show_drills | No | ||
| show_designators | No | ||
| interactive_legend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the in-house renderer, layer grouping and render order, per-primitive data attributes, v1 scope limitations, and the critical constraint that connectivity and clearance must not be judged from the render.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but justified by the tool's complexity and nine parameters. It is front-loaded with purpose and scope, then structured into clear sections for behavior, limitations, args, and returns, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although output schema exists, the description still clarifies return fields briefly and gives enough context for correct invocation. It covers scope, limitations, parameter effects, renderer behavior, and v1 omissions, leaving no significant ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all nine parameters. It does so thoroughly, explaining output_path defaults, layers filtering behavior, margin_mils units, flip_y semantics, drill/text/designator toggles, interactive legend purpose, and background color including transparent behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Render the active PcbDoc to an SVG file.' It also immediately distinguishes the output as a visual artifact, making clear what the tool is and is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines when to use it: placement, silkscreen, spacing review, or sharing a picture. It also names when NOT to use it and points to concrete alternatives such as pcb_get_nets, pcb_get_unrouted_nets, pcb_get_clearance_violations, pcb_run_drc, and proj_compare_sch_pcb for electrical findings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_renumber_padsA
Renumber the current PcbLib footprint's pads in spatial order.
The non-interactive form of the community RenumberPads tool: instead of clicking each pad in order, the footprint's pads are sorted by position and assigned sequential designators. Rows/columns are banded by a small tolerance so a grid numbers cleanly. Operates on the active PCB library's current footprint.
Args:
order: lr_tb (default) numbers rows top-to-bottom,
left-to-right within a row; tb_lr numbers columns
left-to-right, top-to-bottom within a column.
start: First designator number (default 1).
increment: Step between successive pads (default 1).
prefix: Optional string prefixed to each number (e.g. A ->
A1, A2).
Returns: {"renumbered", "order", "mapping": [{old, new}, ...]} or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | lr_tb | |
| start | No | ||
| prefix | No | ||
| increment | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the spatial sorting algorithm, tolerance banding, target footprint, and return mapping, but it does not explicitly state that existing designators are overwritten, whether the operation is reversible, or any permission/undo considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and then cleanly separates Args and Returns. It is slightly verbose around the community-tool comparison, but no sentence is confusing or wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations and an output schema, the description covers target scope, algorithm, parameter meanings, and return shape. It is nearly complete, though explicit mutation side effects and usage exclusions would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by documenting all four parameters. It explains order values lr_tb and tb_lr, default and meaning of start, increment semantics, and a concrete prefix example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: renumber pads in the current PcbLib footprint in spatial order. It clearly explains the spatial sorting behavior, but does not explicitly distinguish this tool from related sibling tools such as lib_fix_designators or sch_increment_designators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implied usage by explaining it is the non-interactive equivalent of the community RenumberPads tool and operates on the active PCB library's current footprint. However, it does not state when-not to use it or name alternative tools for related designator workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_replicate_layoutA
Replicate a routed channel's ROUTING onto a matching channel.
Where pcb_copy_component_placement only relocates components,
this copies the source group's routing -- tracks, arcs, vias,
polygons, regions, fills -- onto the destination group and remaps
each copy's net from the source net to the corresponding
destination net. The classic multi-channel "lay out channel 1,
replicate to channels 2..N" workflow, end to end.
Positioning: one rigid transform is derived from the FIRST mapping
pair (the anchor) -- the copied routing is rotated by
dstRot - srcRot about the source anchor, then translated by
dstAnchor - srcAnchor, so it lands on the destination
components where they already sit. The destination components are
left in place unless move_components=True.
Which routing is copied (naming-agnostic): routing on nets
INTERNAL to the source group -- every component pad on the net
belongs to a mapped source component. Nets that escape the group
(a shared GND / power pour) are deliberately left alone. Pass an
explicit nets list to override and copy exactly those.
Preconditions: the destination components must already be placed
congruently with the source (e.g. run
pcb_copy_component_placement first, or pass
move_components=True). congruence_warnings in the result
counts destination parts that do not match the anchor transform --
their routing may not line up.
Args:
mapping: {source_designator: dest_designator}. The first
pair is the transform anchor; include every component in
the channel so its internal nets are recognised.
nets: Optional explicit source net names to copy, instead of
the internal-net auto-detection.
move_components: Also relocate the destination components onto
the rigid transform, guaranteeing the routing aligns.
Default False (destination stays where it is).
Returns:
Dict with:
- copied: routing primitives replicated
- net_assigned: copies given a destination net
- internal_nets: source nets selected for copying
- shared_nets_skipped: group nets left alone (escape the
group)
- congruence_warnings: destination parts off the anchor
transform (routing may not align)
- notes: any caveats
| Name | Required | Description | Default |
|---|---|---|---|
| nets | No | ||
| mapping | Yes | ||
| move_components | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the rigid-transform derivation from the first mapping pair, which primitives are copied (tracks, arcs, vias, polygons, regions, fills), that nets escaping the group are deliberately skipped, and that congruence_warnings flags misaligned destination parts. It stops short of saying what happens to pre-existing routing at the destination (overwrite vs. coexist) and whether permissions or locked objects block the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The prose sections are front-loaded with the contrast against the sibling and the transform model, and the whole thing is well-organized. The Args block, however, largely restates points already made in the prose (anchor pair, nets override, move_components default), which is duplicated content in a fairly long definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still adds value by interpreting the fields that matter operationally (congruence_warnings means routing may not line up, shared_nets_skipped means group-escaping nets were left alone). Combined with the precondition and transform sections, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate, and it does: mapping is explained as source-to-dest designators whose first pair is the transform anchor, nets as an explicit override of internal-net auto-detection, and move_components as an opt-in that guarantees alignment with its default stated. All three parameters gain meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('replicate a routed channel's ROUTING onto a matching channel') and immediately distinguishes itself from the nearest sibling by contrast with pcb_copy_component_placement, which 'only relocates components.' An agent can pick between 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the canonical workflow ('lay out channel 1, replicate to channels 2..N'), states preconditions explicitly (destination parts must be congruent, run pcb_copy_component_placement first or pass move_components=True), and gives an override path with the nets list. When-to-use, prerequisite ordering, and the alternative tool are all spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_repour_polygonsA
Repour every poured polygon on the open PCB, in pour order.
Each polygon is rebuilt through the API, so a changed clearance
or board-edge rule takes effect. Shelved polygons stay shelved.
repoured is true only when at least one polygon was rebuilt
and none failed; each item reports its copper pieces and poured
area before and after, so a repour that changed nothing shows.
Returns:
repoured, counts of polygons, rebuilt,
shelved and failed, and per-polygon items
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does well: it explains that polygons are rebuilt through the API, that shelved polygons are skipped, and that repoured is true only when at least one rebuild succeeded and none failed. It stops short of stating prerequisites (active board, typical runtime, whether a failed rebuild leaves partial state).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then behavior, then result semantics, with zero filler in the prose. The explicit 'Returns' block is partly redundant because an output schema already exists, which costs a bit of efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers action, side effects, skip rules, and success-flag semantics, which is enough to invoke it correctly. A note on preconditions (a board must be open and pours present) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description's discussion of pour order and shelved polygons usefully clarifies scope even though there is nothing to parameterize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Repour every poured polygon on the open PCB") with scope ("in pour order"), so an agent knows exactly what operation runs. It does not name or contrast with close siblings such as pcb_get_polygons or pcb_modify_polygon, leaving that distinction implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause "so a changed clearance or board-edge rule takes effect" implies the use case (re-apply pours after rule changes), but it never states this as a condition or says when not to use it versus pcb_modify_polygon or pcb_get_polygons. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_run_drcA
Run Design Rule Check (DRC) on the active PCB. MODAL --
BLOCKS THE BRIDGE. Opt in with allow_modal=True.
DANGER: Altium has no non-interactive DRC trigger exposed to
DelphiScript. PCB:DesignRuleCheck raises the MODAL "Design
Rule Checker [mil]" setup dialog and the worker sits behind it
until a HUMAN clicks Cancel/OK. Nothing else on the bridge
runs meanwhile: one observed call left the loop dead for 30+
min, the client timed out at 1800 s, and every in-flight job
was stranded. No parameter suppresses the dialog, so this tool
refuses to fire unless the caller passes allow_modal=True,
which is a promise that a human is at the keyboard.
PREFER pcb_get_clearance_violations -- it reads the
violations already stored on the board, runs no DRC, and
cannot block.
PATHOLOGICAL CASE: a full DRC on a placed-but-unrouted board
(many components, zero tracks, everything unrouted) checks
every pad pair against every rule and is enormously slow for
an answer that is already known -- "nothing is routed yet".
Check pcb_get_board_statistics / pcb_get_unrouted_nets
first; if track count is 0, do not run DRC.
With allow_modal=True it executes the DRC and returns up
to 100 violations with full location data, so the agent can
jump straight to the offending spot instead of guessing from
the description.
drc_confirmed is true only when Altium rewrote the .DRC
report during this call. A cancelled dialog leaves the old
report untouched, so its count, 0 included, belongs to an
earlier run. It also stays false when the checker's Create
Report File option is off.
Per-violation shape:
name,description,rule: text from Altiumx_mils/y_mils/layer: violation's bbox centre (the "go here" hint)primitive1/primitive2: objects with{detail, type, net, layer, x_mils, y_mils}.typeis the object kind (Track / Pad / Via / Region / Comp);netis the net name. Two primitives are involved in most rule kinds (Clearance, Short Circuit); a single- primitive violation (e.g. AcuteAngle) leavesprimitive2with empty fields.
Use primitive1.net and primitive2.net to spot the
nets in conflict; use x_mils / y_mils to drive
proj_cross_probe or the dashboard's Drawing tab to the site.
Args: allow_modal: Must be True to actually run DRC, and it means "I accept that the bridge blocks on a modal dialog until a human clicks it". Default False refuses without touching Altium.
Returns:
Dict with violation_count (full count even if > 100),
drc_triggered, and violations array (first 100).
With allow_modal=False: {ok: False, reason: ...}
and no bridge call at all.
| Name | Required | Description | Default |
|---|---|---|---|
| allow_modal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so exceptionally: it discloses that the call blocks the entire bridge on a modal dialog, cites an observed 30+ minute hang and a 1800 s client timeout with stranded jobs, and explains that no parameter can suppress the dialog. It also clarifies the subtle semantics of drc_confirmed (only true if Altium rewrote the .DRC report this call; false when cancelled or when Create Report File is off).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-risk fact ("MODAL -- BLOCKS THE BRIDGE") and organized with named sections and bullets, so the length is largely earned by the danger it prevents. However, the lengthy per-violation field breakdown duplicates what the existing output schema already documents, and the Args/Returns sections restate points made earlier in prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no annotations, the description supplies the safety profile, the alternative route, the pre-flight checks, the failure mode, and the success/cancel semantics of the returned flag. An agent has everything needed to decide whether to call it and how to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter has only a bare title, so the description must compensate — and it does, defining allow_modal as a promise that a human is present and stating that the default False refuses without touching Altium at all. This is far more meaning than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Run Design Rule Check (DRC) on the active PCB") and immediately names the preferred alternative (pcb_get_clearance_violations) and the blocking behavior. An agent can distinguish this from run_drc, design_validate, and pcb_get_clearance_violations 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance ("PREFER pcb_get_clearance_violations -- it reads the violations already stored on the board"), a precondition for use (allow_modal=True means a human is at the keyboard), and a concrete pathological case to check first (track count 0 via pcb_get_board_statistics / pcb_get_unrouted_nets). 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_scaleA
Scale the selected free primitives by a ratio about an anchor.
Each coordinate maps P' = anchor + ratio*(P - anchor) and sizes
scale by ratio. Handles free tracks, arcs, vias, pads, fills and
text. Primitives inside a component, dimension, or polygon are skipped
(as are polygons/regions) -- so this scales free copper and artwork,
not footprints. Grounded in the community PCBScale tool.
Args:
ratio: Scale factor (> 0). 0.95 shrinks 5%, 1.05 grows 5%.
anchor: selection_center (default), board_center, or
origin.
Returns: {"scaled", "skipped", "ratio", "anchor_x", "anchor_y"} or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| ratio | Yes | ||
| anchor | No | selection_center |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it gives the exact transform math, states that sizes scale by the ratio, enumerates which primitive types are handled and which are silently skipped, and notes an error return. It does not say whether the operation is undoable or what happens when nothing is selected or ratio <= 0 beyond 'an error'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and formula, then scope, then args and returns — a sensible order. The Args/Returns block repeats a little of what the structured output schema already covers, but no sentence is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, selection-dependent geometry tool with two parameters, the description covers the transform, scope, exclusions, parameters and error case. Remaining gaps are minor: no statement of selection prerequisite as an explicit requirement, and no undo/persistence note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: ratio is constrained to > 0 with concrete interpretation examples (0.95 shrinks 5%, 1.05 grows 5%), and anchor is enumerated with its three allowed values and the default. This is meaning the bare schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Scale) plus the exact resource (selected free primitives) and scope (about an anchor), and immediately delimits what is NOT affected: components, dimensions, polygons, footprints. An agent can distinguish this from placement/move tools in the sibling list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the precondition (a selection of free primitives must exist) and explicitly carves out the excluded cases, so the agent knows this is not a footprint/resize tool. It falls short of naming an alternative tool for scaling footprint content, but no obvious sibling does that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_board_shapeA
Define the physical PCB board outline as a rectangle.
Overwrites the current board shape. Use this right after creating a new PCB document to establish the board size before placing parts. Coordinates are in mils; (x1,y1) and (x2,y2) are opposite corners in any order.
Args: x1: First corner X in mils y1: First corner Y in mils x2: Opposite corner X in mils y2: Opposite corner Y in mils
Returns: Dictionary confirming the new outline rectangle
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key destructive trait ('Overwrites the current board shape'), plus units (mils) and the fact that corner order is irrelevant. It does not say what happens to existing parts/tracks now outside the new outline, which is the main remaining risk an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the definition and the overwrite warning, then setup context, then parameters. The Args block slightly restates the schema titles but supplies units, so it earns its place; minor redundancy in the Returns line given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return details are optional, and units/ordering/setup timing are all covered. The gap is side effects on geometry and objects outside the new rectangle, which matters for a shape-overwriting mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare titles X1/Y1/X2/Y2), so the description must compensate, and it does: each parameter is identified as a corner coordinate, units are given as mils, and the pairs are stated to be opposite corners in any order. It adds no guidance on coordinate ranges or the board origin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Define the physical PCB board outline') and constrains the shape to a rectangle, which separates it from pcb_auto_size_board_outline and pcb_get_board_outline. An agent can tell exactly what geometry this writes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this right after creating a new PCB document to establish the board size before placing parts" gives a concrete trigger and ordering constraint. It does not name alternatives (e.g. pcb_auto_size_board_outline) or say when not to call it, so it falls 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.
pcb_set_layer_colorA
Recolour one layer.
The colour is given as #RRGGBB. Altium holds it internally as
a byte-reversed TColor, and that conversion happens on the Altium
side so no caller has to know about it.
The write is READ BACK before reporting success, because a refused assignment raises nothing and would otherwise be reported as having worked.
Colour is a display setting rather than a property of the board, so it follows the installation rather than travelling with the file.
Args: layer: Layer name, e.g. "TopOverlay" or "Mechanical13". color: Colour as "#RRGGBB".
Returns:
Dict with layer, color and color_hex.
| Name | Required | Description | Default |
|---|---|---|---|
| color | Yes | ||
| layer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the silent-failure mode (a refused assignment raises nothing), that the write is read back before success is reported, and that colour is installation-scoped rather than saved with the file. That is exactly the kind of beyond-schema behaviour an agent needs. It stops short of stating what happens with an unknown or non-existent layer name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then progressively deeper context, then Args. No filler sentences; even the internal-encoding note earns its place by telling the caller not to pre-swap bytes. The Returns block is mildly redundant against the output schema but does not bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 the description still names the returned keys. Combined with the format, verification and persistence semantics, an agent has enough to call this correctly. The remaining gap is error/validation behaviour for a bad layer name or bad hex string.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the properties carry only bare titles — so the description must compensate, and it does: it gives the layer naming convention with concrete examples ("TopOverlay", "Mechanical13") and specifies the colour format as "#RRGGBB" plus the fact that the TColor byte-reversal is handled server-side. Neither parameter's failure mode (invalid layer, malformed hex) is described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: "Recolour one layer." That is unambiguous and an agent can immediately tell it is a per-layer display mutation. It does not distinguish itself from nearby siblings such as pcb_set_layer_visibility, pcb_modify_layer or pcb_get_layer_display, which keeps it out of 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the note that colour is a display setting rather than a board property tells the agent this is cosmetic, non-geometric configuration, which is useful framing. But there is no explicit when-to-use, when-not-to-use, or named alternative (pcb_modify_layer is the obvious candidate), so the agent must infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_layer_visibilityB
Show or hide a specific PCB layer.
Args: layer: Layer name string, e.g.: Copper: "TopLayer", "BottomLayer", "MidLayer1"-"MidLayer30" Overlay: "TopOverlay", "BottomOverlay" Mask: "TopPaste", "BottomPaste", "TopSolder", "BottomSolder" Plane: "InternalPlane1"-"InternalPlane16" Other: "DrillGuide", "DrillDrawing", "MultiLayer", "KeepOutLayer", "Mechanical1"-"Mechanical16" visible: True to show, False to hide
Returns: Dictionary with layer name and visibility state
| Name | Required | Description | Default |
|---|---|---|---|
| layer | Yes | ||
| visible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden, and it omits key traits: whether the change is session-only or persisted to the file, whether it affects plots/exports/DRC, and what happens on an invalid layer name. It does at least disclose the return shape (layer name plus visibility state), which is the one behavioral detail provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a single sentence, followed by Args and Returns blocks. The layer-name list is long but every entry is actionable given the missing schema enum; only minor trimming is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema, the parameter documentation is complete, but with zero annotation coverage the description leaves persistence scope and error/failure behavior unspecified. Adequate to call correctly, not complete for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema has no enums, yet the description enumerates the accepted layer names by category (copper, overlay, mask, plane, mechanical, keep-out, drill) and explains that visible=True shows and False hides. This adds substantial meaning the schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Show or hide a specific PCB layer" names a concrete verb pair and a concrete resource, so the agent knows exactly what state changes. It does not explicitly distinguish itself from nearby siblings such as pcb_set_layer_color or pcb_get_layer_display, but the visibility focus is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus pcb_set_layer_color, pcb_get_layer_display, or pcb_set_text_visibility, and no prerequisites such as needing an open PCB document. Usage is only inferable from the purpose line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_mech_layer_kindA
Set what a mechanical layer is FOR, not what it is called.
Renaming a layer "Courtyard Top" does not make it one. The KIND is a separate property, and it is what every feature resolving a layer by purpose reads: courtyard checking, assembly drawings, 3D body placement and the IPC-4761 via treatments. A layer with no kind is skipped by all of them, so the outlines get drawn and nothing uses them.
A SINGLE kind such as "Fab Notes" belongs to ONE layer at a time.
If another layer already holds it, that layer is cleared first and
named in cleared_from, because leaving two layers claiming one
purpose is a state the stack manager does not intend.
A PAIRED kind, meaning any name ending in Top or Bottom, works
differently: it is held by the layer PAIR rather than by either
layer, under a separate set of names with the side dropped. So
"Courtyard Top" is stored as the pair kind "Courtyard" across the
two layers, and partner_layer is required to say which layer
carries the other side. Writing it without a partner is refused
rather than silently doing nothing.
The write is READ BACK before reporting success. A refused assignment raises nothing here, so trusting it would report success for having changed nothing.
Args:
layer: Mechanical layer, e.g. "Mechanical13".
kind: A kind name such as "Courtyard Top", "Assembly Top",
"3D Body Top", "Component Outline Top", "Fab Notes" or
"Not Set". A bare number is also accepted, so a kind added
by a later Altium release can be set without waiting for
the name map to catch up. Read the current assignment with
pcb_get_mech_layer_names.
partner_layer: The mechanical layer carrying the other side,
required when kind ends in Top or Bottom and ignored
otherwise. The two layers are joined as a pair, which is
what the kind is then written to.
Returns:
Dict with layer, kind, kind_id, paired,
pair_kind, partner_layer and cleared_from.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| layer | Yes | ||
| partner_layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses that a conflicting single kind is cleared from another layer and reported via cleared_from, that a paired write without a partner is refused, that the value is read back before success is reported, and that refusals do not raise. Those are exactly the side effects and failure modes an agent must anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key distinction is front-loaded in the first line and the paragraphs are ordered by importance (purpose, single vs paired semantics, read-back). It runs long and a few sentences are rhetorical rather than informational, but no paragraph could be dropped without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with real side effects, no annotations and an untyped schema, the description supplies the permissions-free but state-mutating consequences, the pairing rule, and the verification step. An output schema exists, yet the description still names the return keys, so an agent knows cleared_from and paired will be reported back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents layer with an example, enumerates accepted kind names plus the 'Not Set' case, explains that a bare number is allowed for forward compatibility, and states partner_layer is required only for Top/Bottom kinds and ignored otherwise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and a specific property: setting what a mechanical layer is FOR (its kind), not its name. It explicitly separates KIND from name, which is the exact distinction an agent needs to pick this over the rename siblings such as pcb_set_mech_layers or lib_set_mech_layers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete conditions: single kinds are exclusive and steal from other layers, Top/Bottom kinds require partner_layer and are refused without one, and current assignments should be read with pcb_get_mech_layer_names first. What is missing is an explicit statement of when NOT to use this tool, e.g. versus the name-setting siblings that appear alongside it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_mech_layersA
Name, enable and kind the mechanical layers of the open BOARD.
The board counterpart of lib_set_mech_layers, which takes a
library by path and refuses a PcbDoc. Without this a board could
only have kinds set, one layer per call through
pcb_set_mech_layer_kind, and could not be renamed at all
above Mechanical16.
Every change is READ BACK. A layer whose name, enable or kind did not take is reported against that layer rather than folded into an overall pass.
PAIRED KINDS. Any kind ending in Top or Bottom is held by the layer PAIR rather than by either layer, under a shorter name with the side dropped, so "Courtyard Top" is stored as the pair kind "Courtyard". Give both sides in the same call and the two are joined and the pair given the kind. Single kinds such as "Fab Notes" need no partner.
READ THE BOARD FIRST. pcb_get_mech_layer_names reports
primitive_count per layer, and a kind moved off a layer that
is carrying geometry orphans that geometry from whatever resolves
the layer by purpose.
Args:
layers: One dict per layer. Keys: layer (required, e.g.
"Mechanical13"), and any of name, enabled
(bool), kind (e.g. "Courtyard Top"). A layer with
none of the three is reported as nothing asked for.
tidy_pairs: Remove layer pairs no kind justifies. Off by
default, because it REMOVES pairs.
timeout: Seconds.
Returns:
Dict with document, layers (each: layer, changed,
problem), changed, failed, kinds_displaced,
pairs_removed, pairs_tidied and pairs_scanned_to.
| Name | Required | Description | Default |
|---|---|---|---|
| layers | Yes | ||
| timeout | No | ||
| tidy_pairs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses per-layer read-back verification with per-layer failure reporting rather than an aggregate pass, the paired-kind storage model (side dropped, pair held jointly), the requirement to supply both sides in one call, and the orphaning hazard when a kind moves off a layer carrying geometry. This is precisely the context an agent cannot get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded verb statement followed by labeled sections (PAIRED KINDS, READ THE BOARD FIRST, Args, Returns) make it scannable despite its length. Minor deduction: the sentence contrasting what a board 'could only have' without this tool is rationale the caller does not need, and the Returns block partly duplicates the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and a 0%-documented schema, the description covers preconditions, per-parameter semantics, failure semantics, destructive-option warning, and the domain trap (paired kinds / orphaned geometry). An output schema exists, so describing return keys is a convenience rather than a gap-filler.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and layers is an untyped object array, so the description must compensate entirely — and it does: it enumerates the allowed keys (layer required, e.g. 'Mechanical13'; name; enabled bool; kind e.g. 'Courtyard Top'), defines the empty-dict case ('reported as nothing asked for'), and explains tidy_pairs' destructive default and units for timeout.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb triple plus resource and scope: 'Name, enable and kind the mechanical layers of the open BOARD.' It immediately names the two siblings it must be distinguished from (lib_set_mech_layers, pcb_set_mech_layer_kind) and states exactly what those cannot do, so the agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use versus named alternatives, plus a stated prerequisite workflow ('READ THE BOARD FIRST' with pcb_get_mech_layer_names) and a clear when-not/why-not for tidy_pairs ('Off by default, because it REMOVES pairs'). Nothing about selection 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_set_plane_netA
Tie an internal plane layer to a net.
An Altium internal plane is a NEGATIVE layer: the copper is
everywhere except where the plane is cleared, and the net lives on
the LAYER, not on a poured object. Pouring a polygon on a plane
layer is a different thing and does not connect the plane, so this
is the tool for "make Internal Plane 1 the PGND plane" --
pcb_place_polygon_rect is not.
The net must already exist on the board (see pcb_get_nets).
The layer must be an internal plane; a signal layer is refused
with NOT_A_PLANE. Layer names are resolved against the real
stack, so both "Internal Plane 1" (as pcb_get_layer_stackup
prints it) and "InternalPlane1" work, and a name this board does
not have is refused with UNKNOWN_LAYER rather than silently
retargeting another layer.
The net is written to the board's InternalPlaneNetName for that
layer and READ BACK before reporting; if that does not take, the
layer object's own net is tried and read back too. When neither
reads back the net the call answers success: false with
applied: false and a note, and the board is NOT marked changed.
Args: layer: Internal plane layer, e.g. "InternalPlane1" or the name the stackup reports for it net: Existing net name to tie the plane to, e.g. "PGND"
Returns: Dictionary with "success", "layer" (the RESOLVED layer), "layer_name", "net", "net_readback", "applied", "route" (which write took) and "note".
| Name | Required | Description | Default |
|---|---|---|---|
| net | Yes | ||
| layer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so thoroughly: it discloses the write route, the read-back verification, the fallback path, and the failure contract ('success: false', 'applied: false', board NOT marked changed). Error codes NOT_A_PLANE and UNKNOWN_LAYER and the no-silent-retarget guarantee are exactly the behavioral context an agent needs for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, and the structure moves logically from semantics to prerequisites to write/failure behavior. It is somewhat verbose with the negative-layer exposition and parenthetical asides, though each element is genuinely useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param mutation with no annotations, everything an agent needs is present: prerequisites, error cases, name-resolution rules, write/failure semantics, and return keys. An output schema already exists, so the explicit Returns section is slightly redundant but not harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (both params are bare), so the description must compensate and does: it explains layer name resolution ('Internal Plane 1' as printed by pcb_get_layer_stackup and 'InternalPlane1' both work, unknown names refused), and constrains net to an existing board net. This adds meaning well beyond the empty schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('tie an internal plane layer to a net') and immediately qualifies what a plane layer is. Crucially, it names the sibling it is NOT (pcb_place_polygon_rect) and explains why, so an agent can disambiguate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('make Internal Plane 1 the PGND plane'), when-not (pouring a polygon on a plane layer), and prerequisites (the net must already exist, see pcb_get_nets; the layer must be an internal plane or NOT_A_PLANE). Alternatives and conditions are fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_rule_propertiesA
Update metadata AND constraint values of a named PCB design rule.
Metadata fields always apply. Constraint fields are dispatched by the rule's underlying RuleKind:
Clearance (kind 0), ComponentClearance (kind 24), HoleToHoleClearance (kind 52) and BoardOutlineClearance (kind 63):
gap_mils, orgap_mmwhen the value is metric. An integer mil field cannot express 0.2mm; it lands on 8 mils, which is 0.2032mm. Pass one or the other.Width (kind 2):
min_width_mils/max_width_mils/favored_width_mils(applied to every layer).HoleSize (kind 42):
min_hole_size_mils/max_hole_size_mils.Routing Via:
min_via_size_mils/max_via_size_mils/preferred_via_size_milsand the three*_via_hole_mils. Checked as a set first (minimum <= preferred <= maximum, every diameter larger than its hole) and each read back; the reply carriesvia_sizes_milsandvia_sizes_written. A rule in template mode keeps checking its templates, andvia_notesays so; this cannot switch a rule between modes.
THE GAP WRITE IS READ BACK, not assumed. A rule kind that does
not really carry Gap can accept the assignment and keep its old
value, so the reply carries gap_written, gap_after_mm
and, when it did not take, a note saying the rule still holds
the old number. Kind 63 in particular is included on the
strength of its position in the TRuleKind order rather than a
documented interface, so let gap_written decide whether it
worked rather than the count.
Pass only the parameters you want to change; everything else
stays untouched. Each VERIFIED field write increments
properties_updated in the response, so a refused constraint
no longer inflates it.
NOTE: Priority is NOT writable from this tool. IPCB_Rule.Priority
is a read-only function in the PCB scripting API
(Function Priority : TRulePrecedence), not a property; there
is no SetState_Priority or SetPriority method either.
Assigning to it crashes the DelphiScript engine. To reorder rule
priorities, drag them in Altium's UI (PCB > Rules and Constraints
Editor; rules earlier in a category have higher priority).
Args:
name: Rule name to update.
enabled: Whether DRC enforces the rule.
scope1 / scope2: Rule scope query expressions. A comparison
joined by And/Or/Xor/Not must be bracketed
("IsPad And (HoleSize > 3)") or joined with &&;
an unbracketed one is refused before anything is sent.
comment: Free-form comment.
gap_mils: Clearance gap. Applies to Clearance,
ComponentClearance, and HoleToHoleClearance rules.
min_width_mils / max_width_mils / favored_width_mils:
Width constraint values (applied to every layer).
min_hole_size_mils / max_hole_size_mils: HoleSize
constraint limits.
Returns: Dict with name, rule_kind, and properties_updated count.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| gap_mm | No | ||
| scope1 | No | ||
| scope2 | No | ||
| comment | No | ||
| enabled | No | ||
| gap_mils | No | ||
| max_width_mils | No | ||
| min_width_mils | No | ||
| max_via_hole_mils | No | ||
| max_via_size_mils | No | ||
| min_via_hole_mils | No | ||
| min_via_size_mils | No | ||
| favored_width_mils | No | ||
| max_hole_size_mils | No | ||
| min_hole_size_mils | No | ||
| preferred_via_hole_mils | No | ||
| preferred_via_size_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description carries the full burden and does so unusually well: it discloses that writes are read back rather than assumed, that a non-Gap rule kind can silently retain its old gap, that Kind 63 is included on inference rather than a documented interface, and that properties_updated only counts verified writes. It also warns that assigning Priority crashes the DelphiScript engine, a concrete crash condition that is otherwise invisible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and the body is organized by RuleKind, which matches how an agent must reason about the 18 parameters. It is long and occasionally repeats itself (the gap read-back caveat is stated twice), but nearly every sentence carries non-obvious operational detail rather than restating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation tool with no annotations and no schema descriptions, this is close to complete: it covers kind dispatch, unit traps, verification behavior, and the priority landmine. The one shortfall is the 'Returns' block, which lists only name, rule_kind, and properties_updated while the body additionally promises gap_written, gap_after_mm, via_sizes_mils, via_sizes_written, and via_note — an inconsistency the output schema may resolve but the description does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains unit semantics, the gap_mils/gap_mm exclusivity and the precision trap (an integer mil field lands on 8 mils for a requested 0.2mm), the via-size set validation ordering (min <= preferred <= max, diameter > hole), and the bracket/&& requirement for scope query expressions. The only gap is gap_mm not appearing in the formal Args list despite being discussed in the body.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Update metadata AND constraint values of a named PCB design rule,' which immediately distinguishes it from read-side siblings like pcb_get_rule_properties and pcb_create_design_rule. It does not explicitly name or route away from pcb_set_rules_enabled, which also toggles a rule's enabled state, so the sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operating contract — 'Pass only the parameters you want to change; everything else stays untouched' — plus a per-RuleKind table of which constraint fields apply to which rule kind, which is exactly the guidance an agent needs. It also routes the priority use case away from this tool to the Altium UI, though it never states when to use this tool versus pcb_set_rules_enabled or pcb_create_design_rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_rules_enabledA
Bulk-toggle the DRC-enabled flag on design rules by name.
Useful for focused review passes: disable a noisy class of rules
to surface the violations that matter (e.g. silence Silk-to-Silk
while you sweep Clearance), or re-enable a set before a release
sweep. Matches case-insensitively; supports trailing-* wildcards
so a rule family can be targeted without listing every name
("DiffPair_*" hits every rule whose name starts with that).
Note that this flips DRCEnabled (whether DRC actually checks the rule),
not Enabled (whether the rule exists in the rule list); the
former is the right knob for review iteration.
Args:
names: Rule names to toggle. With match="name" (default)
each entry is matched case-insensitively against
Rule.Name; a trailing * wildcards the suffix
("Clearance*"). With match="kind" each entry is
a TRuleKind ordinal as a string (look up via
pcb_get_design_rules).
enabled: New value for DRCEnabled. True turns the rule
ON in DRC; False disables it for this run.
match: "name" (default) or "kind".
Returns:
Dict with:
- matched: rules that matched any pattern
- updated: how many actually changed value
- enabled: the requested target value (for confirmation)
- items: per-matched {name, kind, prev_enabled, new_enabled}
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | name | |
| names | Yes | ||
| enabled | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it states what flag is changed, clarifies the DRCEnabled versus Enabled distinction, explains case-insensitive and wildcard matching, and describes the return dictionary. It does not discuss permissions, persistence, or undo behavior, which are relevant for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured and front-loaded with the core purpose, followed by usage rationale, caveat, args, and returns. It is somewhat long but every section is relevant; minor examples and return details add useful context rather than fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with no annotations, three parameters, zero schema description coverage, and an output schema, the description is nearly complete. It covers purpose, usage, parameters, return values, and a key behavioral caveat. It could mention authorization or persistence but is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does thoroughly. The Args section documents each parameter: names matching with wildcard and match-mode behavior, enabled as the target DRCEnabled value, and match accepting 'name' or 'kind' with defaults and lookup guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Bulk-toggle the DRC-enabled flag on design rules by name.' It clearly distinguishes this operation from related rule management by explaining that it flips DRCEnabled rather than Enabled. This lets an agent identify the tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Useful for focused review passes...' with examples like silencing Silk-to-Silk or re-enabling rules before a release sweep. However, it does not explicitly name when not to use this tool or point to a specific sibling alternative such as pcb_set_rule_properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_text_styleA
Set the height and stroke width of component designators or comments.
Silkscreen text size is usually a fabrication requirement (for
example 0.8 mm high with a 0.1 mm stroke: height_mils=31.5, stroke_mils=3.94). Altium's stroke text has a height and a
stroke width and no separate character width: the characters
scale with the height.
For free texts use obj_modify on eTextObject with
Height and StrokeWidth (filter IsDesignator=false).
Args:
height_mils: Text height in mils. None leaves it.
stroke_mils: Stroke width in mils. None leaves it.
designators: Only these components (e.g. ["U1", "R5"]).
None applies to every component.
which: "designator" (default), "comment" or "both".
At least one of height_mils / stroke_mils must be given.
Returns:
Dict with matched components, changed and failed
texts, not_found designators, and texts: each one's
height and stroke as read back after the write. success
is false when any text did not take or a designator was not
found.
| Name | Required | Description | Default |
|---|---|---|---|
| which | No | designator | |
| designators | No | ||
| height_mils | No | ||
| stroke_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does well: it discloses the validation constraint (at least one of height/stroke required), that None leaves values untouched, that scope defaults to every component, and that results are read back after write with success=false on failures. It does not mention permission/auth needs or reversibility of the write, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, followed by the domain rationale and the mils conversion example, then Args and Returns. The length is justified by the 4 undocumented parameters, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 needn't detail return values, yet it usefully clarifies that success is false when a text did not take or a designator is missing. Covers purpose, alternatives, constraints and failure semantics; only the absence of any note on permissions or undo prevents a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all semantics, and it does: height_mils/stroke_mils units and None-means-leave-it behavior, designators as a component filter with None meaning all, and which accepting designator/comment/both with the default noted. It also adds the cross-parameter constraint that at least one dimension must be supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: setting height and stroke width of component designators or comments. It also scopes the behavior (characters scale with height, no separate width) and distinguishes itself from obj_modify for free texts, so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes free texts to obj_modify on eTextObject with the filter IsDesignator=false, and frames the use case as a fabrication requirement with a concrete mils example. Lacks guidance on when not to restyle text at all, but the alternative path is named with its selecting condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_text_visibilityA
Bulk-toggle component designator and / or comment visibility.
For the common workflows:
Hide all designators before generating an assembly PDF.
Show comments during a value-review pass.
Hide just the noisy 0402 designators while keeping IC labels.
Args:
designators: If True/False, set Component.NameOn for
matched components. None leaves designator visibility
alone.
comments: If True/False, set Component.CommentOn. None
leaves comment visibility alone.
filter: Restrict to these designator names (e.g. ["U1", "U2", "C5"]). None applies to every component.
Match is case-sensitive whole-string.
At least one of designators / comments must be supplied.
Returns:
Dict with:
- matched: components inspected (after filter)
- updated_names: components whose NameOn flipped
- updated_comments: components whose CommentOn flipped
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| comments | No | ||
| designators | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it explains that True/False set Component.NameOn and Component.CommentOn, None leaves fields unchanged, at least one field must be supplied, and filter matching is case-sensitive whole-string. It also documents the return structure, though it does not discuss document/selection prerequisites or undo behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then organized into workflows, Args, and Returns. The detail is justified by the total lack of schema parameter descriptions, and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter PCB mutation tool with no annotations and an output schema, the description covers purpose, usage scenarios, all parameter semantics, the key constraint that at least one visibility field must be supplied, and the returned fields. It is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: designators and comments are explained as tri-state booleans, and filter is documented as a case-sensitive whole-string name list with None meaning all components.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: bulk-toggle component designator and comment visibility. It clearly distinguishes this tool from nearby PCB utilities such as text styling or layer visibility by focusing on component designator/comment fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage contexts: hiding designators for assembly PDFs, showing comments during value review, and hiding noisy 0402 designators. It does not explicitly name alternative tools or when not to use this one, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_track_widthA
Modify track width for all tracks on a specific net.
Changes the width of every routed track segment assigned to the given net. Useful for adjusting power or signal trace widths.
Args: net_name: Name of the net whose tracks to modify (e.g., "VCC") width_mils: New track width in mils (e.g., 10, 20, 50)
Returns: Dictionary with net_name, width_mils, and tracks_modified count
| Name | Required | Description | Default |
|---|---|---|---|
| net_name | Yes | ||
| width_mils | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the whole burden. It does disclose the important behavioral trait that the operation is bulk ('every routed track segment'), which is more than the name conveys, but it omits mutability/reversibility (undo), whether locked tracks are affected, and what happens if the net has no tracks or does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by a scope clarification, then Args/Returns in a predictable structure. Sentence two partially restates sentence one, and the Returns block duplicates the existing output schema, but neither is costly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter setter with an output schema, the description covers purpose, scope, both arguments, and return shape. What remains missing is the risk/safety layer that unstructured annotations would normally provide — undo behavior, failure modes, and interaction with design rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: net_name is explained with an example ('VCC') and width_mils is given with units and example values (10, 20, 50). It stops short of stating valid ranges or manufacturing minimums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource with explicit scope: 'Modify track width for all tracks on a specific net', reinforced by 'every routed track segment assigned to the given net'. An agent immediately knows what is changed. It does not, however, contrast itself with adjacent siblings such as pcb_place_tracks, pcb_trim_extend_track, or audit_find_inconsistent_track_widths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for adjusting power or signal trace widths' implies a usage context, but there is no explicit when-to-use / when-not, no preconditions (board open, net routed), and no pointer to alternatives like pcb_calc_trace_width_for_current for deciding the value. Usage guidance is implied only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_set_via_soldermask_reliefA
Open the solder mask round each via's barrel, measured from the hole edge, on both sides.
Every via, or those on net, gets its mask expansion set as a
manual value with "from hole edge" on, so the opening is the hole
plus expansion_mils all round. Both sides are written: a via
stores a bottom value even while its sides are linked, and that
value takes effect if they are ever unlinked. Each via is read
back, and vias_verified counts those holding the value.
WRITTEN THROUGH THE VIA'S PAD CACHE. Assigning the expansion straight onto a via crashes Altium's scripting engine (an access violation in ScriptingSystem.DLL, measured on AD 26.10); the same value written into the cache a via shares with pads takes and reads back, so the handler only ever uses that route.
A Solder Mask Expansion rule scoped IsVia is the alternative
that also covers vias placed later:
pcb_create_design_rule(rule_type="solder_mask_expansion", scope="IsVia", value=<mils>).
Args: expansion_mils: Mask expansion from the hole edge, in mils. Default 4. net: Only vias on this net. Empty means every via.
Returns:
vias_matched, vias_verified, expansion_mils,
net, from_hole_edge.
| Name | Required | Description | Default |
|---|---|---|---|
| net | No | ||
| expansion_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that this is a mutation, that both sides are written, that a bottom value is stored even while sides are linked and can take effect later on unlink, that each via is read back for verification, and the pad-cache write requirement (direct assignment crashes AD 26.10). That is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a structured Args/Returns section. The crash narrative is a justification rather than waste, but the capitalised header and the ScriptingSystem.DLL detail run longer than strictly necessary for an agent already told which write route to use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations, the description covers safety implications, mechanism, verification, return fields (vias_matched, vias_verified, expansion_mils, net, from_hole_edge) and the alternative approach. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: ``expansion_mils`` is defined as mask expansion measured from the hole edge with default 4, and ``net`` as a filter where empty means every via. The semantics of 'from hole edge' (opening = hole + expansion all round) are also stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: opening the solder mask round each via's barrel from the hole edge on both sides. It is unmistakably distinct from siblings like pcb_create_design_rule or pcb_normalize_vias, and even calls out the design-rule sibling as the alternative route.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes the operation ('Every via, or those on ``net``') and names the alternative approach with its comparative advantage: a Solder Mask Expansion rule scoped ``IsVia`` also covers vias placed later, with the exact call signature given. That is real when-to-use guidance, not an implied hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_snap_to_gridA
Snap a component to the nearest grid point.
Rounds the component's X and Y position to the nearest multiple of the specified grid size.
Args: designator: Component reference designator (e.g., "U1", "R5") grid_size: Grid spacing in mils (default 50)
Returns: Dictionary with designator, old and new positions, and grid_size
| Name | Required | Description | Default |
|---|---|---|---|
| grid_size | No | ||
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the exact transformation performed (position rounded to a multiple of grid_size), which is genuinely useful behavioral detail, but it says nothing about the mutation's side effects: whether it requires write access to an active board, whether it can be undone, or whether it affects other objects or the component's locked state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then a precise sentence on the rounding behavior, then structured Args. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small two-parameter mutation tool this covers purpose, both parameters, and the return shape (redundant given the output schema, but harmless). What is missing is context about the required editing state or document, which matters because there are no annotations to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: designator is defined as a component reference designator with examples ("U1", "R5"), and grid_size is given a unit (mils) plus its default (50). Only minor gaps remain, such as whether grid_size must be positive or whether values must align with the document grid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+effect: "Snap a component to the nearest grid point" and clarifies it rounds X and Y to the nearest multiple of the grid size. That is unambiguous, but it never distinguishes itself from neighboring tools that also move components (pcb_align_components, pcb_move_components, obj_set_grid).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance and no prerequisites (e.g. an active PCB document or a selected component). An agent must infer the trigger from the name alone and gets no help choosing between this and pcb_align_components or pcb_move_components.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_start_polygon_placementA
Start INTERACTIVE polygon pour placement on the active PCB.
This is an interactive command, it launches Altium's polygon placement mode. The user must then draw the polygon boundary interactively in Altium Designer (clicks define vertices, right-click or Escape completes). It does NOT create a polygon programmatically from coordinates.
Args: layer: Target copper layer (default "TopLayer") net_name: Net to assign to the polygon pour (optional)
Returns: Dictionary confirming polygon placement mode was initiated
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | TopLayer | |
| net_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does well: it discloses that this launches a modal-ish interactive mode in Altium, that completion is user-driven, and that the return value is only a confirmation dictionary rather than the created polygon. It omits error/precondition behavior (no active PCB, nonexistent layer) and whether the call blocks until the user finishes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the two most decision-relevant facts (interactive, active PCB) in the first line, followed by the workflow and the structured Args/Returns blocks. Slightly verbose in the parenthetical interaction detail and the Returns note, but nothing is wasted enough to harm use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 the return payload in depth, and parameter coverage is complete for a two-optional-param tool. The remaining gap is operational: preconditions and failure modes for an interactive command that requires a human at the Altium UI.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: 'layer' is explained as the target copper layer with its default, and 'net_name' as the optional net to assign to the pour. What is missing is any hint about valid layer name format or what an empty net_name means (unassigned/no-net pour).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start INTERACTIVE polygon pour placement on the active PCB') and immediately delimits scope by declaring it does NOT create a polygon programmatically from coordinates. That negative framing distinguishes it from the programmatic placement siblings (e.g. pcb_place_polygon_rect, pcb_modify_polygon) without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the required interaction model in concrete terms — clicks define vertices, right-click or Escape completes — so the agent knows a human must drive the rest of the operation. The exclusion of programmatic creation implies when another tool is appropriate, but no sibling is named explicitly and there is no guidance on what to do if no PCB document is active.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_trim_extend_trackA
Trim or extend one track endpoint along the track's own slope.
Finds the track endpoint nearest (from_x, from_y), then slides it to the perpendicular projection of (to_x, to_y) onto that track's line. The track stays collinear (no bend introduced) and the opposite end stays put, so this cleanly lengthens a track up to a target or pulls it back. All coordinates in mils.
Args: from_x, from_y: Picks which endpoint moves (nearest one wins). to_x, to_y: Target the moving end is projected toward. tolerance_mils: How close (from_x, from_y) must be to a real endpoint (default 5).
Returns: {"moved_end", "old_x", "old_y", "new_x", "new_y", "layer"}.
| Name | Required | Description | Default |
|---|---|---|---|
| to_x | Yes | ||
| to_y | Yes | ||
| from_x | Yes | ||
| from_y | Yes | ||
| tolerance_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does well: it discloses that the opposite end stays put, that no bend is introduced, that the endpoint is chosen by nearest-match, and the mils unit. It omits failure behavior when no endpoint is within tolerance and any undo/permission notes, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by mechanics, then Args and Returns sections. Well organized; slightly verbose in the mechanics paragraph but every sentence conveys behavior an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A geometry mutation tool with an output schema present, so return values are doubly covered. The description supplies units, endpoint-selection logic, and the return shape. Missing only edge-case/failure handling for a mutation with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: every parameter is explained (from/to semantics, the nearest-wins rule, and tolerance_mils meaning plus default 5). This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (trim or extend) on a specific resource (one track endpoint) along the track's own slope. This is clearly distinguishable from siblings like pcb_place_tracks or pcb_cleanup_tracks 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the mechanics and effect (collinear lengthen/pull-back) which implies when it is useful, but never names alternatives (e.g. pcb_cleanup_tracks, pcb_set_track_width) or states explicit when-not conditions. Usage context is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_tune_lengthA
Add approximate routed length to a net with a square serpentine.
Lays a square meander on net at (x_mils, y_mils) sized to add about
add_length_mils, then reports the net's routed length before and
after.
Open-loop and NOT DRC-checked: you choose where the meander goes and
verify clearance afterward (pcb_run_drc). Use it to get a net close to
a target, then finish in Altium's interactive tuner if needed. There is
no scriptable interactive tuner in Altium, so this is the available
approximation.
Args: net: net name. add_length_mils: target length to add (mils). x_mils, y_mils: anchor point of the meander (mils). layer: routing layer (default TopLayer). amplitude_mils: meander height; bump count = add_length / (2*amplitude). width_mils: track width.
Returns: {"length_before_mils", "length_after_mils", "added_mils", "bumps", "drc_checked": false}.
| Name | Required | Description | Default |
|---|---|---|---|
| net | Yes | ||
| layer | No | TopLayer | |
| x_mils | Yes | ||
| y_mils | Yes | ||
| width_mils | No | ||
| amplitude_mils | No | ||
| add_length_mils | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does well: it discloses that the operation is open-loop, not DRC-checked, approximate in the length it adds, and that the caller owns meander placement and clearance. It does not state reversibility/undo behavior or what happens if the anchor point overlaps existing routing, which keeps it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the caveats, then structured Args/Returns blocks. Every sentence adds information an agent needs — the tuner caveat, the DRC warning, and the bump formula all earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter geometry mutation with no annotations, the description covers purpose, caveats, all parameter meanings, and the return payload (including `drc_checked: false`), which additionally reinforces the DRC caveat. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so this had to compensate, and it does: every one of the 7 parameters is explained, including defaults (layer=TopLayer, width), the geometry meaning of x_mils/y_mils as the meander anchor, and the non-obvious relationship bump count = add_length / (2*amplitude) that governs amplitude_mils.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Add approximate routed length to a net with a square serpentine') and immediately clarifies the mechanism and the report it produces (length before/after). It is clearly distinguishable from siblings such as pcb_calc_length_match or pcb_get_trace_lengths, which only measure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the workflow: use to get a net close to a target, then finish in Altium's interactive tuner, and notes there is no scriptable interactive tuner so this is the available approximation. It also names the follow-up alternative tool (`pcb_run_drc`) for clearance verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pcb_unrouteA
Take up the focused board's routing: its tracks, arcs and vias.
Removes the free tracks and arcs on signal layers, and the free
vias, that carry a net. Never removes a footprint's own copper,
polygons or their hatching, dimensions, keepouts, or copper with
no net (an antenna, a logo, a heat spreader): those are drawn,
not routed. Locked routing stays unless include_locked, since
locking is how a designer keeps a route. Polygons are not
repoured; pcb_repour_polygons does that.
Refuses unless the focused board is expect_file. With
checkpoint (default), first snapshots the board's folder as it
is ON DISK, so it can be restored with app_restore_checkpoint;
unsaved edits in the editor are not in it, so save first if there
are any.
For other selections of board copper, obj_delete and
obj_batch_delete take a board type with a filter, e.g.
eTrackObject with Layer=TopLayer|InComponent=false.
Args: expect_file: full path of the board to un-route. nets: take up only these nets' routing. None takes every net's. A name that is not a net on the board refuses the whole call and nothing is removed. include_locked: take locked routing as well (default False). checkpoint: take a checkpoint first (default True).
Returns:
{"tracks", "arcs", "vias", "nets", "kept_locked", "failed", "checkpoint"}: how many of each were removed, how many nets
they were on, and how many locked primitives stayed. Or
{"error": ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| nets | No | ||
| checkpoint | No | ||
| expect_file | Yes | ||
| include_locked | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden: it discloses destructive removal scope, exclusions for footprint copper/polygons/dimensions/keepouts/netless copper, locked-routing behavior, checkpoint semantics, and that an invalid net causes the entire call to refuse with nothing removed. It also clarifies that unsaved editor edits are not included in the checkpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and removal scope, then covers exclusions, prerequisite/refusal behavior, checkpointing, alternatives, args, and returns. Every sentence adds operational value for a destructive board operation rather than repeating structured data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, zero schema description coverage, and the destructive nature of the tool, the description is complete enough to call correctly. It covers scope, exclusions, locked handling, checkpoint prerequisites, atomic refusal, alternatives, and return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: expect_file is the board path, nets scopes removal and refuses atomically on an unknown name, include_locked controls locked routing, and checkpoint controls the on-disk snapshot. It adds meaning well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: taking up routing (tracks, arcs, vias) on the focused board. It precisely defines what is removed and what is never removed, which distinguishes it from general deletion siblings like obj_delete and obj_batch_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names alternatives for other board-copper selections (obj_delete and obj_batch_delete with a board type and filter) and points to pcb_repour_polygons for polygon repouring. It also states when the tool refuses to run and when saving is required before checkpointing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_add_documentB
Add an existing document to a project.
Args: document_path: Full path to the document to add project_path: Optional project path. If None, uses active project.
Returns: Dictionary confirming the operation
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | ||
| document_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does not say whether the document is copied or linked, whether the path must already exist on disk, what happens if it is already a member, or what permissions are needed. 'Dictionary confirming the operation' is too vague to convey outcome.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by short Args and Returns blocks. No filler, though the Returns line adds little and the structure is boilerplate rather than tailored to what an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return value needn't be spelled out, and both parameters are covered. For a mutation tool with zero annotations, though, the description should mention prerequisites (document exists, project open) and failure behavior to be complete enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning — and it delivers: document_path is documented as a full path and project_path as optional with a stated fallback to the active project. That fallback semantics is not derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Add an existing document to a project.' An agent can tell this mutates project membership rather than document content. However, it does not distinguish itself from the nearby siblings proj_import_document and proj_list_documents, which look adjacent in intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of the obvious alternative proj_import_document. The only guidance is the implicit default behavior for project_path ('uses active project'), which is parameter help rather than usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_add_sheetA
Create a new schematic sheet and add it to the focused project.
The sheet is created in the same directory as the project file.
Args: name: Name for the new sheet (without .SchDoc extension). Default "NewSheet".
Returns: Dictionary with the path of the newly created sheet
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | NewSheet |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses one side effect (the file is created alongside the project file) and that it returns the new path. It does not say whether existing sheets with the same name are overwritten, whether the sheet is written to disk immediately or only added to the project tree, or whether it requires the project to be saved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its filesystem behavior are front-loaded in the first two sentences, then Args/Returns are cleanly separated. Slightly redundant in restating the default already present in the schema, but overall tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return value does not strictly need describing. For a one-parameter creation tool the description covers location, naming constraint, default, and result path. The remaining gap is precondition/error behavior around the 'focused project' requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single parameter, and it does: it explains the extension must be omitted ('.SchDoc' is appended) and restates the default 'NewSheet'. That is a meaningful format/validation constraint the bare string schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Create a new schematic sheet and add it to the focused project.' The scope ('focused project') and target format ('schematic sheet') are clear. It does not differentiate itself from the similar proj_add_document / sch_place_sheet_symbol siblings, so an agent must infer which creation tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions that the sheet goes into the 'focused project', which implies a project must be active, but this prerequisite is never stated explicitly and no failure behavior is given for when nothing is focused. There is no when-not guidance and no named alternative among siblings such as proj_add_document or sch_place_sheet_symbol.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_annotateA
Annotate schematic designators programmatically, no dialog, no user interaction.
Compiles the project, iterates every schematic sheet, collects all unlocked components, sorts them by the chosen order, and assigns sequential designators per alpha prefix (R1, R2, ... C1, C2, ... U1, U2, ...). Designator prefixes are preserved from the current value (e.g., "R?" or "R13" both keep the "R" prefix). Locked designators (Designator.IsLocked = True) are skipped. All changes are wrapped in SchServer.ProcessControl.PreProcess/PostProcess for undo support.
Args: order: Annotation traversal order: "down_then_across" (default: row-major top-to-bottom, left-to-right) "up_then_across" (row-major bottom-to-top, left-to-right) "across_then_down" (column-major left-to-right, top-to-bottom) "across_then_up" (column-major left-to-right, bottom-to-top) "none" (reset all designators to "?")
Returns: Dictionary with: - success: True - order: the order that was applied - renamed: count of components renumbered - reset: count reset to "?" (only for order="none") - skipped_locked: count of locked components left untouched - documents_processed: count of schematic sheets visited - programmatic: True (marks this as the non-interactive path)
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | down_then_across |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so thoroughly: it describes compilation, sheet iteration, prefix preservation, locked-designator skipping, undo wrapping via PreProcess/PostProcess, and reset behavior. It also documents the return fields, including counts for renamed, reset, and skipped components.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then structured into clear behavior, Args, and Returns sections. Every sentence adds useful information about side effects, parameters, or output counts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation tool with no annotations, the definition is complete: it explains the process, side effects, undo support, parameter modes, and return values. The existence of an output schema makes the detailed return section extra, but not harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the sole parameter, and it does: all five allowed order values are enumerated with clear traversal semantics, including the special 'none' reset mode. This is more than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: annotate schematic designators programmatically with no dialog. It is immediately clear what the tool does, but it does not explicitly differentiate itself from nearby siblings such as sch_increment_designators or proj_lock_designator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies automated/batch use through 'programmatically, no dialog, no user interaction,' but it does not explicitly say when to choose this over related designator tools or when not to use it. Usage context 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.
proj_closeA
Close a project, saving its documents or discarding their edits.
save=True (default) writes this project's modified documents,
then closes it. save=False closes it without saving.
WITHOUT SAVING, TWO LAYERS KEEP THE BRIDGE FROM WEDGING. A close with a modified member raises Altium's save prompt inside the polling loop, where the bridge cannot answer it. MEASURED on AD 26.10.1.6: after an edit IServerDocument.Modified reads False while the tab shows the sheet modified, so nothing gated on that read works.
First, the handler clears the modified flag on every loaded member without reading it. MEASURED on a local scratch project: the close then raised no prompt and the file on disk was byte-identical.
Second, if a prompt appears anyway, this answers it through UI Automation: "Save None", then "OK" once the dialog has retitled to "Confirm Not Saving", which is what shows the decisions changed. Pressing OK before that would save. The sequence was measured by hand; this tool running it has not run live.
ALTIUM CLOSES THE FOCUSED PROJECT. MEASURED: a close naming a
project with no loaded document, while another project's board was
focused, closed that other project first. So the handler makes the
named project focused by showing one of its loaded documents, and
refuses, changing nothing, when it cannot. Every attempt compares
the open projects before and after: if anything else closed, it
stops without retrying and returns those paths as
closed_instead, with success false.
IT ANSWERS ONLY FOR THIS PROJECT. It records the project's member
paths before closing and reads every path the prompt lists. If any
listed document is outside the project it presses nothing and
returns them, because answering would discard work in a project
nobody named. It also presses nothing when membership cannot be
established: no project_path, or a deployed script that
reports member file names rather than paths.
A document shared with another open project is a member of both,
so its unsaved edits are discarded here too. save=True prompts
are never answered for you.
IF A PROMPT IS LEFT OPEN, answer it with app_invoke_element
(Save None, then OK) or app_press_dialog_button. Both
work while the bridge is blocked, because they go through Win32
rather than through the loop.
Args:
project_path: project to close. Omit for the focused project;
save=False then leaves any prompt for a human.
save: write modified documents first (True), or discard their
unsaved edits (False).
Returns:
success and closed, checked by looking the project up
again, and project_path. When a prompt was answered,
prompts_answered and discarded, the paths it listed.
When one was left, prompt and reason: the bridge stays
blocked until it is answered. Without a prompt, discarded
lists the loaded members closed without saving and
attempts how many closes it took. The modified flag cannot
be read reliably, so a path in discarded is not proof that
document had edits.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it discloses that a modified member raises a save prompt inside the polling loop, the measured failure of IServerDocument.Modified, that the focused project is what actually closes, that non-member documents are refused, that shared documents lose their edits here, and that save=True prompts are never auto-answered. These are exactly the side effects and safety limits an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded, but the body runs long with repeated ALL-CAPS headers, version strings, and several 'MEASURED on ...' anecdotes that could be compressed. Much of it earns its place, yet the density and formatting make it slower to scan than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description ties return fields (success, closed, closed_instead, prompts_answered, discarded, prompt, attempts) to the behaviors that produce them, including the caveat that a path in discarded is not proof of edits. For a destructive, prompt-prone operation, nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema shows only a bare boolean and nullable string, so the description must supply all meaning — and the Args block does: save writes modified documents or discards unsaved edits, project_path omits to focused and interacts with save=False to leave the prompt for a human. Both parameters are fully disambiguated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('Close a project') and immediately splits the two modes (save vs. discard edits). It is unmistakable against siblings like app_close_document or proj_save, and the later discussion of focusing/refusal semantics confirms the exact scope of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when save=True applies, that omitting project_path targets the focused project (and that save=False then leaves the prompt for a human), and names concrete fallbacks (app_invoke_element, app_press_dialog_button) when a prompt is left open. What it lacks is an explicit contrast with the nearest alternative, app_close_document, which shares the 'close something' surface.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_compare_sch_pcbA
Compare schematic and PCB component counts.
Compiles the project and compares physical component counts between the
schematic and the primary PCB document, via the component mappings
(matched + side-only) -- the same authoritative path as
proj_get_differences. For the per-component breakdown of what is
extra on each side, use proj_get_differences.
DATASHEET DISCIPLINE: If the diff reveals mismatched or missing parts and you're proposing a fix, the datasheets of the parts involved are authoritative on their pinout and behavior, fetch them before suggesting a footprint change or pin reassignment.
Args: project_path: Optional project path. If None, uses active project.
Returns:
Dictionary with sch_components, pcb_components, components_match
(bool), and pcb_path. (Net-count comparison is not provided here;
use proj_get_nets / pcb_get_nets.)
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does disclose one real behavioral trait beyond the schema: the tool compiles the project before comparing, and it takes the same authoritative path as proj_get_differences. It says nothing about cost/time of compilation, failure modes when no PCB document exists, or whether compilation touches unsaved state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then differentiation, then a DATASHEET DISCIPLINE workflow note, then Args/Returns. Every block is relevant, but the datasheet-discipline paragraph is advisory context rather than tool definition and could be trimmed for an agent scanning many tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description still names the return keys (sch_components, pcb_components, components_match, pcb_path), which removes ambiguity about what 'component counts' means. Combined with the documented parameter and the compilation side effect, an agent has enough to call it correctly; only error/permission behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: 'project_path: Optional project path. If None, uses active project.' That is the key semantic the schema omits (optionality is in the schema, the active-project fallback is not). A single fully-explained parameter justifies a 4 rather than the 0-param baseline of 4+.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Compare schematic and PCB component counts') and immediately scopes it to physical component counts via component mappings on the primary PCB document. It explicitly distinguishes itself from proj_get_differences and from net-count tools (proj_get_nets / pcb_get_nets), so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative for the adjacent need ('For the per-component breakdown of what is extra on each side, use proj_get_differences') and states that net-count comparison is out of scope. That is clear routing guidance, though there is no explicit precondition (e.g. project must be open or compiled) or stated 'do not use when' case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_compileA
Compile a project to check for errors.
This runs the project compilation which validates connectivity and checks for design errors.
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with compilation results including any errors/warnings
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation runs a compilation and validates connectivity/design errors, and notes the active-project fallback, but says nothing about cost/duration, whether it is cached or always rebuilds, whether it mutates project state or caches, or whether it can fail on invalid projects. That leaves meaningful behavioral gaps for a potentially long-running build step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and outcome, then supporting detail; short overall. The opening sentence and 'This runs the project compilation' are mildly redundant, but nothing is bloated and sections are clearly labeled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 (and the description's Returns note is a bonus). The parameter is fully covered. What is missing for a tool sitting in a dense cluster of compile/validate siblings is disambiguation — why call this rather than proj_force_recompile or design_validate — and any note about build cost or freshness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains that project_path is optional and that omitting it targets the active project — meaning the bare schema (nullable string, default null) does not convey. This is the key semantic for the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compile a project to check for errors') and adds what compilation actually validates (connectivity, design errors), which is more than a restatement of the name. It does not distinguish itself from closely related siblings such as proj_force_recompile, proj_get_compile_freshness, or proj_run_erc, leaving an agent to infer which compile-like tool to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you compile to find errors. There is no statement of when to prefer this over proj_force_recompile (forcing a rebuild) or proj_get_compile_freshness (checking whether a recompile is needed), nor when ERC is the better check. An agent can guess the context but has no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_createB
Create a new Altium project.
Args: project_path: Full path for the new project file (.PrjPcb, .PrjLib, etc.) project_type: Type of project to create: - "PCB": PCB project (.PrjPcb) - "IntegratedLibrary": Integrated library project - "ScriptProject": Script project
Returns: Dictionary with created project information
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | ||
| project_type | No | PCB |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does not disclose whether an existing file at project_path is overwritten, whether parent directories are created, whether the new project is opened automatically, or what permissions/errors may occur, leaving the mutation semantics underspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and directly states the action. The Args and Returns sections are compact and relevant, though the docstring formatting is slightly mechanical and the extension list is somewhat open-ended.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter creation tool with an output schema, the description covers invocation basics and return shape adequately. It still lacks behavioral details around overwrite behavior and side effects, but the core call requirements are understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so well: project_path is described as the full path for the new project file with extension examples, and project_type enumerates PCB, IntegratedLibrary, and ScriptProject with meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a new Altium project.' It is clearly distinguished from project-opening siblings such as proj_open, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Create a new Altium project,' and the project_type list gives context for choosing among project kinds. However, there is no explicit guidance on when to use this versus proj_open, app_create_document, or other project setup tools, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_create_variantA
Create a new project variant.
After creating, use proj_set_active_variant to switch to it,
and obj_modify to configure component variations.
Args: name: Name for the new variant description: Optional description project_path: Optional project path. If None, uses active project.
Returns: Dictionary confirming creation with name and description
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully implies the new variant does NOT become active automatically (you must call proj_set_active_variant), which is a meaningful behavioral disclosure. However it omits failure modes, duplicate-name handling, and permission/project-open prerequisites for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then Args/Returns sections. Every sentence serves a purpose (workflow guidance, param meaning, return). Slightly verbose versus a single terse sentence, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so explaining the return dictionary is technically redundant but harmless. Params are fully covered and the post-creation workflow is mapped. Missing only edge-case behavior (name collisions, prerequisites) for a mutation tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: all three params are described, including the important default that project_path=None uses the active project and that description is optional. Nothing about format nuances is added, but semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a new project variant.' Unambiguously distinguishes itself from the surrounding variant tools (proj_list_variants, proj_delete_variant, proj_set_active_variant) which are explicitly named elsewhere in the description as follow-ups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear workflow context: create, then proj_set_active_variant to switch, then obj_modify to configure component variations. This tells the agent the correct sequence. No explicit exclusion or 'when not to use' guidance (e.g., vs proj_create), but the follow-up routing is genuinely helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_cross_probeA
Jump to and highlight a component in the schematic or PCB.
Args: designator: Component designator to find (e.g., "U1", "R8") target: "schematic" or "pcb"
Returns: Dictionary confirming the operation
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | schematic | |
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the highlight side effect and that the call is confirmed by a return dictionary. However, it omits preconditions (must a document be open/active?) and side effects such as whether it switches tabs, scrolls, or clears existing highlights.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and the argument list is compact. 'Returns: Dictionary confirming the operation' is low-value padding since an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter navigation tool with an output schema, this covers the essentials: what it does, both arguments, and the accepted target values. Only prerequisites (active document, prior selection state) are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate: it documents both parameters, gives designator examples ('U1', 'R8'), and critically supplies the allowed values 'schematic' or 'pcb' for target even though the schema defines no enum. It does not mention that target defaults to schematic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Jump to and highlight a component' — plus the two possible target domains. An agent can distinguish it from read-only siblings like proj_find_component or proj_get_component_info, though the description doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose (navigate the view to a component), but there is no explicit when-to-use guidance or routing to alternatives among the many sibling tools such as obj_switch_view, obj_highlight_net, or proj_find_component.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_delete_sheetA
Remove a schematic sheet from the focused project.
Safety check: refuses to remove the last remaining schematic sheet. The file is closed and removed from the project but not deleted from disk.
Args: file_path: Full path to the .SchDoc file to remove
Returns: Dictionary confirming removal
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does well: it names the guard condition that aborts the operation and clarifies the critical side effect that the file is closed and detached from the project but not deleted from disk, which tells the agent the action is not fully destructive. It omits permission/auth requirements and any effect on references to the sheet.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the safety condition, then the side-effect clarification — each sentence adds distinct information. The Args/Returns blocks are compact, and although the Returns line is partly redundant with the output schema, it costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation tool with no annotations, the description covers the essentials: what is removed, what blocks removal, and what survives on disk. Since an output schema exists, the brief 'Returns' note is sufficient; only preconditions like an open/focused project are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it identifies the single parameter as a full path and constrains the file type to .SchDoc, meaning beyond the bare 'File Path' string in the schema. It does not specify path format expectations (relative vs absolute beyond 'full') or whether the file must be inside the project directory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a schematic sheet') plus scope ('from the focused project'), which is far more than a restatement of the name. It does not explicitly contrast with the similarly named sibling proj_remove_document, so an agent still has to infer which removal path applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The safety check ('refuses to remove the last remaining schematic sheet') gives useful context about when the call will fail, which implies it is intended for projects with multiple sheets. However there is no explicit guidance on when to use this versus proj_remove_document or obj_delete, and no prerequisites such as the project needing to be open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_delete_variantA
Delete a project variant, with every component variation in it.
THIS IS NOT REVERSIBLE FROM HERE. A variant's entries record which
components are not fitted and which carry an alternate part, and
DM_RemoveProjectVariant is the ONLY write in Altium's whole
variant API. There is no scripted way to add a variation entry
back, so deleting a variant with fifty entries costs fifty
decisions that have to be re-made in the Variant Management
dialog. The reply reports entries_removed so the size of that
is on the record; read it with proj_list_variants first if
the variant is not one you created.
The variant is addressed by name rather than index, because removing one renumbers the rest: two deletions by index taken from a single listing would remove the wrong second variant.
Args: variant_name: name of the variant to remove. project_path: optional project path; defaults to the focused project.
Returns:
{"success": true, "variant_name": ..., "entries_removed": N, "variant_count_before": N, "variant_count_after": N, "verified": true}, or success: false with a reason
when the variant is still listed afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | ||
| variant_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: irreversible, only write in the variant API, no scripted way to restore variation entries, and a concrete cost model (fifty entries = fifty re-made decisions). It also discloses the failure mode ('success: false' with a 'reason' when the variant is still listed afterwards).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the irreversible warning, and nearly every sentence adds information. The explicit 'Returns' block is somewhat redundant given an output schema exists, and the Args/Returns docstring formatting adds length without adding navigational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, annotation-free, two-parameter mutation this covers what an agent needs: irreversibility, restoration cost, the addressing scheme, the default for the optional parameter, and the shape of both success and failure outcomes. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it explains both parameters, including that project_path is optional and defaults to the focused project. It also adds genuine semantics beyond the schema by justifying name-based addressing ('removing one renumbers the rest'), though the variant_name gloss is close to restating the field name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('Delete a project variant') with an explicit scope qualifier ('with every component variation in it'). It is clearly distinguishable from proj_create_variant and proj_list_variants, and an agent can tell what it operates on 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the pre-check alternative explicitly: 'read it with proj_list_variants first if the variant is not one you created', which routes the agent to a sibling before committing. It also states the irreversibility precondition, but does not enumerate other alternatives (e.g. deactivating vs deleting) or say when deletion is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_export_bom_htmlA
Export the project BOM as a self-contained interactive HTML file.
Standalone HTML page, no external CSS / JS / Altium runtime dependency. Open it in any browser; sortable columns, free-text filter, toggle between grouped (one row per value+footprint) and per-component layouts. A self-contained one-shot static export.
Useful for emailing the BOM to a manufacturer, archiving with a board release, or sharing with a non-Altium reviewer.
Args:
output_path: Where to write the HTML. Defaults to
<workspace>/bom.html.
title: Heading + <title> for the page.
limit: Max components to include (default 5000; the BOM call
supports up to ~10000 cleanly).
Returns:
Dict with ok, html_path, components (count
written), bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| title | No | Bill of Materials | |
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that the output is standalone with no external CSS/JS/Altium runtime dependency, is a one-shot static export, and notes the default and practical component limit. It does not mention overwrite behavior or file-write error handling, which are relevant for an export-to-path tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and follows a useful structure: behavior, use cases, args, returns. It is slightly repetitive about being 'self-contained' and 'standalone', but remains readable and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a static export tool: it covers output format, layout toggles, defaults, and return shape. It omits overwrite semantics for output_path and file-write failure behavior, which prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: output_path is explained with its default workspace location, title explains the page heading/<title>, and limit explains the default 5000 and practical ceiling around 10000.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: export the project BOM as a self-contained interactive HTML file. This clearly distinguishes it from data-returning or non-HTML siblings such as proj_get_bom or proj_export_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage contexts: emailing a BOM to a manufacturer, archiving with a board release, or sharing with a non-Altium reviewer. It does not explicitly name alternatives or when-not-to-use conditions, 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.
proj_export_dxfA
Export the active PCB to DXF (AutoCAD) format.
Requires an active PCB document. If output_path is omitted, Altium may show a file-save dialog.
Args: output_path: Full path for the output .dxf file (optional)
Returns: Dictionary confirming the export
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one genuinely important trait: omitting output_path may trigger a modal file-save dialog, which can stall an automated agent. It does not cover overwrite behavior, whether the export is silent by default, which layers/units are exported, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by the prerequisite and the one behavioral caveat. The Args/Returns scaffolding is slightly heavy for a single optional parameter, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so the return value need not be explained, and the prerequisite plus optional-parameter behavior are covered. For a format-export tool, however, an agent would still benefit from knowing what geometry/layers are included and whether an existing file is overwritten.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single parameter, and it does: it specifies that output_path is a full path to a .dxf file, marks it optional, and explains the concrete consequence of omitting it. Format/encoding details of the path (e.g., relative vs absolute, extension handling) remain unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with the target format named explicitly ('Export the active PCB to DXF (AutoCAD) format'), which implicitly distinguishes it from the sibling STEP/PDF/image exporters. It stops short of naming those siblings directly, so an agent must infer the routing rather than read it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisite ('Requires an active PCB document') is stated, which is real usage guidance. There is no explicit guidance on when to pick this over proj_export_step, proj_export_pdf, or proj_export_image, so the choice is left to inference from the format name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_export_imageA
Export the active schematic / PCB document, silent (no dialog).
Only format="pdf" is currently supported as a silent path.
Raster formats (png/jpg/bmp) require a hand-configured OutJob with
a Schematic Print -> Multimedia (Image) container; the Pascal side
rejects them with IMAGE_FORMAT_UNSUPPORTED and points the
caller at proj_run_outjob instead.
The PDF path uses Altium's
WorkspaceManager:Print server process with FileName= - the
same machinery as proj_export_pdf. No OutJob is loaded. The print
runs against Client.CurrentView (the focused document), so
ensure the schematic or PCB you want exported is the active tab
before calling.
The Pascal side deletes any pre-existing file at output_path
before running so the post-run FileExists probe is a true
existence check. Python verifies again here and downgrades a
Pascal "success" to EXPORT_FILE_MISSING if no file landed.
Args:
output_path: Full path for the output file. The directory must
already exist. The extension should be .pdf.
format: Output format. Only "pdf" is silent today
(default). "png", "jpg", "bmp" return an
explicit IMAGE_FORMAT_UNSUPPORTED error.
width: Kept for API compatibility. Unused by the PDF path.
height: Kept for API compatibility. Unused by the PDF path.
Returns:
Dictionary confirming the export with the resolved path,
format, width, height, and the scoped schematic. Sets
file_exists based on a Python-side existence check.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| format | No | ||
| height | No | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the Pascal side deletes any pre-existing file at output_path (a destructive side effect), that the print runs against Client.CurrentView, that no OutJob is loaded, and that Python downgrades false successes to EXPORT_FILE_MISSING. These are exactly the non-obvious traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then structured into mechanism, caveats, and Args/Returns. A few sentences are redundant (Python rechecking the file after the Pascal probe) but nothing is filler at the level of noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter export tool with no annotations, the description covers mechanism, side effects, prerequisites, error codes, and per-parameter behavior. The Returns section overlaps with the existing output schema but adds the file_exists verification semantics, so the picture is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: output_path requires an existing directory and a .pdf extension, format documents the sole supported value plus the explicit error for each unsupported value, and width/height are flagged as unused compatibility parameters. That prevents an agent from wasting calls on raster output or expecting width/height to matter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (export the active schematic / PCB document) plus a key modifier (silent, no dialog). An agent can immediately tell this is an export-to-file operation against the focused document, distinct from mutation or query siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says only format="pdf" takes the silent path and routes raster formats to proj_run_outjob with IMAGE_FORMAT_UNSUPPORTED. It also gives the prerequisite that the target document must be the active tab. It does not, however, distinguish itself from proj_export_pdf even though it admits using the same machinery, leaving that choice ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_export_netlistA
Write the compiled connectivity to a flat netlist file.
Pulls the full pin-net table once (the same data as get_nets) and writes it as a standalone netlist that other tools can import. Two formats:
"pads": PADS-PCB ASCII, NET section with one SIGNAL block per net listing its component.pin nodes. Widely importable.
"tabular": one "component,pin,pin_name,net" CSV row per node, for quick diffing or spreadsheet review.
Single-pin and unnamed nets are included so the file is a faithful dump, not a routed-only view.
Args: output_path: Destination file. Defaults to workspace/netlist. if omitted. net_format: "pads" (default) or "tabular". project_path: Optional project path; uses active if omitted.
Returns: Dictionary with output_path, net_format, net_count, node_count.
| Name | Required | Description | Default |
|---|---|---|---|
| net_format | No | pads | |
| output_path | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does useful work: it discloses that single-pin and unnamed nets are included (a faithful dump, not a routed-only view) and what the call returns. It omits the write semantics that matter most for a file-producing tool — whether an existing output_path is overwritten, whether directories are created, and any failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and format list, then documents args and return value in scannable blocks. Slightly longer than strictly necessary (the bullet format descriptions duplicate some of the Args section), but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be re-explained, and format semantics plus defaults are well covered. The remaining gap is the unannotated mutation surface: overwrite behavior and permissions on the destination path are unstated, which is the one thing an agent could get wrong here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does. It documents all three parameters, supplies default behavior for output_path and project_path, and — critically — gives the valid net_format values ("pads", "tabular") plus what each produces, which the schema does not enumerate at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Write the compiled connectivity to a flat netlist file") and immediately enumerates the two output formats. An agent can distinguish this from read-side siblings like get_nets or proj_get_connectivity 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ("a standalone netlist that other tools can import") and clarifies the relationship to get_nets as the same underlying data, implying read-vs-export routing. It stops short of explicitly naming the alternative to pick when the agent only wants to inspect nets rather than materialize a file, so no true when-not clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_export_pdfB
Export the active document to PDF.
Args: output_path: Full path for the output PDF file
Returns: Dictionary confirming export
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the scope (the active document) and that a confirmation dictionary is returned, but says nothing about overwriting an existing file at output_path, whether parent directories are created, error behavior, or whether a save/compile is required first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the action stated in the first sentence and the parameter/return details following. The Args/Returns scaffolding is slightly ceremonial for a one-parameter tool but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the redundant "Returns: Dictionary confirming export" line is not needed and the return value is otherwise covered. What remains missing is context an agent actually needs before calling: whether the active document must be saved or compiled, and what happens if the target file exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single parameter, and it does add real meaning: output_path must be a full path for the resulting PDF file. It stops short of clarifying extension handling, directory creation, or overwrite behavior, so it only partially closes the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Export the active document to PDF"), which is unambiguous and clearly distinct from sibling exporters like proj_export_dxf, proj_export_step, and proj_export_image by naming the output format. It does not explicitly say how it differs from those siblings, but the format specificity does most of the disambiguation work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 tool to call when a PDF of the currently active document is wanted. There is no statement of prerequisites (e.g. document must be open/active, design compiled or up to date) and no explicit routing away from the other export siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_export_stepA
Export the open PCB to a STEP 3D model file.
The board is focused first, since the export acts on the focused
view. If output_path is omitted, Altium may show a file-save
dialog. generated is true only when a new file is at
output_path afterwards; otherwise the reply says the export was
dispatched and why nothing could be confirmed. An OutJob with an
ExportSTEP output, run through proj_run_outjob, is the route
whose result can always be checked.
Args: output_path: Full path for the output .step file (optional)
Returns:
generated, plus dispatched and reason when no new
file was found
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well. It discloses that the board is focused first, that omitting output_path may trigger a file-save dialog, and that `generated` is only true if a new file actually exists, otherwise the result is merely dispatched with a reason.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then immediately covers focus behavior, output_path omission consequences, return semantics, and the alternative route. Every sentence carries distinct, useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation-like export tool with no annotations, one optional parameter, and an output schema, the description is complete. It covers preconditions, side effects, confirmation behavior, return value meaning, and the more deterministic alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the description fully explains the single optional parameter: output_path is a full path for the output .step file, and omitting it may cause Altium to show a save dialog. This is exactly the semantic detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: export the open PCB to a STEP 3D model file. This is clearly distinguishable from sibling tools like proj_export_dxf and proj_export_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative route (OutJob with ExportSTEP via proj_run_outjob) and the condition that favors it: the OutJob result can always be checked. It also notes the focus precondition and the dialog behavior when output_path is omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_export_variant_matrix_csvA
Write the variant fitted/not-fitted matrix to a CSV.
Builds the conventional component-by-variant table: one row per
flattened component, one column per variant, each cell
Fitted / Not Fitted / Alternate. Unlike
proj_list_variants (which lists only per-variant deviations), every
component appears, so the file merges cleanly with a BOM in a
spreadsheet.
Args:
output_path: Destination .csv. Defaults to
workspace/variant_matrix.csv.
project_path: Optional project path. If None, uses the focused
project.
Returns: {"output_path", "component_count", "variant_count"} or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does most of the behavioral work: it identifies the tool as a file-writing export, gives the default destination, and states the return shape or error. However, it does not disclose whether existing files are overwritten, whether directories are created, or any permission/encoding behavior, which matters for a write tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and table definition, followed by the useful sibling contrast, then Args and Returns. The information is organized and no sentence is purely filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter CSV export with an output schema, the description is largely complete: it explains the exported matrix, default path, project fallback, and return fields. The main remaining gap is write-safety behavior such as overwrite handling, which is relevant because no annotations are provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does: output_path is a destination .csv with a specific default, and project_path is optional and falls back to the focused project when null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: write the variant fitted/not-fitted matrix to a CSV. It defines the exact table shape (rows, columns, cell values) and distinguishes this tool from proj_list_variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly contrasts this tool with proj_list_variants, clarifying that this export includes every component while the sibling only lists per-variant deviations. That is clear routing guidance, though it does not phrase usage as an explicit when/when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_find_componentA
Search for components across all project sheets.
DATASHEET DISCIPLINE: Results carry _datasheet_guidance. If
you're searching by a part number / comment to answer a
technical question (pinout, rating, behavior), the matched
parts' datasheets must be consulted before drawing any
conclusion. Symbol metadata is not ground truth.
Performs a case-insensitive partial match against the chosen property.
Args: search_text: Text to search for (e.g., "U1", "100nF", "LM317") search_by: Property to search, "designator", "value", or "comment" (default "designator") project_path: Optional project path. If None, uses active project.
Returns:
Dictionary with "results" array (each: designator, comment, footprint,
lib_ref, sheet, location_x, location_y) and "count", plus
_datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| search_by | No | designator | |
| search_text | Yes | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does substantial work: it discloses case-insensitive partial matching, that project_path defaults to the active project, the shape of the returned data, and a strong caveat that symbol metadata is not ground truth and datasheets must be consulted. It does not state the operation is read-only explicitly or describe error/no-match behavior, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by the discipline caveat, then structured Args/Returns blocks, which makes it easy to scan. The Returns section largely restates what the output schema already provides and the datasheet paragraph is somewhat long, so it is efficient but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no annotations, and a documented output schema, the description covers what an agent needs to invoke it correctly: search semantics, property options, project defaulting, and the caveat about interpreting results. Only marginal items (no-match behavior, read-only confirmation) are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema has no enums, so the description is the only source of parameter meaning — and it supplies all of it: concrete search_text examples ("U1", "100nF", "LM317"), the exact allowed values for search_by ("designator", "value", "comment") with its default, and the None-means-active-project behavior for project_path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Search for components") plus an explicit scope ("across all project sheets") and match semantics ("case-insensitive partial match against the chosen property"). This is enough to distinguish it from siblings like proj_get_component_info, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the datasheet-discipline block ("If you're searching by a part number / comment to answer a technical question"), which tells the agent one scenario this tool serves. However, there is no explicit when-not guidance and no named alternative for cases like looking up one known component (proj_get_component_info) or querying the PCB side (pcb_get_components).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_force_recompileA
Flush all dirty docs, invalidate the compile cache, and recompile.
Use this when you need a guaranteed-fresh netlist, e.g. immediately before re-running a connectivity check the user has disputed. Returns prev / new compile tick so you can verify the recompile actually happened.
Returns: Dict with recompiled, prev_compile_tick, new_compile_tick, project path.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose real side effects: dirty docs are flushed and the compile cache is invalidated, plus a verification affordance via prev/new compile tick. It does not say whether the flush mutates user documents, how long the operation takes, or what preconditions (open project, loaded sheets) are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the use case, then the return shape. Every sentence adds information an agent needs; no filler or restated title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the explicit 'Returns:' block is partly redundant, but it usefully names the tick fields an agent should check to confirm the recompile took effect. For a no-argument, low-complexity tool this is essentially complete; only the relationship to proj_compile and proj_get_compile_freshness is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 applies. The description correctly does not invent arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb chain (flush dirty docs, invalidate compile cache, recompile) on a specific resource, and the 'force'/cache-invalidation framing distinguishes it from the plain proj_compile sibling. It never names proj_compile or proj_get_compile_freshness explicitly, so the sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger: 'when you need a guaranteed-fresh netlist, e.g. immediately before re-running a connectivity check the user has disputed.' That is a clear context for use. It offers no exclusion or cost guidance (when NOT to force a recompile, or why one might prefer proj_compile), so it stops short of a full when/when-not pair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_generate_fab_packageA
Generate a fabrication package from an OutJob (Gerbers, NC drill, IPC-356, pick-and-place, assembly, BOM) and report every file produced.
Altium has no per-format export process for Gerber / NC-drill / IPC-356 / P&P: those exist only as OutJob output containers. This runs every container in the project's OutJob, scans each container's output directory, and returns a consolidated manifest. Optionally also exports a STEP 3D model and a DXF (which are separate PCB export processes, not OutJob containers).
Prerequisite: the project must have an OutJob whose fab containers are configured and enabled: the script cannot enable outputs that are off in the OutJob editor.
Args: outjob_path: path to the .OutJob; omit to use the first one in the focused project. include_step: also export a STEP 3D model of the active PCB. include_dxf: also export a DXF of the active PCB. fresh_window_seconds: files modified within this window before a container ran still count as newly produced.
Returns: {"ok", "outjob_path", "containers_run", "results" (per-container with output_dir + files), "extras" (step/dxf results), "all_files" (flat list of newly-produced file paths)}.
| Name | Required | Description | Default |
|---|---|---|---|
| include_dxf | No | ||
| outjob_path | No | ||
| include_step | No | ||
| fresh_window_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that it runs every container in the OutJob, scans each container's output directory, and returns a consolidated manifest, and it explains the non-obvious fresh_window_seconds heuristic (files modified within that window before a container ran still count as newly produced). It does not say whether existing output files are overwritten, how long a full run takes, or that STEP/DXF need an active PCB document, leaving some side-effect detail unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and outputs, then mechanism, then prerequisite, then Args — a clean structure with no filler prose. The only waste is the Returns block, which duplicates information already carried by the output schema; that section is redundant per the output-schema-present rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An agent has everything needed to decide and call: what is produced, the OutJob prerequisite and its failure mode, the meaning of all four args, and optional STEP/DXF extras. Return shape is backed by an output schema, so the extra Returns text is harmless rather than necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all four parameters are explained in an Args block, including the default behavior for outjob_path ('omit to use the first one in the focused project') and the precise semantics of fresh_window_seconds, which is not inferable from the name or type. Only minor gap is that no path format example is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate a fabrication package from an OutJob') and enumerates exactly what the package contains (Gerbers, NC drill, IPC-356, P&P, assembly, BOM) plus the consolidated manifest return. The second paragraph distinguishes it from the export-style siblings (proj_export_step / proj_export_dxf) by explaining that Gerber/NC-drill/IPC-356/P&P have no per-format export process and exist only as OutJob containers, so an agent can tell why this tool exists alongside proj_run_outjob.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite ('the project must have an OutJob whose fab containers are configured and enabled') and an explicit limitation ('the script cannot enable outputs that are off in the OutJob editor'), which tells the agent when the call will fail. It also frames STEP/DXF as optional extras that are separate PCB export processes, hinting at the proj_export_step/proj_export_dxf alternative without naming it or stating when to prefer the standalone exports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_active_variantA
Get the currently active project variant.
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with variant "name" and "description". Returns "[No Variations]" if no variant is active.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the return shape and the sentinel "[No Variations]" for the empty case, and implies a side-effect-free read, but says nothing about permissions, error behavior, or what happens with an invalid project_path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then Args/Returns. The docstring scaffolding is slightly heavier than needed but every line carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read getter, this is essentially complete: default resolution and the empty-case return are both covered. An output schema already exists, so the extra Returns section is a bonus rather than a necessity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single parameter, so the description must compensate — and it does: it explains that project_path is optional and that None falls back to the active project. That is exactly the missing semantic the bare `anyOf[string, null]` schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get the currently active project variant") that an agent can map cleanly onto the sibling family (proj_list_variants, proj_set_active_variant, proj_create_variant). It does not explicitly name what distinguishes it from those siblings, but the read-only single-variant 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, and no named alternatives. Usage is only implied by the word "active" — the agent must infer this is for checking which variant is currently applied rather than enumerating them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_board_infoA
Get PCB board information, outline vertices, layer stack, origin.
IT DOES NOT REQUIRE A PCB TO BE ACTIVE, which is what this used to claim. The handler resolves ANY open board, so with a schematic focused it answers about some other document. MEASURED: with a schematic active and a two-document project focused, it returned an outline belonging to neither, and gave no way to tell.
board_path in the reply names the document that actually
answered. Check it before trusting the geometry, or activate
the board you mean first.
Returns: Dictionary with origin_x, origin_y, board_path, outline (vertex array), and layers (active copper layer names)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does so unusually well: it explains that the tool resolves ANY open board regardless of active document, cites a measured failure case, and tells the agent which field (board_path) exposes the true source. This is exactly the kind of non-obvious behavior an agent cannot learn from schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the opening sentence, followed by the critical caveat and then the return fields. The 'which is what this used to claim' aside and the MEASURED anecdote are slightly chatty, but they reinforce the most important warning rather than padding the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with an output schema, this covers everything an agent needs: what is returned, the ambiguity risk, how to detect the wrong document, and how to avoid it. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify at the parameter level, and the schema coverage is nominally 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get PCB board information') and enumerates the returned content: outline vertices, layer stack, origin, board_path. It does not explicitly name the sibling it differs from (e.g. get_board_info, pcb_get_board_outline), so an agent must infer differentiation from the caveat rather than a direct comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable guidance: check board_path before trusting the geometry, or activate the intended board first. It clearly explains the context in which the tool misbehaves (schematic focused, multi-document project), but it does not name alternative tools that would resolve the ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_bomA
Export a full BOM from the compiled project.
DATASHEET DISCIPLINE: The BOM is the canonical list of
manufacturer part numbers in this design. The response carries
_datasheet_guidance with per-part search queries. Before
drawing any conclusion about a listed part, fetch and read
its datasheet (WebSearch + WebFetch if not already at hand).
Library metadata here is NOT authoritative.
Returns every component with designator, comment/value, footprint, library reference, and all pin-net connections.
Args: project_path: Optional project path. If None, uses active project. limit: Max components to return (default 1000).
Returns:
Dictionary with "components" array and "count", "limit",
"limit_hit" (true when the list stopped at limit with
components left over), "skipped_nil", plus
_datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a fair job: it discloses truncation semantics ("limit_hit" true when the list stopped at limit with components left over), the "skipped_nil" condition, and that library metadata returned here is explicitly NOT authoritative. It never states outright that the call is read-only/side-effect free, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then structured Args/Returns blocks. The DATASHEET DISCIPLINE paragraph is long and slightly prescriptive, but it is actionable rather than filler; the only trimming available is some redundancy between that paragraph and the Returns mention of _datasheet_guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarizes the return shape and the extra underscore-prefixed fields, and both parameters are documented. For a read/export tool with no mutation risk, the only missing element is explicit routing against the other BOM-export siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: project_path is explained as optional with None meaning the active project, and limit is given a role plus its default. The remaining gap is that limit's interaction with _datasheet_guidance and whether it caps per-part guidance is not spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ("Export a full BOM from the compiled project") and the Returns section enumerates exactly what is included (designator, comment/value, footprint, library reference, pin-net connections). It is clear on its own but never names the nearby BOM-producing siblings (design_generate_bom, design_bom_file, proj_export_bom_html), so an agent cannot discriminate purely from the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is real guidance about what to do AFTER calling it (fetch datasheets before concluding anything about a part), but nothing about when to choose this tool over design_generate_bom, design_bom_file, or proj_export_bom_html. Usage is implied by the name and the "compiled project" qualifier rather than stated as an explicit selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_compile_freshnessA
Report the age of the cached netlist and which docs are dirty.
Use this when you're about to disagree with the user about connectivity, first check how stale the netlist you're reading actually is, and whether any open editor docs haven't been saved yet. A dirty doc means the netlist does NOT reflect what the user is looking at.
Returns: Dict with compile_age_ms, compile_cached (bool), ttl_ms, open_doc_count, dirty_doc_count, dirty_docs[], project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does well: it explains that a dirty doc means the netlist does NOT reflect what the user is looking at, and that compile_age_ms/ttl_ms/cached describe cache state. It never explicitly states that the call is read-only and has no side effects, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the one-line purpose, then the usage trigger, then the return shape. The Returns block partly duplicates the output schema, but naming the fields (compile_age_ms, dirty_docs[], ttl_ms) is a modest aid and does not bloat the text excessively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial zero-arg, read-only probe with an output schema already defined, the description covers purpose, trigger, and interpretation of the key fields. Only the explicit read-only/no-side-effect statement is missing, and the output schema covers the return contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool applies. The description correctly implies no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: reporting the age of the cached netlist and which docs are dirty. This is clearly distinguishable from siblings like proj_compile, proj_force_recompile, or proj_get_connectivity, since it is purely a staleness probe rather than a compile or query of connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete trigger condition: use it when you are about to disagree with the user about connectivity, to check whether the netlist is stale or editors have unsaved changes. There is no explicit 'when not to use' or named alternative (e.g. proj_force_recompile), which keeps it 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.
proj_get_component_infoA
Get full information about a single component.
IMPORTANT, if you need info for MORE THAN ONE component, use
proj_get_component_info_many (batch). Looping this tool is a
large wall-time sink, especially with with_pin_nets=True
because each call compiles the project.
Performance note: pin nets are the only field that needs a
project compile, and a stale-cache compile on a multi-sheet
hierarchical project can take 30-60s. When you only need the
component's value, footprint, library reference, sheet, or
pin numbers/names (no nets), pass with_pin_nets=False and
the call drops to sub-second by skipping Project.DM_Compile
entirely. Use the default with_pin_nets=True only when you
actually need to know what each pin is wired to.
with_parameters=False further skips the parameter iterator
(Manufacturer / MPN / Value / Footprint paths). Marginal win
compared to skipping the compile, but useful for the cheapest
possible "is this designator placed?" probe.
timeout overrides the bridge's default poll timeout. The
compile-bound full-fat call can legitimately need 60-90s on
large projects, raise this when you keep with_pin_nets=True.
DATASHEET DISCIPLINE: Before making any claim about this
component's pin function, voltage rating, timing, or electrical
behavior, fetch its datasheet (WebSearch + WebFetch if needed).
The parameters / comment / library metadata returned here are
NOT authoritative, only the manufacturer datasheet is.
_datasheet_guidance in the response carries the rule and a
suggested search query.
Returns the component's designator, comment, footprint, library reference, parameters (when with_parameters=True), and every pin with name/number (and net assignment when with_pin_nets=True).
Args: designator: Component designator (e.g., "U1", "R8", "C3") project_path: Optional project path. If None, uses active project. with_pin_nets: When True (default) compile the project and emit the flattened net for each pin. Set to False to skip the compile and get a sub-second metadata-only response. with_parameters: When True (default) include the parameter dict. Set to False for the cheapest possible probe. timeout: Optional bridge poll-timeout override (seconds). Use a higher value (e.g., 90) when keeping with_pin_nets True on large hierarchical projects.
Returns:
Dictionary with designator, comment, footprint, lib_ref,
sheet, pins array (each with pin/name and, when requested,
net), and (when requested) parameters dict, plus
_datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| designator | Yes | ||
| project_path | No | ||
| with_pin_nets | No | ||
| with_parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses that each call triggers a project compile, that a stale-cache hierarchical compile can take 30-60s, that with_pin_nets=False drops to sub-second by skipping Project.DM_Compile, and that compile-bound calls may legitimately need 60-90s so timeout should be raised. The datasheet-discipline paragraph additionally warns that returned metadata is not authoritative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the highest-value fact (batch tool / do not loop) before anything else, and uses short labeled paragraphs. It is however on the long side and repeats the sub-second-vs-compile point several times across the Performance note and the Args block, plus a Returns paragraph that duplicates the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter read tool with no annotations, the definition covers cost model, parameter trade-offs, timeout tuning, return contents, and a downstream discipline rule. Nothing an agent needs in order to invoke it correctly or cheaply is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all five parameters are explained in the Args block, including the default-project behavior of project_path, the exact performance consequence of each boolean, and the units/usage of timeout (seconds, raise to ~90 for compile-bound calls). This is meaning well beyond the bare type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get full information about a single component') and immediately distinguishes it from the batch sibling proj_get_component_info_many. The scope limit (single component) is stated twice, so there is no ambiguity about cardinality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rule: if more than one component is needed, use the batch tool, with the reason given (looping is a wall-time sink). It also gives conditional guidance for each flag ('use the default with_pin_nets=True only when you actually need to know what each pin is wired to'; with_parameters=False for a cheapest 'is this designator placed?' probe).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_component_info_manyA
Full per-component info for MANY designators in ONE round-trip.
PREFER THIS over looping proj_get_component_info. The compile
(when with_pin_nets=True) happens once for the whole batch,
not once per designator.
Set with_pin_nets=False to skip the compile entirely for
a sub-second metadata-only response (footprint, lib_ref,
parameters, pin numbers/names, sheet). Set
with_parameters=False for the cheapest possible probe.
DATASHEET DISCIPLINE: parameters / comment / library metadata
in the response are NOT authoritative. Before reasoning about
any component's pin function, voltage rating, timing, or
electrical behavior, fetch its manufacturer datasheet. The
response carries _datasheet_guidance + _datasheet_parts.
Args:
designators: List of component designators.
project_path: Optional project path. If None, uses active.
with_pin_nets: When True (default) compile once and emit
the flattened net for each pin on every component.
Set False to skip the compile.
with_parameters: When True (default) include each
component's parameter dict.
timeout: Optional bridge poll-timeout override (seconds).
Raise this when keeping with_pin_nets=True on large
hierarchical projects.
Returns:
Dict with components[], matched, requested, not_found[],
plus _datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| designators | Yes | ||
| project_path | No | ||
| with_pin_nets | No | ||
| with_parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real behavioral context: the compile happens once per batch not per designator, and the 'DATASHEET DISCIPLINE' block warns that returned parameters/metadata are not authoritative and that _datasheet_guidance/_datasheet_parts are emitted. It never explicitly states the call is side-effect-free, which is the one behavioral trait an agent still has to infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the batch/prefer-over-sibling claim, then performance modes, then a safety caveat. It is long and the Args block partly restates names, but that restatement is exactly what the 0%-coverage schema lacks, so most of it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, cost trade-offs, timeout tuning, output shape (components[], matched, requested, not_found[], guidance keys) and the datasheet caveat. With an output schema present and five undocumented params, nothing an agent needs to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: every one of the five parameters is explained with its default and the consequence of changing it (compile skipped, compile once, poll-timeout raise on large hierarchical projects). This is meaningfully beyond the bare types/defaults in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource+scope ('Full per-component info for MANY designators in ONE round-trip') and explicitly positions itself against the singular sibling proj_get_component_info. An agent can tell immediately what it gets and why the batch form exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: 'PREFER THIS over looping proj_get_component_info', plus concrete conditions for the cheaper modes (with_pin_nets=False for sub-second metadata, with_parameters=False for cheapest probe) and when to raise timeout. When-to-use and when-to-downgrade are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_connectivityA
Get pin-to-net connectivity for a specific component.
IMPORTANT, if you need connectivity for MORE THAN ONE
component, use proj_get_connectivity_many (batch). Looping this
tool for a set of designators is the biggest wall-time sink
in design-review workflows.
Compiles the project and returns every pin with number, name, net assignment, and electrical type.
Args: designator: Component designator (e.g., "U1", "R8") project_path: Optional project path. If None, uses active. force_recompile: SaveAll + invalidate cache + recompile before reading. Use when you need a guaranteed-fresh netlist.
DATASHEET DISCIPLINE: pin_name in the response comes from the
symbol, which can be wrong. Before reasoning about the pin's
function (input vs output, drive strength, voltage range,
active level), fetch the manufacturer datasheet and verify
against its pin-description table. The response carries
_datasheet_guidance + _datasheet_parts.
Returns:
Dict with designator, comment, sheet, pin_count, pins[],
plus _datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| designator | Yes | ||
| project_path | No | ||
| force_recompile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses that the tool compiles the project, that force_recompile triggers SaveAll + cache invalidation + recompile, and that pin_name may be wrong because it comes from the symbol, plus the datasheet verification discipline. These are non-obvious side effects an agent could not infer elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the batch alternative, then args and caveats in labeled sections; well structured. It is somewhat long, and the datasheet discipline paragraph plus the Returns section repeat some of what the output schema already covers, so it is slightly over budget.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations but an output schema, the description covers the compile side effects, the freshness tradeoff, the return shape summary, and the critical reliability caveat about pin names. An agent has everything needed to call it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all three parameters: designator with examples ('U1', 'R8'), project_path with the default-vs-active semantics ('If None, uses active'), and force_recompile with its full behavioral meaning. Nothing is left requiring schema inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get pin-to-net connectivity') plus the exact scope ('for a specific component'), and the return payload is enumerated (pin number, name, net, electrical type). An agent can instantly distinguish this from proj_get_connectivity_many, which is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not rule with the alternative: 'if you need connectivity for MORE THAN ONE component, use proj_get_connectivity_many (batch)' and explains why looping is costly. It also conditions force_recompile usage ('Use when you need a guaranteed-fresh netlist').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_connectivity_manyA
Pin-net connectivity for MANY components in ONE round-trip.
PREFER THIS over looping proj_get_connectivity.
DATASHEET DISCIPLINE: pin_name on every component in the
response comes from the symbol and can be wrong. Before
reasoning about pin functions, fetch each part's manufacturer
datasheet. The response carries _datasheet_guidance +
_datasheet_parts.
Args: designators: List of component designators. project_path: Optional project path. force_recompile: SaveAll + invalidate cache + recompile before reading. Use when you need a guaranteed-fresh netlist.
Returns:
Dict with components[], matched, requested, not_found[],
plus _datasheet_guidance + _datasheet_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| designators | Yes | ||
| project_path | No | ||
| force_recompile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does disclose a non-obvious behavior: force_recompile performs SaveAll + cache invalidation + recompile, i.e. it mutates/saves documents before reading. It also warns that returned pin_name values can be wrong and points to _datasheet_guidance/_datasheet_parts as mitigation. It stops short of stating read-only/authorization semantics or cost/latency of a recompile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the sibling routing rule, which is the right ordering. The trailing 'Args:' and 'Returns:' blocks largely restate the input schema and the existing output schema, so a few lines do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and the description still names the key response fields (components[], matched/requested, not_found[]), and it flags the main correctness hazard plus its mitigation. Only the project_path resolution behavior and the side effects/expense of force_recompile are left underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply meaning. It does for designators (list of component designators) and force_recompile (SaveAll + cache invalidation + recompile, with a when-to-use rule), but project_path is only restated as 'Optional project path' with no indication of default/active-project fallback behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Pin-net connectivity') plus explicit scope ('MANY components in ONE round-trip'), and names the sibling it supersedes (proj_get_connectivity). An agent can distinguish it from the single-component variant and from pcb_get_nets/proj_get_nets 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule ('PREFER THIS over looping proj_get_connectivity') and a conditional for the third parameter ('Use when you need a guaranteed-fresh netlist'). Both when-to-use and the alternative are stated outright rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_differencesA
Get detailed differences between schematic and PCB netlist.
Compiles the project and uses component mappings to find:
Matched components (present in both schematic and PCB)
Extra components in schematic (not yet in PCB)
Extra components in PCB (not in schematic)
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with matched_components, extra_in_schematic (array), extra_in_pcb (array), and in_sync (bool)
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that a project compile happens as a side effect, which matters for an agent sequencing other calls, but it never says whether the tool is read-only, whether compilation can alter or dirty project state, how long it takes, or whether license/UI state is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core definition is one front-loaded sentence, followed by a tight bullet list of the result categories and a short Args note. The trailing 'Returns' block partially restates the bullets, but it names the exact keys, so the small redundancy still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read/comparison tool with an output schema present, the description is close to complete: purpose, categories of result, and the parameter fallback are all covered. The remaining gap is behavioral — no statement of read-only-ness or what the implicit compile does to the document.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema coverage, so the description must compensate — and it does, explaining that project_path is optional and that omission falls back to the active project. That is precisely the semantics the schema lacks; it just doesn't state the path format or whether a relative path is accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — get differences between schematic and PCB netlist — and enumerates the three categories of result, so the agent knows exactly what comes back. However, it never distinguishes itself from close siblings like proj_compare_sch_pcb, proj_sync_pcb, and proj_sync_schematic, which a reader could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only hint about when to use it is the mention that it 'compiles the project and uses component mappings'. There is no statement of when this is preferable to proj_compare_sch_pcb (comparison) or proj_sync_pcb/sync_schematic (remediation), nor any prerequisite or ordering guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_erc_violationsA
Return the ERC violation list produced by the last
proj_run_erc() invocation.
Two-step pattern by design: proj_run_erc() performs the
compile-and-check (slow, can be 30+ s on a large project);
this tool reads back the violations cheaply so the agent can
re-query without re-running ERC.
Each violation names the OBJECTS it is about, not just a
category. related_objects carries one entry per offending
object with its kind (Pin, Net, Port), its document, and
a cross_probe string, which is what Altium itself uses to
jump to that exact object and is therefore what identifies the
specific pin or net.
That detail is the difference between a report and something actionable. A category plus a sheet name cannot be acted on: the only safe response to "floating input pin, somewhere on this sheet" is to do nothing, because a NoERC marker placed by guesswork silently suppresses a real disconnection and is worse than the warning it clears.
related_object_count is reported separately, so a violation
that genuinely exposes no objects is distinguishable from one
whose objects could not be read.
Returns:
{"violation_count", "violations": [{"index", "description", "detail", "related_object_count", "related_objects": [{"kind", "document", "cross_probe"}]}]}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the cost asymmetry (run is 30+ s, this read is cheap), the dependency on a prior invocation, and the exact meaning of related_object_count as a signal that objects were unreadable rather than absent. The missing piece is the no-prior-run case, which is a meaningful behavioral gap for a read-back tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the two-step rationale are correctly front-loaded, but the middle section editorializes — 'the difference between a report and something actionable' and the NoERC-by-guesswork anecdote — without adding call-relevant facts. Roughly a third of the text could be cut with no loss of agent guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the Returns block is redundant but harmless, and the dependency on a prior proj_run_erc call is well covered. The definition is complete enough to invoke correctly except for the missing note on preconditions and result staleness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 document and the baseline of 4 applies. The description instead spends its space on output semantics, which is the correct choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource and pins the data source: the ERC violation list from the last proj_run_erc() invocation. That immediately separates it from the sibling proj_run_erc (which performs the check) and from pcb_get_clearance_violations (a different domain).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly frames the two-step pattern and tells the agent to call this instead of re-running ERC to re-query — a clear when-to-use signal with the alternative named. It stops short of stating the precondition failure mode (what happens if proj_run_erc was never run) or whether stale results can be detected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_focusedB
Get information about the currently focused project.
Returns: Dictionary with project information: - project_name: Name of the project - project_path: Full path to the project file - document_count: Number of documents in the project
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a safe read, and the return fields are spelled out, but it says nothing about the failure case when no project is focused, or whether the result reflects live in-memory state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and single-purpose, followed by a compact return listing. The return listing somewhat restates what the output schema would cover, which is the only source of slack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema, this covers what it does and roughly what comes back. The only real gap is the empty/no-focused-project behavior, which matters for a 'currently focused' accessor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No wasted parameter prose was added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get information about the currently focused project'), and the qualifier 'focused' meaningfully distinguishes it from siblings like proj_list_open, proj_get_path, and proj_get_stats. It stops short of naming any of those alternatives explicitly, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus proj_get_path, proj_get_stats, proj_get_board_info, or proj_get_parameters, all of which sound adjacent. The agent must infer the choice from 'focused' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_messagesA
Get all messages from the Messages panel (compile errors, ERC violations, etc.).
Compiles the project first so violation data is current, then returns every violation with its text, severity, and source document.
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with "messages" array (each: message, severity, source) and "count"
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden well: it discloses the important side effect that the project is compiled first so violation data is current, and it describes the return shape including message, severity, and source. It does not discuss permissions, latency, or failure modes, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and side effect, then uses Args/Returns sections efficiently. It is appropriately sized for a one-parameter tool, though the Returns section largely repeats what an output schema already provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single optional parameter, no annotations, and an existing output schema, the description is complete enough to call the tool correctly. It could be stronger by explicitly noting when this tool should be chosen over related ERC/compile tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining the single parameter: project_path is optional and, when None, the active project is used. That is exactly the semantic information the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: get all messages from the Messages panel, and clarifies that this includes compile errors and ERC violations, not just one class. It does not explicitly distinguish itself from close siblings such as proj_get_erc_violations or proj_compile, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mention of compile errors and ERC violations, and the side effect of compiling first is disclosed. However, the description never states when to prefer this over proj_get_erc_violations, proj_run_erc, or proj_compile, leaving the agent to infer the correct choice among overlapping tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_netsA
Get net-to-pin connectivity from the compiled project netlist.
CRITICAL for bulk queries, if you need connectivity for MORE
THAN ONE component or net, do NOT loop this tool. Call it
ONCE with no filters (component="", net_name="", raise
limit if needed) to pull the entire pin-net table in a
single round-trip, then slice the result locally. Each
filtered call is ~700 ms and compiles the project.
Compiles the project and returns pin-level net assignments.
Args:
component: Filter by component designator. Empty = all.
net_name: Filter by net name. Empty = all.
project_path: Optional project path. If None, uses active.
limit: Max pin records (default 500). Raise for big boards.
force_recompile: Save all dirty docs, invalidate the
SmartCompile cache, recompile. Costs one extra
compile (~5-10 s on real designs). Use when you need
a guaranteed-fresh netlist (e.g., after the user
edited schematics in the UI). Pair with
proj_get_compile_freshness to confirm no docs are dirty.
Returns:
Dict with "pins", "count", "limit", "limit_hit" (true when
the list stopped at limit with pins left over) and
"skipped_nil" (entries Altium returned empty).
Examples: # PREFERRED, one unfiltered call, then filter locally: all_pins = proj_get_nets(limit=10000)["pins"] u1_pins = [p for p in all_pins if p["component"] == "U1"]
# Guaranteed-fresh read after user edits:
fresh = proj_get_nets(force_recompile=True, limit=10000)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| net_name | No | ||
| component | No | ||
| project_path | No | ||
| force_recompile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it discloses that each call compiles the project (~700 ms), that force_recompile saves dirty docs, invalidates the SmartCompile cache and costs an extra 5-10 s compile, and it explains limit_hit/skipped_nil semantics. These are exactly the cost and side-effect facts an agent needs before choosing a call pattern.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical bulk-query warning is front-loaded in caps before the mechanical Args section, which is the right ordering. There is some redundancy: a Returns block restates what the output schema already carries, though it earns part of its space by explaining limit_hit and skipped_nil. Slightly long, but nothing is purely filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, zero-annotation tool this covers everything needed: cost model, cache/dirty-document behavior, freshness escalation path, parameter defaults, result truncation signals, and a worked usage example. With an output schema present, the description does not need to enumerate return fields exhaustively and does not try to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: all five parameters are documented in an Args block with the meaning of empty string (Empty = all), the default and purpose of limit ('Raise for big boards'), the fallback behavior of project_path (uses active), and a detailed use case for force_recompile. This adds substantial meaning the bare schema titles do not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get net-to-pin connectivity from the compiled project netlist', plus a concrete output ('pin-level net assignments'). It implicitly separates itself from PCB-side siblings like pcb_get_nets by scoping to the compiled project netlist, but never names an alternative tool, so the differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (bulk connectivity for more than one component/net), when not to (do NOT loop this tool per-component), and what to do instead (one unfiltered call with raised limit, then slice locally). It also names the exact companion tool for freshness checking ('Pair with proj_get_compile_freshness') and the trigger condition (after user edited schematics in the UI).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_optionsB
Get project options: output path, hierarchy mode, compiler settings.
Returns configuration details including output directory, hierarchy mode, document counts, variant count, channel settings, and net naming options.
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with project_name, output_path, hierarchy_mode, logical_document_count, physical_document_count, variant_count, channel settings, and net naming options
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It makes clear this is a non-mutating read ('Get', 'Returns configuration details') and enumerates the categories of configuration surfaced, which is genuine information. However, it says nothing about failure modes (e.g., invalid or non-open project path), whether the active project must be open, or caching/staleness of the returned configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is well front-loaded, but the body is padded: 'Returns configuration details including...' and the separate 'Returns:' block restate the same field list, and much of it duplicates the output schema. There is real redundancy rather than compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 enumerate return fields, yet it spends most of its length doing exactly that. The gaps that matter for correct invocation (relationship to sibling configuration/stats tools, preconditions on the project being open) are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds value by explaining that project_path is optional and that omitting it targets the active project. That is a meaningful semantic not present in the schema, but nothing is said about accepted path formats or what happens when a supplied path is not an open project.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get project options' followed by the categories returned (output path, hierarchy mode, compiler settings). It is clear what the tool does, but it never distinguishes itself from near-siblings like proj_get_parameters, proj_get_stats, or proj_get_path, so an agent must open schemas to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is embedded in the parameter note: 'If None, uses active project.' There is no statement of when this tool is preferred over proj_get_parameters, proj_get_stats, or proj_get_path, so selection relies on inference from the return-field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_parametersA
Get all parameters defined at the project level.
Args: project_path: Optional project path. If None, uses active project.
Returns: List of parameter dictionaries with name and value
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It correctly conveys the read-only nature ('Get'), explains the default behavior when project_path is None (uses active project), and states the return shape. It does not disclose permission requirements or error behavior, but the essential behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the parameter and return values. The Args/Returns boilerplate is slightly verbose but each line adds information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 beyond the summary given. With one optional parameter fully explained and a clear read-only operation, an agent has enough to invoke it correctly; only sibling comparison is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: project_path is described as optional, and the crucial semantic that None falls back to the active project is stated explicitly, which the bare schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get all parameters at the project level. Clear what it returns. It does not differentiate from sibling tools like proj_set_parameter, proj_push_parameters, or proj_get_options, but the operation itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: a read of project-level parameters. There is no explicit when-to-use guidance, no mention of when to prefer proj_get_options or how this relates to proj_set_parameter/proj_push_parameters, though the surrounding siblings suggest the intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_pathB
Get the full path of the currently focused project file.
Returns: Dictionary with project_path, project_dir, and project_name
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It implies a read-only getter and lists the return keys, but says nothing about what happens when no project or file is focused (error vs. empty), or whether the path is absolute/relative — the most likely failure mode for this call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, with the core purpose front-loaded. The 'Returns' block partially duplicates the output schema, which is mild waste, but it is not long enough to be a structural problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument getter with an output schema, the description covers purpose and output shape adequately. The remaining gap is the undefined behavior when no file is focused, which matters because the tool's entire premise depends on that state existing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing for the description to compensate for on the input side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Get the full path of the currently focused project file.' An agent immediately knows what is retrieved. However, it never distinguishes itself from the closely-named sibling proj_get_focused, which could plausibly return the same or overlapping information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (must a project be open? must a file be focused?), and no mention of alternatives such as proj_get_focused or proj_list_open. The agent must infer the trigger condition entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_statsA
Get design statistics from the compiled project.
Returns counts of sheets, components, pins, and nets.
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with sheets, components, pins, nets counts
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that statistics come from the compiled project and that omitting project_path uses the active project, but it does not state whether the operation is read-only, whether it may trigger compilation, or how fresh the counts are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the text is short. The Returns section repeats the earlier counts summary, which is minor redundancy but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with an output schema, the description covers purpose, parameter behavior, and return contents sufficiently to invoke it correctly. It is only incomplete on sibling differentiation and explicit safety/behavior details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the single parameter is fully explained: project_path is optional and None falls back to the active project. That is exactly the semantic detail needed beyond the schema's type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get design statistics from the compiled project, and enumerates the returned counts. It is clear, but it does not distinguish itself from similar siblings such as pcb_get_board_statistics or proj_get_board_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives no explicit when-to-use guidance and names no alternatives or exclusions. The compiled-project context is implied, but an agent must infer when this tool is preferable to other statistics/board-info tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_unconnected_pinsA
Find unconnected/floating pins in the focused project.
Compiles the project first (required for connectivity data), then iterates all components via the DM API to check pin connection status.
Returns: Dictionary with "count" and "unconnected_pins" array, each entry having designator, pin_number, pin_name, and sheet path
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the critical side effect: the project is compiled first because connectivity data requires it, which signals a potentially slow, state-touching operation. It stops short of saying whether the compile persists changes or how long it takes, but the key behavioral trait is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outcome, followed by the mechanism and return shape in two tight blocks. The 'iterates all components via the DM API' clause is implementation detail that adds little for an agent, a small amount of waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what it finds, the compile prerequisite, and the result fields, and an output schema exists so return details are already redundant-but-harmless. The remaining gap is routing guidance against the closely related audit_find_unconnected_ic_pins / audit_find_floating_ports siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The mention of the focused project implicitly explains why no target argument is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find unconnected/floating pins') and scopes it to the focused project, which is concrete enough for an agent to act on. It does not, however, distinguish itself from near-neighbors like audit_find_unconnected_ic_pins or audit_find_floating_ports, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'focused project' phrasing signals a prerequisite but never states it as a condition, and there is no guidance on when to pick this over the audit_find_* pin/port checks. An agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_import_documentA
Import a document into the focused project from an external path.
Copies the file into the project directory (if not already there), adds it to the project, and saves the project file.
Args: source_path: Full path to the source document (SchDoc, PcbDoc, etc.)
Returns: Dictionary with success status, source_path, and dest_path
| Name | Required | Description | Default |
|---|---|---|---|
| source_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does enumerate the main side effects: copying the file, adding it to the project, and saving the project file. It also describes the return value, but omits conflict/overwrite behavior and permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and structured with Args and Returns sections. The Returns section is somewhat redundant because an output schema exists, but overall it remains efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, and the description supplies the critical parameter semantics plus the primary mutation behavior. It is still missing guidance on conflicts, overwrite behavior, and alternatives, but is adequate for a focused import operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by documenting source_path as a full path and giving example document types such as SchDoc and PcbDoc. It does not clarify relative paths, validation, or whether the file must exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: importing a document into the focused project from an external path. It makes the operation distinct from project creation or opening, though it does not explicitly contrast with siblings such as proj_add_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from an external path' implies this tool is for files outside the project, but the description does not state when to use it instead of proj_add_document or app_create_document. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_list_documentsA
List all documents in a project.
Args: project_path: Optional path to specific project. If None, uses active project.
Returns: List of document information dictionaries containing: - file_name: Document file name - file_path: Full file path - document_kind: Type of document
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose the default behavior (uses active project when project_path is None) and the shape of returned items, but omits error conditions, permissions, and whether listing triggers any side effects. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then structured Args/Returns sections. Slightly verbose in restating the return dictionary, but no sentence is wasted for a tool of this size.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with an output schema, the description covers purpose, the default-parameter behavior, and return shape. The main gap is the lack of differentiation from app_list_documents, which would help the agent route correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates well: it explains that project_path is optional and that None means the active project is used. That adds real meaning beyond the bare 'string/null, default null' schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'List all documents in a project,' scoping it to project context. However, it does not distinguish itself from the closely related sibling app_list_documents, which also lists documents, so the agent gets no guidance on which to pick from the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the tool name and the note that project_path defaults to the active project. There is no explicit when-to-use vs when-not, and no mention of the app_list_documents alternative despite the obvious overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_list_openA
List all currently open projects in the Altium workspace.
Returns: Dictionary with "projects" array (each: project_name, project_path, document_count) and "count"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the return structure and implies a read-only listing operation, but does not explicitly state that it is side-effect free or describe any permission or workspace constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences with the core purpose front-loaded. The return-value note is brief and does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema, the description is largely complete: it says what is listed and gives the output shape. It could do slightly more to differentiate from sibling listing tools, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so parameter semantics are inherently simple. The description does not need to explain parameter behavior, and the baseline for zero parameters is a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list currently open projects in the Altium workspace. The scope is clear, though it does not explicitly distinguish this from sibling tools like proj_list_documents or proj_get_focused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor are any exclusions or prerequisites stated. The scope 'currently open projects' implies basic usage, but the description stops short of actual usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_list_outjob_containersA
List all output containers defined in an OutJob file.
OutJob files define output configurations (Gerber, PDF, BOM, etc.)
organized into named containers. Use this to discover what outputs
are available before running them with proj_run_outjob.
Args: outjob_path: Path to the .OutJob file. If omitted, uses the first OutJob found in the focused project.
Returns: Dictionary with "outjob_path" and "containers" array (each: name, type, group)
| Name | Required | Description | Default |
|---|---|---|---|
| outjob_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden — and it does disclose the key non-obvious behavior: omitting the path falls back to "the first OutJob found in the focused project." It also sketches the return shape. It omits error behavior when no OutJob exists or when the focused project has multiple OutJobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the domain rationale, then the when-to-use routing. The Returns block partially duplicates the existing output schema, a small redundancy, but the rest of the prose earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only listing tool with an output schema present, this covers purpose, routing, parameter fallback, and result shape. The only meaningful gap is the failure case (no OutJob found, or ambiguous OutJobs in the focused project).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema only has a bare string with default ""), so the description must compensate, and it does: the parameter is the path to the .OutJob file, and its omission semantics (first OutJob in the focused project) are given, which the schema's empty default does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: "List all output containers defined in an OutJob file," followed by domain context (Gerber, PDF, BOM grouped into named containers). It is clearly distinguishable from the sibling `proj_run_outjob`, which actually executes outputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the workflow position: "Use this to discover what outputs are available before running them with `proj_run_outjob`." That names the alternative and the condition for choosing this tool. It does not mention adjacent options like `proj_run_outjob_all` or when-not to use it, so not quite a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_list_variantsB
List all project variants with their component overrides.
Compiles the project and returns every variant definition including component variation details (Fitted / Not Fitted / Alternate) and any parameter overrides.
Args: project_path: Optional project path. If None, uses active project.
Returns: Dictionary with "variants" array and "count". Each variant has name, description, and variations array (designator, kind, alternate_part, parameters).
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one important trait: the call compiles the project, which is a non-trivial side effect an agent should know about. It does not say whether the compile is expensive, whether it mutates project state, or what happens if compilation fails, leaving meaningful behavioral gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded with purpose and the Args/Returns blocks are scannable. The Returns block largely restates the output schema, which is minor redundancy, but nothing is gratuitously verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the detailed Returns section is somewhat redundant, but the description still supplies the compile-behavior and default-path facts an agent needs. The only real gap is the absence of usage routing among the many variant-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents project_path, marks it optional, and explains the fallback behavior ('If None, uses active project'), which is exactly the semantic the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('List all project variants'), plus scope detail about component overrides and variation kinds. It is clearly distinguishable from write siblings like proj_create_variant or proj_delete_variant, though it never names an alternative such as proj_print_all_variants or proj_export_variant_matrix_csv to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what it returns but never states when to reach for this versus proj_get_active_variant, proj_print_all_variants, or proj_export_variant_matrix_csv. No prerequisites, exclusions, or cost tradeoffs are mentioned beyond an implicit 'this compiles the project'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_load_sheetsA
Load every schematic sheet of a project into the Altium editor.
Project-scope operations (query_objects, batch_modify, etc. with scope="project") only iterate sheets already resident in SchServer. A sheet listed as a project member via get_open_documents may still show loaded=false, meaning Altium hasn't opened its editor state. Call this tool first to force every sheet to load as a proper project member (no free documents).
This is a no-op for sheets already loaded. Safe to call repeatedly.
Args: project_path: Optional project path. If None, uses focused project.
Returns: Dictionary with: - total_sheets: Total SCH sheets in the project - loaded: Sheets newly loaded by this call - already_loaded: Sheets that were already resident - failed: Sheets that could not be opened
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses idempotency ('no-op for sheets already loaded', 'safe to call repeatedly'), the side effect (sheets become proper project members, no free documents), the alternative tool for diagnosing membership, and per-bucket failure reporting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb action, then the failure mode it fixes, then the idempotency guarantee, then args/returns. Every section is labeled and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and the return buckets (total/loaded/already_loaded/failed) are echoed coherently; the description adds the non-obvious precondition semantics that neither schema nor annotations convey. Complete for a zero-required-param helper.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single optional parameter is fully explained in prose: 'Optional project path. If None, uses focused project.' That default behavior is exactly the meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Load every schematic sheet of a project into the Altium editor') and immediately scopes it against project-scope operations that only iterate resident sheets. An agent can distinguish this precondition helper from proj_list_documents/proj_get_connectivity without reading a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this tool first' gives an explicit ordering/context, and the description explains the loaded=false symptom that motivates the call. It doesn't name a concrete sibling alternative to use instead, but the when-to-use and no-op conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_lock_designatorA
Lock or unlock component designators to prevent re-annotation.
When locked, designators are preserved during annotation operations. Use designator="all" to lock/unlock all components on the active sheet.
Args: designator: Component designator (e.g., "U1", "R3") or "all" for all components lock: True to lock, False to unlock (default True)
Returns: Dictionary with designator, locked status, and count of affected components
| Name | Required | Description | Default |
|---|---|---|---|
| lock | No | ||
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It clearly explains the core effect (designators preserved during annotation operations) and documents the return payload, but does not address permission requirements, error behavior for missing designators, or other edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the purpose, then uses clean Args and Returns sections. Every sentence adds useful information, and it avoids unnecessary repetition despite the presence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description is nearly complete: it covers purpose, behavior, both parameters, the special 'all' case, and return fields. It could strengthen cross-tool guidance by referencing proj_annotate directly, but overall it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains the designator format with examples ('U1', 'R3') and the special 'all' value, plus the boolean lock parameter and its default. Both parameters are fully documented beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: lock or unlock component designators to prevent re-annotation. The effect is clear, but it does not explicitly name sibling tools like proj_annotate or sch_increment_designators, so differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a useful condition for designator='all' and explains that locked designators are preserved during annotation, but it does not state when to use this tool versus proj_annotate or other designator tools. Alternative selection and exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_openC
Open an existing Altium project.
Args: project_path: Full path to the project file
Returns: Dictionary with opened project information
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose side effects, permission requirements, error conditions, or whether opening a project changes the active document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action. The Args and Returns sections are somewhat boilerplate, but they do not obscure the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one required parameter and an output schema, which reduces the description's burden. However, it lacks behavioral context for a project-opening operation, such as state changes or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the single parameter is documented in the description as the full path to the project file. This adds useful meaning beyond the schema's bare string type, though format details are still absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: open an existing Altium project. It is understandable in isolation, but it does not differentiate from siblings such as proj_create, proj_close, or proj_list_open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus related project tools, nor any prerequisites or conditions such as whether the project must not already be open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_print_all_variantsA
Export a PDF for every project variant.
Loops the project's variants; for each it sets that variant active and
runs the (silent) PDF export, writing one <variant>.pdf per
variant. The originally-active variant is restored at the end. Composes
the existing proj_set_active_variant + proj_export_pdf paths --
no new export machinery.
Args: output_dir: Folder for the per-variant PDFs. Defaults to the workspace directory. project_path: Optional project path. If None, uses the focused project.
Returns:
{"exported": [{variant, output_path, ok, error}], "count"} plus
restored: the variant put back, or null if putting it
back FAILED. Null is not cosmetic. This loop leaves the
project on the last variant it exported, so a null means the
active variant is not the one you started with, and anything
variant-sensitive run afterwards (an export, a BOM,
pcb_apply_dnp_paste_exclusion) will act on the wrong
set. A failure also carries restore_error,
active_variant_unknown and a note.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the critical side effect (variants are activated in turn), that the original variant is restored, and — importantly — that a null `restored` means the restore FAILED, leaving the project on the wrong variant and corrupting any subsequent variant-sensitive operation. It also names the accompanying failure fields (restore_error, active_variant_unknown, note).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence, then behavior, Args, and Returns in a scannable structure. It is somewhat long and the Returns paragraph restates the restore warning at length, but that verbosity is justified by the failure consequence, and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-step export tool with a real state-mutation risk, the description covers inputs, output shape, side effects, and failure semantics. Even though an output schema exists, the extra explanation of `restored`/`restore_error` adds the exact guidance an agent needs to act safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does, explaining output_dir (per-variant PDF folder, defaults to workspace directory) and project_path (optional; None uses the focused project). Both parameters are given meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Export a PDF for every project variant' — and the 'loops the project's variants' framing distinguishes it from the single-export sibling proj_export_pdf and from proj_export_variant_matrix_csv. An agent can tell what it produces (one <variant>.pdf per variant) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: it loops all variants, composes proj_set_active_variant + proj_export_pdf, and defaults to the focused project when project_path is None. It does not explicitly say 'use proj_export_pdf instead for a single variant,' so there is no hard exclusion, but the all-variants scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_push_parametersA
Copy all project-level parameters onto each loaded schematic sheet.
Every project parameter is written as a document (sheet) parameter on
each LOADED schematic in the focused project, so title blocks can
reference project-wide values. Unloaded sheets are skipped -- call
proj_load_sheets first to include every sheet.
Returns: Dict with param_count, sheets_updated, sheets_skipped_not_loaded, and params_pushed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that every project parameter is written to each loaded sheet, that unloaded sheets are skipped, and what the return dict contains. However, it does not state overwrite semantics, permissions requirements, or error behavior, which are meaningful gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and scope, followed by a key prerequisite and return summary. Every sentence earns its place, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is complete enough: it explains scope, the loaded-sheet constraint, the proj_load_sheets prerequisite, and the return shape. An agent has what it needs to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline score is 4. There are no parameter semantics to explain or compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: copying all project-level parameters onto each loaded schematic sheet in the focused project. The scope is precise, distinguishing it from single-parameter setters and clarifying that only loaded sheets are affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to call proj_load_sheets first when unloaded sheets should be included, and it clearly states that unloaded sheets are skipped. It does not explicitly name alternative tools such as proj_set_parameter, so it falls slightly short of fully explicit when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_remove_documentA
Remove a document from a project.
Note: This only removes the document from the project, it doesn't delete the file.
Args: document_path: Full path to the document to remove project_path: Optional project path. If None, uses active project.
Returns: Dictionary confirming the operation
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | ||
| document_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load, and it does disclose the single most important trait for a mutation: the document is detached from the project but the underlying file survives. It also notes the return value. It does not cover reversibility, permissions, or error behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the critical caveat before any parameter detail, with clean Args/Returns sections. Slightly verbose for a two-parameter tool but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations, the description covers the action, the destructive-scope caveat, both parameters' semantics, and the response shape; an output schema exists so return details need not be expanded. Only permission/error conditions are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: document_path is explained as a full path, and project_path is explained as optional with a defined fallback to the active project. That is meaningful semantics beyond the bare string types in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove a document from a project") and immediately clarifies the scope of removal versus file deletion, which separates it conceptually from destructive siblings like obj_delete or app_close_document. It does not name any sibling tool explicitly, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note about not deleting the file implies when this tool is appropriate versus a delete operation, and the project_path arg explains the active-project fallback. However, there is no explicit statement of when to prefer this over proj_close, proj_list_documents, or other project-document tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_replace_componentA
Replace a component with a different library part.
Keeps existing connections and designator, swaps the symbol and library reference. The component must exist on the active schematic sheet.
Args: designator: Component designator to replace (e.g., "U1", "R3") new_lib_ref: New library reference / component name new_library: New source library name (optional, keeps current if empty)
Returns: Dictionary confirming the replacement
| Name | Required | Description | Default |
|---|---|---|---|
| designator | Yes | ||
| new_lib_ref | Yes | ||
| new_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose the key mutation semantics (connections and designator preserved, symbol/library ref swapped) and the sheet precondition, which is real value. It omits what an agent would want next for a destructive-ish swap: behavior when the designator is not found, whether the new library reference must already exist, and — critically for an EDA tool — whether the PCB footprint link is affected or a re-sync is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavioral summary is front-loaded in three tight sentences, followed by Args/Returns. No filler. The Args block mildly restates parameter names already in the schema, but the added examples earn most of the space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the Returns note is redundant but harmless, and parameter meaning is covered. What is missing is the side-effect surface expected of a schematic mutation in a project toolchain: footprint/re-link consequences, failure modes, and whether a project compile or PCB sync is needed afterwards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (properties carry only bare titles), so the description must compensate, and it largely does: it explains each parameter in prose and adds examples for designator ("U1", "R3") and the optionality semantics of new_library ("keeps current if empty"), which the schema's bare default does not convey. It stops short of stating format constraints on library references (e.g., 'Library:Part' syntax).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('replace a component with a different library part') and immediately clarifies the semantics of the swap: connections and designator preserved, symbol and library reference exchanged. This is materially distinct from siblings like sch_replicate_component or obj_modify, so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one precondition — the component must exist on the active schematic sheet — which is genuinely useful scoping. However it names no alternatives and no when-not-to-use cases (e.g., whether to use obj_modify for parameter-only changes, or re-sync the PCB afterwards), 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.
proj_run_ercA
Run Electrical Rules Check on the focused project.
Compiles the project first (required), then runs ERC.
Call proj_get_erc_violations() afterwards to retrieve the
structured list of violations.
Returns: Dictionary confirming ERC execution
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses a side effect (an implicit compile of the project) and that the return value is only a confirmation, not the violations themselves — a real behavioral constraint an agent would otherwise get wrong. It doesn't mention whether the compile invalidates prior compile state, whether unsaved changes are included, or runtime cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, then the compile requirement, then the follow-up pointer — good ordering with no filler. The trailing 'Returns: Dictionary confirming ERC execution' is mildly redundant given an output schema exists and is vague about content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the essentials are covered: what runs, that compilation precedes it, and where to get violations. The one meaningful gap is differentiation from the sibling `run_erc`, which the description never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. Note that the ERC settings/severity configuration is implicitly whatever the project has, which is left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run Electrical Rules Check on the focused project'), so an agent knows exactly what action executes. It does not, however, distinguish itself from the sibling `run_erc` (or `design_validate`), which appears to cover similar ground, leaving scope differentiation partly to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operational sequence: compile happens first and is required, then ERC, then call `proj_get_erc_violations()` for results. It lacks explicit when-not-to-use guidance relative to `run_erc`/`run_drc` or any prerequisite about project state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_run_outjobA
Execute a specific output container from an OutJob file.
First use proj_list_outjob_containers to list available
containers, then run the desired one by name. Supports both GeneratedFiles
(Gerber, drill, BOM, etc.) and Publish (PDF) container types.
SUCCESS MEANS A FILE WAS WRITTEN. Running a container proves only
that Altium was asked to. One bound to a managed release, or with
its outputs switched off, runs cleanly and writes nothing, and
this used to report success: true with an output_dir that
had never been created. output_dir is now checked afterwards,
and success is true only when a file under it was written or
changed after the run started.
That check covers output_dir and nothing else. A container
that writes somewhere else reads as success: false, and
reason says what was examined, so a caller who knows where
the output really goes can look there.
Args: container_name: Name of the output container to execute outjob_path: Path to the .OutJob file. If omitted, uses the first OutJob found in the focused project. fresh_window_seconds: files modified up to this many seconds before the run started still count as written, for file systems with coarse timestamps. Default 5s.
Returns:
success, container_name, container_type,
output_dir, output_dir_exists, files_written (a
count), written (up to 50 paths), and reason when
nothing was written.
| Name | Required | Description | Default |
|---|---|---|---|
| outjob_path | No | ||
| container_name | Yes | ||
| fresh_window_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does so unusually well: it states that success means a file was written, explains that Altium being asked to run proves nothing, and describes the output_dir existence/freshness check. It also discloses the check's exact limitation, namely that containers writing outside output_dir report success=false, and it names the reason field that explains what was examined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important point, that success means a file was written, is front-loaded right after the workflow line, and the Args/Returns blocks are scannable. The bug-history digression about a past false success is a touch indulgent and could be one sentence shorter, but it earns its place by justifying the success contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter execution tool with no annotations and an output schema, this covers everything an agent needs: the prerequisite listing call, the parameter meanings and defaults, and the exact interpretation of success, output_dir, and files_written. The return fields are enumerated, so the agent can reason about partial or negative results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args block is doing all the work, and it delivers for all three parameters. outjob_path gets a real default behavior (first OutJob in the focused project), and fresh_window_seconds gets both a default and a rationale (coarse file-system timestamps). container_name is the only thin entry, but its link to the listing tool compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource: execute an output container from an OutJob file. It also clarifies scope by naming the two container types supported (GeneratedFiles and Publish). It does not explicitly distinguish itself from the closely named siblings proj_run_output and proj_run_outjob_all, leaving that inference to the reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit prerequisite workflow: call proj_list_outjob_containers first, then run a container by name. The long paragraph on success semantics also implicitly tells callers when interpreting a result is risky. There is no explicit 'do not use this when...' guidance, and the 'run all containers' alternative (proj_run_outjob_all) is never mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_run_outjob_allA
Run every container in an OutJob and report what each produced.
Lists containers via proj_list_outjob_containers, then runs each
through proj_run_outjob in order. For each run, scans the
OutJob's resolved output_dir afterwards and flags files
whose mtime is later than the run started (newly_produced)
so the caller can tell which files this particular container
wrote.
Args:
outjob_path: Path to the .OutJob. Omit to use the first one
in the focused project.
include_files: When True (default) the response includes a
per-container file listing with sizes / mtimes / a
newly_produced flag.
fresh_window_seconds: Files modified within this many
seconds before the container started are still
considered "newly produced" (some output processes
touch existing files instead of rewriting). Default 5s.
Returns:
Dict with ok, outjob_path, containers_run
(list of container names), results (per-container
dicts each with container, container_type,
output_dir, ok, files).
| Name | Required | Description | Default |
|---|---|---|---|
| outjob_path | No | ||
| include_files | No | ||
| fresh_window_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses ordering, output directory scanning, mtime-based `newly_produced` detection, and the `fresh_window_seconds` rationale. It does not describe failure handling (e.g., whether later containers still run after one fails) or permission/side-effect implications of running output jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior and then structured into Args and Returns. It is somewhat long and repeats return-value details already available in the output schema, but every section still adds practical meaning for invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a multi-step tool with three parameters and an output schema, the description covers purpose, sequencing, parameter semantics, and return structure. The main remaining gap is failure/partial-success behavior, which matters for a batch execution tool but is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate fully, and it does: it explains `outjob_path` including the omit-to-use-focused-project behavior, `include_files` and its default, and the precise meaning of `fresh_window_seconds` with its default and rationale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: runs every container in an OutJob and reports each container's output. It also names the sibling orchestration tools (`proj_list_outjob_containers`, `proj_run_outjob`) and distinguishes the batch behavior from single-container runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains that this tool runs all containers and that it first lists containers then delegates each run. The alternative single-container tool is named, but the description does not explicitly state when to choose this batch tool versus `proj_run_outjob` or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_run_outputA
Generate manufacturing output files from the active PCB.
Note: These may open Altium's export dialogs for configuration.
Args: output_type: Type of output, "gerber", "drill", "pick_place", "ipc_netlist" output_path: Optional output directory/file path
Returns: Dictionary confirming generation
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| output_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a meaningful behavioral trait – export dialogs may open for configuration – and states the return is a confirmation dictionary. It does not say whether generation is blocking, whether files are overwritten, or what happens if the user dismisses a dialog.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: purpose first, then the dialog caveat, then args and returns. The docstring-style Args/Returns formatting is slightly redundant given a structured schema, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 elaboration, and both parameters are covered. The remaining gap is routing guidance against the many export/outjob siblings, which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is no enum on output_type, so the description must compensate. It does, by enumerating the four valid output_type values (gerber, drill, pick_place, ipc_netlist) and clarifying output_path as an optional directory or file path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate manufacturing output files from the active PCB'), which is clear on its own. It does not differentiate from closely related siblings like proj_run_outjob, proj_run_outjob_all, or proj_generate_fab_package, so an agent can't tell which to pick without reading both.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that Altium export dialogs may open gives practical context about when invocation becomes interactive, which is useful. However, there is no explicit statement of when to prefer this over outjob-based or fab-package siblings, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_saveB
Save the current or specified project.
Args: project_path: Optional path to specific project. If None, saves active project.
Returns: Dictionary confirming save operation
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It never says what saving actually does: writes to disk, overwrites the file on disk, requires an open project, whether it prompts a dialog, whether it saves all documents in the project, or what happens on failure. Only the return type is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the Args/Returns sections are short and structured. The Returns line duplicates what the output schema already declares, so it is slightly redundant, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotation coverage, the description leaves out essential context: persistence/side-effect semantics, preconditions (project must be open), and behavior on unsaved or read-only state. The existence of an output schema excuses not explaining return values, but the rest of the behavior gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the parameter explanation, and it does add meaning beyond the schema's bare 'project_path' string: it says the value is an optional path to a specific project and that omitting it targets the active project. That default behavior is not inferable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Save the current or specified project'), which is clear enough for an agent to know this persists project state. It does not distinguish itself from close siblings like app_save_all or app_save_document, so the agent cannot tell whether this is project-wide or document-level save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus app_save_all, app_save_document, or app_checkpoint. The 'If None, saves active project' note is the only usage hint and it concerns parameter behavior, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_set_active_variantB
Switch the active project variant.
Args: variant_name: Name of the variant to activate project_path: Optional project path. If None, uses active project.
Returns: Dictionary confirming the switch
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | ||
| variant_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It identifies this as a mutation ('switch') and says a dictionary is returned, but it does not say whether the change persists, whether it requires an open project, what happens to open documents or other variants, or how failure is reported. For an unannotated mutation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a single sentence, followed by a compact Args and Returns block. There is no filler, though the Returns line is redundant with the output schema and the docstring formatting is slightly boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the parameters and acknowledges a return value, and an output schema exists so return details need not be spelled out. However, for a state-changing tool with no annotations it omits persistence, prerequisites, and error behavior, leaving meaningful gaps for an agent deciding whether it is safe to call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: variant_name is explained as the variant to activate, and project_path is explained as optional with the important default that a null value falls back to the active project. Both parameters receive meaningful semantics beyond their bare titles, though no format or enum-like constraints are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Switch the active project variant'. That is clearly distinguishable from siblings like proj_get_active_variant, proj_list_variants, and proj_create_variant. It does not explicitly name those siblings, which keeps it from a 5, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus proj_get_active_variant, proj_list_variants, proj_create_variant, or proj_delete_variant. Nothing states prerequisites such as the project being open or the variant existing. The only usage hint is implied by the verb 'switch'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_set_document_parameterA
Set a document-level parameter on a specific schematic sheet.
Useful for per-sheet title block data (e.g., "SheetTitle", "Revision"). If the parameter already exists it is updated; otherwise a new hidden parameter object is created on the sheet.
NOTE: the target sheet must already be loaded as a proper project
member. Call proj_load_sheets once at the start of a batch;
auto-opening from inside this tool risks detaching the sheet and
rendering it as a "free document". If the sheet isn't loaded this
tool returns NOT_LOADED.
The write is persisted to disk immediately via the IServerDocument
API, no subsequent app_save_all is required.
Args: file_path: Full path to the schematic document (.SchDoc). Use Windows-style backslashes (e.g. C:\path\Sheet.SchDoc), not forward slashes. name: Parameter name value: Parameter value
Returns:
Dictionary with file_path, name, value, and dirty=true
(the in-memory flag; the disk write already happened, so no
app_save_all is needed for this parameter).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | Yes | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses update-vs-create behavior, hidden parameter creation, immediate disk persistence, the NOT_LOADED failure mode, and the meaning of dirty=true. It also explains that app_save_all is unnecessary, which prevents an incorrect follow-up call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and preconditions, then Args and Returns. It is appropriately sized for a mutation tool, but the app_save_all/dirty persistence point is repeated in both the NOTE and Returns section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three required parameters, no annotation coverage, and minimal schema descriptions, the description covers purpose, preconditions, side effects, persistence, and return semantics. An agent has enough information to call it correctly and avoid the main failure mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args section does the necessary work by naming and explaining all three parameters. It adds important file_path formatting guidance about .SchDoc and Windows backslashes, though name and value remain generic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: setting a document-level parameter on a specific schematic sheet. It distinguishes the scope from project-level parameter tools by emphasizing per-sheet title block data and hidden parameter creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear intended use for per-sheet title block values and a strong prerequisite to call proj_load_sheets first, including the failure mode NOT_LOADED. It does not explicitly contrast with the sibling proj_set_parameter, but the document-level scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_set_parameterC
Set a project-level parameter.
Args: name: Parameter name value: Parameter value project_path: Optional project path. If None, uses active project.
Returns: Dictionary confirming the operation
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | Yes | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden for a mutation tool. It says the tool sets a parameter and returns a confirmation dictionary, but does not disclose permissions, persistence, overwrite behavior, or whether the parameter must already exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: a one-line purpose followed by Args and Returns sections. It has little wasted text, though the Returns line is somewhat redundant because an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter, the description covers the basic arguments but leaves key gaps: no usage guidance, no mutation side-effect disclosure, and no parameter value semantics. The presence of an output schema reduces the need to explain return values, but the lack of annotations makes the missing behavioral context more significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It only restates property names for name and value ('Parameter name', 'Parameter value') and adds a useful default note for project_path, but gives no format, valid names, or value constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Set a project-level parameter.' It is clear what the tool does, but it does not distinguish this from closely related siblings such as proj_set_document_parameter or proj_push_parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The only contextual note is that project_path defaults to the active project, which explains a parameter default rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_sync_pcbA
Push schematic changes to PCB (ECO): Design ▸ Update PCB Document.
IMPORTANT: this is NOT silent. Altium's ECO (change-review) dialog is non-suppressible by design, so this fires the real ECO and then BLOCKS on a modal dialog until a human clicks "Execute Changes". Do not call it in an unattended/headless run: it will hang the Altium-side polling loop until someone interacts. (There is no documented silent flag; the prior implementation called a non-existent process id and silently did nothing.)
The server:
Compiles the project and records before-state mappings (matched, extra-in-schematic, extra-in-pcb).
Focuses the project's PCB and invokes
WorkspaceManager:Compare(ObjectKind=Project, Action=UpdateMe): import the schematic's changes into that PCB. The modal ECO dialog opens here.After the user accepts, recompiles and reports the after-state delta (how many components were added/removed).
THE DIRECTION DEPENDS ON FOCUS, so the tool sets it. A schematic in focus makes Altium refuse with "Cannot compare a source document against its owner project"; the PCB in focus with Action=UpdateOther updates the SCHEMATIC from the board, which is what this tool used to send, and an ECO came up with the SchDoc as the affected document. Refuses with WRONG_FOCUS when the PCB cannot be focused. Before executing, check that the ECO's affected documents are the PcbDoc.
What the result does NOT tell you: whether the dialog was accepted.
dialog_outcome_verified is always false, because the handler
returns as soon as the modal closes and cannot see which button was
pressed. components_added_to_pcb and its siblings are recounts,
so they catch a change in component PRESENCE and miss everything
else an ECO carries: footprint swaps, designator and parameter
edits, net changes. Unchanged counts therefore mean "nothing was
added or removed", not "nothing happened". To learn what the dialog
actually says, call app_list_open_dialogs, which reads Altium
over Win32 and so answers while the modal is blocking the bridge.
For unattended board population without a schematic, use
pcb_place_components instead (places geometry only: see its note
about leaving the project unsynced).
Returns: Dictionary with success, pcb_path, before/after mapping counts, components_added_to_pcb, components_removed_from_pcb, components_in_sync (component presence only, see above), and dialog_outcome_verified.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses the non-suppressible modal block, the internal compile/Compare/recompile sequence, the focus-dependent direction, and the WRONG_FOCUS refusal. It also candidly states what the result does not prove (dialog_outcome_verified always false; component counts miss footprint/net/parameter edits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded warning, then numbered steps, then result caveats – well organized and every section is substantive. Slightly long, with some repeated phrasing around the focus/direction issue, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, and the description still adds the crucial interpretive caveats the schema cannot convey (counts measure presence only, dialog outcome unverifiable), plus a pointer to app_list_open_dialogs for reading the blocking dialog.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the 4 baseline applies; the description correctly spends no words on parameters and instead covers the implicit preconditions (project focus) that govern a call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: push schematic changes into the PCB via an ECO, naming the exact Altium menu command. It explicitly distinguishes itself from the inverse operation (proj_sync_schematic behaviour it 'used to send' with Action=UpdateOther) and from pcb_place_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prohibition ('Do not call it in an unattended/headless run') with the consequence (hangs the polling loop on the modal), and routes to the stated alternative, pcb_place_components, for unattended board population. Also states the WRONG_FOCUS precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_sync_schematicA
Push PCB changes back to schematic (back-annotate ECO). Attempts silent execution.
Equivalent to Design > Update Schematic in Altium Designer. Mirror of update_pcb: compiles, records before-state mappings, invokes PCB:UpdateSchematicFromPCB with silent-mode parameter flags (DisableDialog, Silent, NoConfirm, AutoApply), recompiles, and reports the after-state delta. Modern Altium versions execute without a dialog; older versions may still require manual confirmation (flagged via dialog_may_have_opened).
Returns: Dictionary with success, pcb_path, before/after mapping counts, components_added_to_schematic, components_removed_from_schematic, in_sync, and dialog_may_have_opened flag.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses the compilation steps, before-state mapping capture, silent-mode invocation with specific flags, recompilation, and delta reporting. It also flags the important caveat that older Altium versions may still show a dialog, surfaced via dialog_may_have_opened.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and UI equivalent, then gives useful behavioral mechanics. However, the explicit 'Returns:' list duplicates information already available in the output schema and could be trimmed, costing some conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex, state-changing sync tool with no annotations and a separate output schema, the description covers what it does, how it attempts silent execution, what can go wrong on older versions, and how that is reported. Nothing essential for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does not need to explain parameters and the empty schema is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Push PCB changes back to schematic (back-annotate ECO).' It states the direction of synchronization and names the Altium UI equivalent, making it distinguishable from the forward-sync sibling proj_sync_pcb. The reference to 'Mirror of update_pcb' is a minor naming inconsistency but does not obscure purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: this is the PCB-to-schematic back-annotation operation, equivalent to Design > Update Schematic. The direction implies the alternative, proj_sync_pcb, but it does not explicitly name that sibling or state when-not to use this tool, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_designA
EDA-agnostic design review of the open board.
Runs the same netlist-level review regardless of the active EDA
(Altium or KiCad): board stats and net classes, annotation hygiene
(unannotated, duplicate references, missing values), and connectivity
(single-pin nets, shorted pins/components, unconnected parts and pads,
missing decoupling). backend ("altium" | "kicad") targets one tool
when the server runs in "both" mode; omit it to use the active backend.
Geometric DRC (clearances, courtyards) is separate and backend-specific.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, and it does disclose meaningful behavior: the review is netlist-level and identical across backends, and the backend resolution rule is spelled out ('omit it to use the active backend', 'both' mode). It stops short of stating explicitly that the call is read-only/non-mutating and of noting prerequisites such as a loaded board.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then scope, then the backend rule, then the exclusion — a sensible order with no filler. The long parenthetical enumerations of checks are dense but each item adds discriminating information, so the size is defensible rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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; the description covers scope, backend selection, and the DRC boundary. Minor gaps remain for a no-annotation tool: it never states that nothing is modified and never mentions required preconditions (board/project open) or failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema types `backend` as an unconstrained nullable string, so the description is the only source of the valid values ('altium' | 'kicad'). It also defines the default behavior when omitted and the server mode ('both') that makes the parameter necessary — exactly the compensation a low-coverage schema requires.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('EDA-agnostic design review of the open board') and then enumerates the exact check families: board stats/net classes, annotation hygiene, connectivity. It explicitly carves out geometric DRC as out of scope, so an agent can separate this from clearance/courtyard tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context (operates on the open board, same review under either EDA) and an explicit exclusion ('Geometric DRC ... is separate and backend-specific'), which routes the agent to DRC tools instead. It does not name the many overlapping siblings (design_validate, design_lint_report, pcb_layout_audit, the individual audit_find_* checks), so the choice within that family 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.
route_planA
Route the board offline (grid A*) and return placeable ops.
Pure Python -- no Altium round-trip unless fetch_geometry
is set. Output tracks are {x1, y1, x2, y2, width, layer, net_name} (the pcb_place_tracks item shape) and vias
are {x, y, net, size, hole_size} (the pcb_place_via
params), integer mils, so the result applies verbatim. Per-net
failure is honest data (status failed), not a tool error.
Live sequence: fetch geometry -> this tool ->
pcb_place_tracks / pcb_place_via -> pcb_run_drc ->
route_plan_repairs -> apply -> repeat.
Args:
geometry: Gen_GetPcbGeometry payload (bbox / outline /
pads / tracks / vias, all mils). Pads and copper of
nets NOT being routed stay in the obstacle map.
rules: Routing rules, all mils -- clearance_mils,
track_width_mils (int, or per-class dict with
"default"), via_size_mils, via_drill_mils,
layers (default TopLayer + BottomLayer). None
uses defaults.
nets: Route only these net names; everything else stays a
static obstacle. Unknown names are reported in
unknown_nets. None routes every netted pad
group.
net_classes: Net name -> class (power / ground /
differential / ...). Sets routing order and the
per-class track width. Unlisted nets are signal.
grid_pitch_mils: Routing grid pitch in mils (default 25).
bend_penalty: A* corner cost in grid-pitch units.
via_cost: A* layer-change cost in grid-pitch units.
max_expansions: Per-connection A* budget so a walled-in
net fails fast.
fetch_geometry: When True and geometry is None, pull
the live board over the bridge.
Returns:
{"ok": True, "summary": {nets_total, routed, failed, skipped, completion, track_count, via_count, total_length_mils}, "order": [...], "nets": {net: {status, class, width, tracks, vias, ...}}, "tracks": [...], "vias": [...], "validation": {...}}; with a
nets filter also requested_nets / unknown_nets.
{"ok": False, "reason": ...} on malformed input.
``geometry`` says which board state was planned against:
``source`` is ``live`` when this call read the board and
``caller`` when you supplied the dict, plus the ``bbox`` and
``counts`` from that payload. A ``caller`` plan is only as
current as the snapshot behind it, and this tool cannot date
it: after placing anything, re-read before re-planning or
the next plan routes through copper it cannot see.
| Name | Required | Description | Default |
|---|---|---|---|
| nets | No | ||
| rules | No | ||
| geometry | No | ||
| via_cost | No | ||
| net_classes | No | ||
| bend_penalty | No | ||
| fetch_geometry | No | ||
| max_expansions | No | ||
| grid_pitch_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses offline/pure-Python computation, that output objects match pcb_place_tracks/pcb_place_via item shapes and apply verbatim in integer mils, that per-net failure is returned as status 'failed' rather than a tool error, that malformed input yields {ok: False, reason}, and that geometry.source reveals whether the plan ran against a live read or a caller-supplied (un-datable) snapshot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the purpose and workflow, and nearly every sentence carries non-obvious information (shape contracts, failure semantics, staleness). It is long and docstring-shaped, though, and the Returns block restates much of what the output schema already provides, which is the main trimming opportunity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter routing engine with zero schema coverage, the description supplies everything an agent needs: data contracts for inputs and outputs, workflow position, failure modes, and the staleness trap that would otherwise cause silently bad plans. The output schema exists, so return-value detail is supplementary rather than required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 9 parameters, so the description must compensate, and it documents every one: geometry payload contents, rules sub-keys (clearance_mils, track_width_mils, via_size_mils, via_drill_mils, layers), nets filtering plus unknown_nets behavior, net_classes routing order and per-class width, grid_pitch_mils, bend_penalty, via_cost, max_expansions, and fetch_geometry, including defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb, resource, and method: 'Route the board offline (grid A*) and return placeable ops.' It then distinguishes itself from the Altium-side autoroute siblings by stating 'Pure Python -- no Altium round-trip unless fetch_geometry is set,' so an agent can tell it apart from pcb_autoroute/pcb_autoroute_apply 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It spells out the live sequence explicitly (fetch geometry -> this tool -> pcb_place_tracks/pcb_place_via -> pcb_run_drc -> route_plan_repairs -> apply -> repeat) and states the condition that selects each mode (fetch_geometry True vs. supplying a geometry dict). It also gives the critical exclusion: after placing anything, re-read before re-planning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
route_plan_repairsA
Turn a DRC violation payload into an ordered repair plan.
Pure Python, stateless. Classifies the pcb_run_drc payload
(or a bare violation list) into buckets (net_clearance /
pad_clearance / unrouted / antenna / width / other), then plans
actions: rip_and_reroute (worst clearance offender first),
nudge {net, dx, dy, x_mils, y_mils} for a lone
pad-clearance conflict, widen/narrow {net} for width
violations, escalate {reason} when the plan cannot converge
alone. Deltas/coordinates are integer mils.
Executor contract: apply the actions in order
(rip_and_reroute = pcb_delete_net + route that net
again via route_plan with the nets filter or a DSN
round-trip; nudge = obj_modify on the primitive nearest
(x_mils, y_mils); widen/narrow =
pcb_set_track_width; escalate = stop and surface the
reason). Then pcb_run_drc again and re-plan from the fresh
violations -- the loop's outer iteration bound is the caller's.
Args:
violations: pcb_run_drc result {violation_count, violations} or a bare list of violation dicts.
max_rounds: Rip budget for the clearance worst-offender
loop, integer >= 0 (0 = escalate-only for clearance).
Returns:
{"ok": True, "actions": [...], "rounds_used": n, "ripped_nets": [...], "counts": {bucket: n}};
{"ok": False, "reason": ...} on malformed input.
| Name | Required | Description | Default |
|---|---|---|---|
| max_rounds | No | ||
| violations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it declares statelessness and pure-Python execution, enumerates the classification buckets, names each emitted action type with its payload shape, and specifies the error return on malformed input. The executor contract also discloses that the tool does not mutate the board itself — the caller must apply actions — which is exactly the kind of behavioral trait annotations would otherwise cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and the Args/Returns sections are conventionally placed. The executor-contract paragraph is dense with brace-notation payloads and runs long, but every clause maps an action verb to a required follow-up call, so the length is functional rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter planner with an output schema, the description covers the input contract, the full action vocabulary, the downstream execution mapping, and the iteration model. Nothing an agent needs in order to call it correctly and act on the result is missing; the Returns block is mildly redundant with the output schema but not harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: 'violations' is defined as either the full pcb_run_drc result object or a bare violation list, and 'max_rounds' is defined as a rip budget for the clearance worst-offender loop with the non-obvious edge case (0 = escalate-only for clearance) called out. Both parameters gain meaning unavailable in the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Turn a DRC violation payload into an ordered repair plan' — and immediately distinguishes itself from pcb_run_drc (which produces the payload) and route_plan (which it calls as an executor step). An agent can tell what it produces (an action list) versus what its siblings do 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Executor contract' paragraph is explicit about how to consume the output: apply actions in order, mapping each action verb to a concrete sibling tool, then re-run pcb_run_drc and re-plan, with the caller owning the outer loop bound. That is strong when/how guidance. It stops short of an explicit 'do not use when X' exclusion (e.g., no violations present), which keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_drcA
Run geometric design-rule check (DRC) on the open board.
Dispatches to the active backend: Altium runs its native DRC; KiCad
runs kicad-cli pcb drc (KiCad's own CLI) on the board file on disk,
so save pending edits first for current results. Returns violation
counts and a normalized list. backend targets one tool in "both"
mode.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does disclose non-obvious behavior: it dispatches to different backends with different mechanics, and the KiCad path reads the board file on disk rather than in-memory state. It does not state that the operation is read-only or whether it blocks, but the disclosure of the on-disk caveat is meaningfully beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then backend dispatch details, then return shape — every sentence carries information. Slightly dense with backtick-quoted CLI names but nothing gratuitous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so the brief mention of violation counts and normalized list is a bonus rather than a necessity. Covers the key prerequisite and the cross-backend behavioral split; the only real hole is the unresolved `backend` value domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single `backend` parameter, so the description must compensate. It only says '`backend` targets one tool in "both" mode', which hints at the semantics but never names valid values or the default behavior, leaving the agent to guess accepted strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run geometric design-rule check (DRC)') and scopes it to 'the open board'. It never names the near-identical siblings (pcb_run_drc, pcb_get_clearance_violations, run_erc), so an agent cannot tell from the description alone which of those to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds one real prerequisite ('save pending edits first for current results'), which is genuine usage guidance for KiCad. But it gives no when-to-use / when-not guidance relative to the other DRC and violation-listing tools in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_ercA
Run the schematic Electrical Rules Check (ERC) on the open design.
Dispatches to the active backend: Altium runs its native ERC; KiCad runs
kicad-cli sch erc on the schematic file on disk (save pending edits
first). Returns violation counts and a normalized list. backend
targets one tool in "both" mode.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does disclose meaningful behavior: backend dispatch (native Altium ERC vs kicad-cli sch erc run against the schematic on disk), the requirement to save pending edits first, and the shape of the result (violation counts plus normalized list). It does not explicitly state side effects or whether the on-disk file is modified, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then backend dispatch details, then return shape. Three tight sentences with little waste, though the final sentence about backend is cryptic and could be clearer rather than longer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool with an output schema, the description covers the action, backend branching, the save precondition, and the return content. The main omission is disambiguation from the sibling proj_run_erc, which an agent would still need to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single backend parameter has 0% schema description coverage, so the description must compensate. It explains that backend 'targets one tool in "both" mode,' but never states accepted values, default behavior, or what happens when omitted, so the semantics remain vague.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run the schematic Electrical Rules Check') and scopes it to the open design, which is clear. However, it does not distinguish itself from the near-identical sibling proj_run_erc or from proj_get_erc_violations, leaving an agent to guess which ERC entry point to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'on the open design' and the note to save pending edits first, which is a useful precondition. But there is no explicit when-to-use/when-not guidance and no routing to alternatives such as proj_run_erc or pcb_run_drc.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_add_datafile_linkA
Attach a datafile link to a component's current implementation.
Datafile links are how parametric data (IBIS model files, sim models, external CSVs) is bound to a schematic part.
Args: designator: Component reference (e.g., "U1"). file_path: Full path to the file being linked. kind: Optional implementation-specific type (e.g., "SimModel", "IBIS").
Returns: Dict with success, designator, file_path.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| file_path | Yes | ||
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a mutation on the component's 'current implementation' and that the return contains success/designator/file_path, which goes beyond typical annotation content. It does not say whether an existing link is replaced or appended, what happens if the file path is invalid, or whether a save/compile is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: the one-line purpose comes first, followed by a short explainer, then Args and Returns. The Args block duplicates the schema, but with 0% schema coverage that repetition is earned rather than wasteful. A minor trim would be possible but nothing is genuinely filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the Returns note is a bonus rather than a necessity. For a mutation tool with no annotations, though, the description should cover the mutation's side effects — duplicate vs. replace semantics, error behavior, and whether the change persists in the schematic — none of which are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents all three parameters with a concrete designator example ('U1'), a full-path requirement for file_path, and example values for the optional kind field ('SimModel', 'IBIS'). Only the accepted set of kind values and path format constraints remain unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Attach a datafile link to a component's current implementation'), and the follow-up sentence explains what a datafile link actually is (IBIS models, sim models, external CSVs bound to a schematic part). It is clear, but it never names or distinguishes itself from closely related siblings such as sim_attach_model, sim_attach_primitives, or lib_set_model_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the explanation of what datafile links are for, which gives an agent enough context to know this is the tool for binding parametric model files to a schematic part. However, there is no explicit when-to-use/when-not guidance and no mention of the adjacent sim_attach_model or lib_* model tools, so an agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_add_directiveA
Place a parameter-set directive at (x, y) on the active schematic.
A parameter-set directive attaches a single name=value design
parameter to a wire or net. Drop the directive on top of the target
wire/net and the compile engine will propagate the parameter. Common
uses:
param_name="DifferentialPair", param_value="USB", marks the net as a member of the USB differential pair.param_name="NetClass", param_value="HighSpeed", assigns the net to the HighSpeed class.param_name="Signal_Stimulus", param_value="...", any custom per-net rule parameter.
Args: x, y: Location in mils, place ON the target wire/net. param_name: Parameter name (e.g. "NetClass", "DifferentialPair") param_value: Parameter value
Returns: Dictionary confirming placement.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| param_name | Yes | ||
| param_value | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses meaningful behavior: the directive attaches a parameter to a wire/net and is propagated by the compile engine. It also states the coordinate unit (mils) and the placement requirement that the point must be on the target wire/net. It does not explain overwrite behavior, duplicate handling, or what happens when no wire/net exists at the location.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then explains what a parameter-set directive is, gives examples, and documents arguments. The structure is easy to scan, but the 'Returns: Dictionary confirming placement' line is redundant because an output schema exists, and the examples add some length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, 0% schema description coverage, and the existence of an output schema, the description supplies enough context to invoke the tool correctly: placement semantics, coordinate units, parameter examples, and compile behavior. It lacks edge-case behavior for invalid placement or existing directives, which prevents a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for all four parameters. It explains x and y as mils locations that must be placed on the target wire/net, and explains param_name and param_value with examples such as NetClass=HighSpeed and DifferentialPair=USB. It does not enumerate valid parameter names or values exhaustively, so it is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Place a parameter-set directive at (x, y) on the active schematic.' It further clarifies that the directive attaches a name=value design parameter to a wire or net, which is more specific than the tool name alone. It does not explicitly differentiate this operation from sibling tools such as sch_get_directives or sch_set_net_tie, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: drop the directive on top of the target wire/net and the compile engine will propagate the parameter. It also provides common use examples for NetClass, DifferentialPair, and custom signal parameters. It does not state when not to use it or name an alternative tool, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_clear_source_libraryA
Unpin placed schematic components from a stale source library.
Schematic mirror of pcb_clear_source_footprint_library. When
a library is renamed, moved, or consolidated, placed components
keep pointing at it through two component PROPERTIES:
SourceLibraryName: which library file the part came from.DesignItemId: which library ITEM it re-matches against ("Design Item ID" in the Properties panel). A re-link that updates only LibReference leaves this naming the OLD item, which is exactly the<Not Found>state in the panel.
Per matching component this clears SourceLibraryName (when set) and syncs DesignItemId to LibReference (when they differ), so Altium re-matches from whatever is currently in Available Libraries. Both actions are independently switchable.
DesignItemId is a component property, NOT a parameter: writing
it through the parameter-stamping API only creates a stray user
parameter of that name. Use this tool (bulk) or obj_modify
with property DesignItemId (single component).
Args:
sheet_path: absolute .SchDoc path; empty = the focused
sheet. For a whole project, call once per sheet (see
proj_list_documents).
designators: restrict to these designators (whole-string,
case-sensitive); None/empty = every component on the
sheet.
clear_source_library: clear SourceLibraryName.
sync_design_item_id: set DesignItemId = LibReference
where they differ.
Returns: {"total": inspected, "cleared_source_library": n, "synced_design_item_id": n}.
| Name | Required | Description | Default |
|---|---|---|---|
| sheet_path | No | ||
| designators | No | ||
| sync_design_item_id | No | ||
| clear_source_library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and mostly succeeds: it discloses exactly which two properties are mutated, the independence of the two switches, the re-match side effect, and a real pitfall (writing DesignItemId via the parameter API creates a stray user parameter). It stops short of stating whether the change is undoable or what happens to components with no source library set, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then problem context, then per-parameter docs and a Returns block. Every section earns its place, though the SourceLibraryName/DesignItemId exposition is dense enough that a reader may need two passes; slightly more narrative than strictly required for a 4-param tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, the description covers what changes, on which objects, with what switches, and even spells out the return keys despite an output schema existing. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: sheet_path ('absolute .SchDoc path; empty = the focused sheet'), designators ('whole-string, case-sensitive; None/empty = every component'), and both booleans are given meaning beyond their names, including that they are independently switchable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Unpin placed schematic components from a stale source library.' It also positions itself against the sibling family by naming the PCB mirror (pcb_clear_source_footprint_library) and distinguishing itself from lib_clear_source_library by 'placed components' on a sheet. An agent can identify it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the triggering condition explicitly ('when a library is renamed, moved, or consolidated') and names the alternative for the single-object case ('obj_modify with property DesignItemId'), plus the per-sheet workflow note pointing at proj_list_documents. That is when-to-use, when-to-use-something-else, and scope guidance together.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_generate_tocA
Place a table-of-contents note listing every schematic sheet.
Reads the project's document list, keeps the .SchDoc sheets in project order, and drops a numbered text frame on the active sheet. Run it on a dedicated cover/index sheet. Re-running does not remove a prior frame, delete the old one first if you regenerate.
Args: x1, y1, x2, y2: Frame corners in mils (default a tall left box). title: Heading line above the list. project_path: Optional project; uses active if omitted.
Returns: Dict with sheet_count and the placement result, or an error if no schematic sheets were found.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | No | ||
| x2 | No | ||
| y1 | No | ||
| y2 | No | ||
| title | No | Table of Contents | |
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the data read (project document list), the filtering rule (.SchDoc sheets only, in project order), that the frame lands on the active sheet, and crucially that the operation is not idempotent. It omits permission or side-effect details on the project file, keeping it just under 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope in sentence one, then mechanism, then caveat, then structured Args/Returns. Every sentence adds information an agent would otherwise have to guess; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter tool with no annotations, the description covers mechanism, placement target, non-idempotency, parameter units and defaults, and the failure mode (error when no schematic sheets exist). Since an output schema exists, the Returns line is mildly duplicative but does add the error condition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it gives the units for x1/y1/x2/y2 (mils), what they mean (frame corners) plus the default shape, and the default title heading. It also explains project_path's fallback to the active project, adding meaning the bare nullable string schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: places a table-of-contents note listing every schematic sheet, and describes the mechanism (reads document list, keeps .SchDoc sheets in project order, drops a numbered text frame). It does not compare itself to a sibling such as sch_place_text_frame, which handles the primitive placement this wraps, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context ("Run it on a dedicated cover/index sheet") and an operational caveat with the corrective action (re-running leaves the prior frame, delete it first). It doesn't say when not to use it or name alternatives, but the guidance is explicit rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_get_constraint_groupsA
Enumerate IDocument.DM_ConstraintGroups on the active schematic.
Constraint groups are FPGA-style pin/timing constraints attached to a document. Each group has a target kind and id, plus a list of IConstraint entries with a kind/data payload. Useful for auditing FPGA pin assignments and timing constraints that don't show up in the regular PCB design-rule list.
Returns: Dict with groups (list of {target_kind, target_id, constraint_count, constraints[{kind, data}, ...]}) and count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses the return structure in detail, including the type and shape of groups and constraints. It implies a read-only operation through 'Enumerate' and 'get' but does not explicitly state there are no side effects or required permissions, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and is generally efficient, but the explicit Returns section duplicates information already available in the output schema, making it slightly longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema, the description provides sufficient context: it explains what constraint groups are, their structure, and a concrete use case. It could mention prerequisites (e.g., an active schematic is required) or error handling, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline score is 4. The description adds context about what the tool operates on (the active schematic), but there are no parameters to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Enumerate') and resource ('IDocument.DM_ConstraintGroups on the active schematic'), and explicitly notes they are FPGA-style pin/timing constraints not found in the regular PCB design-rule list, which distinguishes it from sibling tools like pcb_get_design_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear use case ('auditing FPGA pin assignments and timing constraints that don't show up in the regular PCB design-rule list'), implicitly guiding when to choose this tool over PCB rule queries. However, it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_get_directivesA
Enumerate parameter-set directives on the active schematic sheet.
Returns every ISch_ParameterSet on the sheet along with its location and the list of parameters it carries. Use this to audit which nets have explicit NetClass / DifferentialPair / custom-rule assignments before a compile, or to verify a bulk placement worked.
Returns:
Dictionary with directives array, each entry has
name, x, y, and a parameters list of
{name, value} objects, plus count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description still makes clear this is a read-only enumeration by using "Enumerate" and "Returns every...". It discloses the active-sheet scope and return structure, though it does not explicitly discuss permissions, error behavior when no schematic is active, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by practical usage guidance and a compact return summary. The structure is efficient and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter read tool with an output schema, the description is complete enough: it identifies the active-sheet scope, use cases, and returned directive structure. An agent has what it needs to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain; this reaches the baseline for a no-parameter tool. The description correctly focuses on behavior and return contents instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Enumerate parameter-set directives on the active schematic sheet." It also clarifies that it returns every ISch_ParameterSet and where it lives, which clearly distinguishes this read/enumeration tool from mutation siblings such as sch_add_directive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete use cases: auditing explicit NetClass / DifferentialPair / custom-rule assignments before compile, or verifying that bulk placement worked. It does not name alternatives or explicit when-not conditions, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_get_sheet_parametersA
Get title block parameters (title, revision, date, etc.) from a schematic sheet.
Reads all parameters from the sheet without modifying anything.
Args: file_path: Full path to a specific .SchDoc file. If empty, reads from the active document.
Returns: Dictionary with "count" and "parameters" array, each having "name" and "value"
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose that it 'reads all parameters without modifying anything,' establishing read-only semantics, and describes the return shape. It omits any info on permissions, large-sheet behavior, or error conditions, so it's 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose then uses clear Args/Returns structure with no wasted sentences. The Returns block is somewhat redundant given an output schema exists, but it's compact and harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with one optional parameter, the description covers purpose, parameter meaning, read-only nature, and return shape. An output schema already exists, so return detail is bonus rather than required; nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema coverage, so the description must compensate—and it does, explaining file_path is a full .SchDoc path and that empty means the active document. That fully documents the parameter beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (title block parameters from a schematic sheet), listing example fields (title, revision, date). The 'schematic sheet' scoping implicitly separates it from project-level siblings like proj_get_parameters, though it doesn't name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the default behavior when file_path is empty ('reads from the active document'), which helps an agent decide how to invoke it. However, it gives no explicit when-to-use/when-not guidance or directs the agent to any sibling tool for related parameter reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_increment_designatorsA
Offset the trailing number of schematic designators by a delta.
Adds delta to the numeric suffix of every component designator
on the active sheet (e.g. delta=100 turns R5 into R105),
optionally restricted to a designator prefix. Handy after copying
a block to avoid designator collisions before re-annotating.
Args: delta: Non-zero integer added to each designator's number. prefix: If set (e.g. "R"), only designators with this letter prefix are changed.
Returns: Dict with success, modified (count), delta.
| Name | Required | Description | Default |
|---|---|---|---|
| delta | Yes | ||
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the active-sheet scope, that each numeric suffix is mutated, and that delta must be non-zero, but it omits reversibility, permission requirements, behavior on locked designators, and possible temporary collisions caused by the offset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed immediately by a concrete example and concise parameter notes. Every sentence contributes useful information with no redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations but an output schema, the description is largely complete: it covers scope, parameters, an example, the intended workflow context, and return fields. It could go further by noting interaction with locked designators or the need to re-annotate afterward to resolve any duplicates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains both parameters: delta is a non-zero integer added to each designator's number, and prefix optionally restricts changes to designators with that letter prefix. The R5→R105 example adds practical meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: offsetting the trailing numeric suffix of schematic designators by a delta on the active sheet, with an R5→R105 example. It is clear enough to distinguish this from annotation or designator-fixing siblings, though it does not name a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a concrete usage scenario: useful after copying a block to avoid designator collisions before re-annotating. However, it does not explicitly state when not to use it or name alternatives such as proj_annotate or audit_find_designator_collisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_mirror_componentA
Mirror a placed schematic component horizontally.
USE THIS RATHER THAN WRITING IsMirrored. Setting that property
with obj_modify does not mirror anything: measured on AD26, the
flag is set, it reads back, Altium's own Properties panel shows
Mirrored ticked, and the part does not move. The canvas draws
from the component's primitives, so a flag-only write leaves
nothing new to draw and no redraw call can rescue it.
Altium's own mirror does both halves at once, setting the flag AND reflecting the primitives, and so does this. That matters twice over: a part mirrored here is identical on disk to one mirrored by hand, and the flag is instance data, so the result survives Update From Libraries. Reflecting the primitives alone would be undone the next time anyone re-instantiates the symbol.
Args: designator: component to mirror, e.g. "U1" mirrored: True or False for an absolute state; omit to toggle. Asking for the state it already has is a no-op, not a second reflection. doc_path: sheet to act on. Defaults to the focused schematic.
Every primitive is reflected about the component's X: pins (left and right swap), lines and rectangles by both ends, polygons, polylines and Beziers by every vertex, and arcs by their centre with their sweep mirrored. A primitive kind it cannot reflect is left where it was and counted in primitives_skipped.
Returns: Dictionary with designator, mirrored (the resulting state), primitives_moved, primitives_skipped, and changed.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_path | No | ||
| mirrored | No | ||
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description carries the full burden well: it discloses mutation semantics (flag plus primitive reflection), idempotency ('asking for the state it already has is a no-op'), persistence across Update From Libraries, and degraded behavior via primitives_skipped. It also lists exactly which primitive kinds are reflected and how.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then rationale, then args, then returns — good structure. Some redundancy ('That matters twice over', the extended AD26 war story) that could be tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations and a zero-coverage schema is fully covered: rationale, parameter semantics, edge cases, and an enumerated return dictionary (designator, mirrored, primitives_moved, primitives_skipped, changed). Nothing an agent needs in order 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: designator is exemplified ('U1'), mirrored is defined as absolute state with omit-means-toggle and no-op semantics, and doc_path is given a default ('focused schematic'). All three parameters carry meaning absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (mirror a placed schematic component, horizontally) and immediately distinguishes itself from the sibling obj_modify path by explaining why this tool exists. An agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'USE THIS RATHER THAN WRITING `IsMirrored`' with obj_modify named as the wrong alternative and the empirical reason it fails. It also covers the mirrored parameter's three usage modes (true/false/omit for toggle), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_busA
Place a bus segment between two XY coordinates on the active schematic.
Buses carry multi-signal groups like DATA[0..7]. Place a bus line and then attach net labels with the bus naming syntax to mark the signal group. Typical workflow: bus line, bus entries at each pin, then connect each bus entry to a wire.
Args: x1: Start X coordinate in mils y1: Start Y coordinate in mils x2: End X coordinate in mils y2: End Y coordinate in mils
Returns: Dictionary confirming bus placement with coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: it names the target as the active schematic, specifies mils for coordinates, and notes a confirming dictionary return. It does not discuss whether placement is undoable, whether it overwrites overlapping objects, or what happens if no schematic is active, but the core behavioral context is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then provides the conceptual context and workflow, then documents args and returns. Every section earns its place, and there is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter placement tool, the description covers purpose, coordinate units, schematic targeting, workflow, and return value. An output schema exists, so it does not need a deeper return explanation; all information an agent needs to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does. It documents all four required parameters as start/end X/Y coordinates and explicitly states the unit is mils, adding meaning absent from the bare x1/y1/x2/y2 schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — placing a bus segment between two XY coordinates on the active schematic — and explains that buses carry multi-signal groups like DATA[0..7], which distinguishes this from a plain wire or line. It also references bus entries and net labels, making the relationship to sibling schematic-placement tools clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear typical workflow (bus line, then bus entries at each pin, then wires) and explains the use case of marking multi-signal groups with bus naming syntax. It does not explicitly say when to use this instead of sch_place_line or sch_place_wires, but the distinction is strongly implied by the bus-specific semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_bus_entryA
Place a bus entry (45 degree stub) connecting a wire to a bus.
Bus entries are the angled stubs that tap a single-signal wire off a bus line. Start point should sit on the bus; end point should sit on the wire (both usually at 45 degrees offset).
Args: x1, y1: Start coordinates in mils (typically on the bus) x2, y2: End coordinates in mils (typically on the wire)
Returns: Dictionary confirming bus entry placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the placement constraint (start on bus, end on wire, typically 45 degrees) and that the return is a confirmation dictionary, but it says nothing about whether the operation is undoable, what permissions or active-document state it requires, or what happens if coordinates are off-grid/off-bus.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition, followed by a clarifying sentence and a clean Args/Returns block. The middle explanatory sentence earns its place by teaching the bus-entry concept, though the definition sentence already implies much of it, making it marginally redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a geometry-placement tool with an output schema present, the description covers purpose, geometric constraints, unit semantics for all four params, and the return type. Missing only attributes like undoability or required active-document context, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (properties only have bare titles like 'X1'), so the description is the sole source of parameter meaning. It supplies that: x1,y1 are start coordinates in mils typically on the bus, x2,y2 are end coordinates in mils typically on the wire — giving both units and semantic role. It doesn't cover invalid values or rounding, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Place a bus entry') plus the geometric form ('45 degree stub') and what it connects (a wire to a bus). The parenthetical immediately distinguishes it from generic placement siblings like sch_place_bus or sch_place_line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use context ('angled stubs that tap a single-signal wire off a bus line') and geometry prerequisites ('Start point should sit on the bus; end point should sit on the wire'), which is effectively when-to-use guidance. It doesn't name a sibling alternative or state when not to use it, so it falls 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.
sch_place_componentsA
Place MANY schematic components from libraries in ONE call.
NOT THE WAY TO DRAW A SCHEMATIC, AND IT IS ENFORCED. Placing four
or more components onto a sheet that has two or fewer is refused:
that is a schematic being drawn by hand, and positions chosen that
way read like nothing a person would draw however correct the
netlist is. Build a DesignPlan and call design_execute_plan
instead, which places AND routes the whole sheet through a layout
engine measured against hand-drawn boards; design_layout_schematic
and design_preview_plan show you the result first without touching
the EDA. Use THIS tool to add parts to a sheet that already exists,
or when the positions came from that engine. To place coordinates
yourself anyway, pass allow_manual_layout=True.
This is the only path for library placement (there is no singular variant). Laying out a 50-part BOM is inherently a bulk operation; done one-by-one it would cost 50 LLM turns.
TARGET DOCUMENT: placement lands on the ACTIVE schematic. Right
after app_create_document the new sheet is NOT auto-focused, so
without document_path parts can silently land on a different
open sheet. Pass document_path (absolute .SchDoc path) and this
tool focuses that sheet first (app_set_active_document) before
placing, always set it when you have just created the target
sheet.
Args: allow_manual_layout: Set True to bypass the refusal described above and place your own coordinates onto an empty sheet. The default exists because this is almost never what the caller actually wants; say why in the surrounding turn. document_path: Absolute path of the .SchDoc to place onto. When given, it is focused before placement so parts can't land on the wrong sheet. When omitted, the current active document is used. placements: List of placement dicts, each with: - library_path (str, optional, empty uses an already-open library) - lib_reference (str, required), component name - x, y (int, mils), placement location - designator (str, optional), override designator - rotation (int, optional), 0 / 90 / 180 / 270 - footprint (str, optional), override current footprint
Example, place a 5-part BOM row: sch_place_components(placements=[ {"library_path": "C:\Lib\ST.SchLib", "lib_reference": "STM32F411RE", "x": 1000, "y": 2000, "designator": "U1"}, {"library_path": "C:\Lib\Res.SchLib", "lib_reference": "Res1", "x": 1500, "y": 2000, "designator": "R1"}, ... # 3 more ])
Returns: Dict with placed, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| placements | Yes | ||
| document_path | No | ||
| allow_manual_layout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly does: it discloses the refusal policy, the silent-misplacement hazard on the ACTIVE document, the side effect that document_path triggers app_set_active_document, and that results can be partial (placed/failed/total). It does not state whether a batch is transactional or what happens when a library_path is invalid, which is the remaining behavioral gap for a bulk mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but appropriately structured: headline, hard constraint, alternative path, parent-document warning, then Args/Example/Returns. A few lines are redundant editorializing ("the default exists because this is almost never what the caller actually wants") and the JSON example contains unescaped Windows backslashes, but nothing material is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk mutation with zero annotation coverage, the description covers the safety policy, the document-targeting pitfall, parameter semantics, a usage example and the return shape. An agent has everything needed to call it correctly and to know when it will be refused.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the nested placements array is an untyped object with additionalProperties, so the description is the only source of parameter meaning. It documents all three top-level params plus all six placement-dict fields (library_path, lib_reference, x/y in mils, designator, rotation with its four allowed values, footprint) and supplies a worked example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Front-loads a specific verb+resource+cardinality ("Place MANY schematic components from libraries in ONE call") and explicitly states it is the only library-placement path, with no singular variant. It also names the sibling it must not be confused with (design_execute_plan) so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not-to-use rule with the enforcement threshold (4+ components onto a sheet with 2 or fewer is refused), names the preferred alternatives (design_execute_plan, design_layout_schematic, design_preview_plan) and the escape hatch (allow_manual_layout=True). It also names the legitimate case: adding parts to an existing sheet or using engine-derived positions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_cross_sheet_connectorA
Place a cross-sheet connector (off-sheet port) on the active sheet.
Cross-sheet connectors are the hierarchical equivalent of a net label, they connect a signal to the same net name on another sheet.
Args: x, y: Connector location in mils. net: Net name the connector binds to. side: "left" or "right" orientation (optional).
Returns: Dict with success, x, y, net.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| net | No | ||
| side | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses that the tool places something on the active sheet and returns a dict with success/x/y/net, but it does not describe mutation side effects, undo implications, failure conditions, or whether the active sheet must be a specific sheet type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose stated first and Args/Returns clearly separated. Every sentence adds useful information, and the structure is easy for an agent to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers purpose, all four parameters, and the return shape, which is more than sufficient given an output schema exists. The main remaining gap is explicit guidance on when to use this versus sibling placement tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents all four parameters meaningfully: x/y in mils, net as the bound net name, and side as optional 'left' or 'right', adding units and allowed values absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Place a cross-sheet connector') and immediately clarifies it as an 'off-sheet port' on the active sheet. It also explains the conceptual role as the hierarchical equivalent of a net label, which distinguishes it from ordinary label/port placement siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear conceptual condition: use this to connect a signal to the same net name on another sheet. However, it does not explicitly contrast this with alternatives such as sch_place_port, sch_place_net_label, or sch_place_sheet_entry, so an agent must infer when this is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_dblib_componentA
Place one database library (DbLib) part on a schematic sheet.
Acts on a .SchDoc: the active sheet, or sheet_path. The part
is built by Altium from the database row (symbol, footprints and
parameters, with its database link) and dropped at (x, y). NOT
INTERACTIVE: nothing is attached to the cursor and nothing waits
for a click.
THE DbLib MUST BE AVAILABLE TO ALTIUM. Altium finds a DbLib part
by the library's file name among its available libraries, so the
DbLib has to be installed (lib_install_library) or in the
project. The call refuses before touching the sheet when it is
not, or when table is not one the DbLib declares.
database_linked reads the placed part's DatabaseTableName
back: True means the part carries its database link, False that
Altium built it without one. lib_reference is the symbol it
used.
Do not draw a schematic part by part with this. A sheet comes from a DesignPlan through design_execute_plan; this is for adding a part a person picked from their company library.
Args:
library_path: Full path of the .DbLib file.
table: A table the DbLib declares.
key: The row's key value (key in a lib_dblib_search
result).
x, y: Location in mils.
rotation: 0, 90, 180 or 270.
designator: Optional designator to stamp on the part.
sheet_path: Optional .SchDoc path; default the active sheet.
part_id: Which part of a multi-part component to place, from
1 (A). Left out, Altium's default part is placed.
Returns:
{"placed", "library_path", "table", "key", "lib_reference",
"database_table", "database_linked", "x", "y", "rotation",
"part_id", "part_count", "part_id_applied", "designator"}.
part_id is read back off the placed part; a part_id
above part_count is not applied and
part_id_applied says so.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| key | Yes | ||
| table | Yes | ||
| part_id | No | ||
| rotation | No | ||
| designator | No | ||
| sheet_path | No | ||
| library_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares the mutation (part built by Altium and dropped at x/y), the non-interactive behavior, and a hard precondition with a refusal path ("The call refuses before touching the sheet"). It also explains what database_linked and lib_reference read back. It stops short of stating undo/persistence semantics or what happens to the current selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then prerequisites, then the anti-pattern, then args/returns — a sensible reading order with no filler sentences. It runs long, and some of the Args/Returns text restates what the schema already lists, which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, 5-required mutating tool with no annotations, it covers purpose, prerequisites, failure modes, and even return-field semantics (including the part_id above part_count edge case) despite an output schema existing. An agent has everything needed to call it correctly or know why it will be refused.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for all nine parameters: it clarifies that table must be one the DbLib declares, that key is the value from a lib_dblib_search result, that x/y are in mils, that rotation is limited to 0/90/180/270, and that part_id is 1-based (A) with a default when omitted. This meaningfully exceeds the bare titles in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Place one database library (DbLib) part on a schematic sheet") and immediately narrows scope to .SchDoc targets. It explicitly separates itself from both the non-DbLib placement route and from design_execute_plan, so an agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not ("Do not draw a schematic part by part with this... this is for adding a part a person picked from their company library") and names the alternative (design_execute_plan). What's missing is differentiation from the closest siblings in the catalog, sch_place_components and sch_place_vault_components, which an agent could equally reach for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_harness_connectorA
Place a harness connector on the active schematic sheet.
Harness connectors group a set of wires/buses into a named signal bundle, letting cross-sheet connections be drawn as a single line instead of a bus.
Args: x, y: Bottom-left corner in mils. width, height: Connector rectangle size in mils. harness_type: Named harness type (optional).
Returns: Dict with success, x, y, width, height, harness_type.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| width | No | ||
| height | No | ||
| harness_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "Place" implies a document mutation, and the description does say the return dict includes success/geometry fields, but it omits whether an undo checkpoint is created, what happens if no sheet is active, or whether existing objects are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, followed by a compact conceptual note, then Args and Returns blocks. Every line carries signal and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity placement primitive with an output schema already documenting the return shape, the description covers action, geometry semantics, and optionality adequately. The remaining gap is preconditions (active document/sheet required) and routing to alternative connector tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it assigns units (mils) to x/y/width/height, explains what the geometry represents (bottom-left corner, rectangle size), and marks harness_type as optional. It does not mention the non-obvious defaults of 500/800 mils for width/height.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Place a harness connector on the active schematic sheet") and adds a conceptual explanation of what harness connectors do. It does not, however, distinguish itself from close siblings such as sch_place_cross_sheet_connector, sch_place_bus, or sch_place_port.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: placement happens on "the active schematic sheet," so an agent can infer an active document is required. There is no explicit guidance on when to choose this over sch_place_cross_sheet_connector or a plain bus, and no stated prerequisites or failure conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_imageA
Place an image/logo on the active schematic.
Args: image_path: Full path to the image file (BMP, JPG, PNG, etc.) x: X coordinate in mils (bottom-left corner) y: Y coordinate in mils (bottom-left corner) width: Image width in mils (default 500) height: Image height in mils (default 500)
Returns: Dictionary confirming placement with path and dimensions
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| width | No | ||
| height | No | ||
| image_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does supply real behavioral detail: supported image formats, units in mils, bottom-left anchoring, and defaults for width/height, which prevents a common coordinate mistake. It does not say whether the image is embedded or linked (relevant given the audit_find_non_embedded_images sibling), whether the operation is undoable, or what happens if no schematic is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence states the action and target up front, and the Args/Returns block is scannable with no filler. The Google-style scaffolding is slightly ceremonial, but every line carries information an agent needs to call the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 all parameters are covered. However, for a mutation tool with zero annotations, the description omits the document-state prerequisite and the embedding/undo behavior, leaving behavioral gaps that structured fields do not fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates by documenting all five parameters: image_path with accepted formats, x/y with units and anchor corner, and width/height with units and defaults. Only minor gaps remain (valid coordinate ranges, whether non-integer or out-of-sheet coordinates are clamped).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Place an image/logo on the active schematic" is a specific verb plus resource and scopes it to the active document, which distinguishes it from library or PCB-level placement siblings. It stops short of naming how it differs from other sch_place_* insertion tools, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase "active schematic" — the agent can infer the tool acts on the currently open schematic, but there is no statement of prerequisites (must a document be open?), no exclusions, and no pointer to alternatives such as obj_create or sch_place_* variants for other object types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_junctionA
Place a MANUAL junction at coordinates on the active schematic.
A T NEEDS NONE. Altium draws an automatic junction wherever a wire ends on another wire or three wire ends meet, blue, exactly as interactive wiring leaves it, and it does so for wires this server places too. The object this tool creates is a manual junction: drawn dark red with a lock marker, and placed on a T it just sits on top of the blue one.
Use it only where two wires CROSS and must connect. A plain crossing is not a connection in Altium, and a manual junction is what makes it one.
Args: x: X coordinate in mils y: Y coordinate in mils
Returns: Dictionary confirming placement with coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses visual behavior (dark red with lock marker), the redundant-on-T consequence ('just sits on top of the blue one'), and that the tool operates on the 'active schematic'. It stops short of stating prerequisites such as what happens when no schematic document is active or whether the placement is undoable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the exclusion rule, then the inclusion rule — a logical order. The middle paragraph is slightly long (color and lock-marker detail could be trimmed) and the all-caps 'A T NEEDS NONE' is emphatic rather than efficient, but every sentence carries real differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief 'Returns' line is a bonus rather than a necessity, and both parameters are covered with units. What is missing for a no-annotation mutation tool is failure/precondition behavior (no active document, off-grid coordinates). Otherwise an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — x and y have only integer titles — but the description compensates by supplying the unit ('X coordinate in mils', 'Y coordinate in mils'), which is the critical missing semantic. It does not clarify absolute-vs-relative placement or grid snapping, so it falls short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource — 'Place a MANUAL junction at coordinates on the active schematic' — and the emphasis on MANUAL immediately separates it from the automatic junctions Altium creates. The agent can distinguish this tool from sibling schematic placement tools (sch_place_wires, sch_place_bus_entry) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not guidance: 'A T NEEDS NONE' followed by an explanation that Altium auto-draws junctions on T's, including for wires this server places. Then explicit when: 'Use it only where two wires CROSS and must connect.' Both the positive and negative conditions are stated with the reason behind them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_lineA
Place a decorative line on the active schematic.
This is a graphic line, not a signal wire. Use sch_place_wires
for electrical connections. Use this for hand-drawn borders,
arrows, diagram overlays.
Args: x1, y1, x2, y2: Endpoints in mils line_width: 1 (small), 2 (medium), 3 (large)
Returns: Dictionary confirming line placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| line_width | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the operation targets the active schematic and that the drawn object is non-electrical (so it won't affect connectivity), but says nothing about undoability, grid snapping, layer assignment, or prerequisites such as an open schematic document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the key distinction, followed by usage, args, and return. Every sentence either defines scope or documents a parameter; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, disambiguation, and all five parameters. An output schema exists, so the 'Returns' line is slightly redundant rather than necessary. Minor gaps remain around layer/color placement and document-state prerequisites, but the definition is sufficient to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema provides no enums, so the description supplies all the meaning: endpoints are in mils, and line_width is mapped to 1/2/3 = small/medium/large, which is otherwise undiscoverable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Place a decorative line on the active schematic') and immediately disambiguates from the nearest sibling: 'This is a graphic line, not a signal wire. Use `sch_place_wires` for electrical connections.' An agent can select this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative (sch_place_wires) and the condition that selects it (electrical connections), then lists intended uses (borders, arrows, diagram overlays). Both when-to-use and when-not-to-use are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_net_labelB
Place a net label at coordinates on the active schematic.
Args: text: Net name for the label (e.g., "VCC", "GND", "SDA") x: X coordinate in mils y: Y coordinate in mils orientation: Label rotation (0=0deg, 1=90deg, 2=180deg, 3=270deg)
Returns: Dictionary confirming placement
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| text | Yes | ||
| orientation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It identifies this as a placement mutation and says it returns a confirmation dictionary, but omits side effects, duplicate-label behavior, active-document preconditions, and whether invalid net names or coordinates are rejected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core action, then uses compact Args and Returns sections with no wasted text. Each line contributes directly to understanding how to invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple schematic placement tool with an output schema, the parameter and return information is mostly sufficient. However, the lack of annotations means the description should do more to explain usage boundaries and mutation side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all four parameters are documented with meaning, coordinate units in mils, and a clear 0-3 orientation mapping. It could improve by stating constraints such as allowed integer ranges or invalid-value behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: place a net label on the active schematic. It clearly identifies the object type, but does not explicitly distinguish it from related schematic placement siblings such as sch_place_port or sch_place_power_port.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by naming the active schematic, but gives no explicit when-to-use guidance, exclusions, or alternatives. There is no indication of when an agent should choose a net label instead of a power port, port, or other schematic label tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_no_ercA
Place a No-ERC marker at coordinates to suppress specific ERC violations.
Use this after running ERC to suppress known-good violations at specific pin or wire locations.
Args: x: X coordinate in mils y: Y coordinate in mils
Returns: Dictionary confirming placement with coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the key behavioral consequence — that the marker persists and suppresses ERC results — plus the coordinate unit. However, it says nothing about whether the marker is visible/removable, whether suppression is permanent or scoped to a violation type, or what permissions/state are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its purpose, followed by a tight usage sentence and terse Args/Returns blocks. The Returns line is somewhat redundant given an output schema exists, but overall there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return description is not strictly needed. For a two-parameter mutation on a schematic, however, the definition omits the coordinate frame, the marker's persistence/removal story, and how it maps to a specific violation — gaps an agent would hit when placing more than a trivial marker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (only bare "X"/"Y" titles), so the description must compensate. It usefully adds the unit (mils) for both coordinates, which is real value the schema lacks, but leaves the coordinate reference frame (absolute schematic origin vs. relative, sheet vs. canvas) and grid/rounding behavior undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Place a No-ERC marker") plus the effect ("suppress specific ERC violations"), so the agent knows exactly what object is being created and why. It does not explicitly distinguish itself from nearby ERC-related siblings like proj_run_erc, proj_get_erc_violations, or sch_add_directive, which keeps it out of the 5 tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this after running ERC to suppress known-good violations at specific pin or wire locations" gives a clear trigger condition and narrows the scope to pin/wire locations. It stops short of naming alternatives or stating when NOT to use it (e.g., versus sch_add_directive or fixing the design instead of suppressing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_noteA
Place a text-box note on the active schematic.
Useful for design commentary, TODO markers, revision notes. The box sizes itself to (x1,y1)-(x2,y2) and contains the given text.
Args: x1, y1, x2, y2: Note box corners in mils text: Note content
Returns: Dictionary confirming note placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden: it does disclose that the note goes on the 'active schematic' (an implicit prerequisite that a document be open) and that the box auto-sizes to the corner pair. It says nothing about undoability, coordinate constraints, layer, or failure modes, and the 'Returns: Dictionary confirming note placement' line is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by use cases, geometry, and a compact Args block; the structure is conventional and scannable. The 'Returns' line is near-empty and the Args block partly restates required fields, but there is little genuine waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose, and the coordinate semantics plus units are covered. For a five-required-parameter mutating placement tool with zero annotation coverage and zero schema descriptions, however, the description leaves gaps around preconditions, coordinate limits, and what happens to the commented design object afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (properties carry only bare titles like 'X1'), so the Args block does real work: it identifies x1,y1,x2,y2 as box corners, gives the unit as mils, and explains that the box is sized to the (x1,y1)-(x2,y2) span, which is the key geometric contract. It stops short of stating ordering rules (e.g. whether x1 must be less than x2) or bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Place a text-box note on the active schematic'), which is far better than restating the name. It does not, however, distinguish itself from close siblings such as sch_place_text_frame, sch_add_directive, or design_live_note, which an agent could plausibly confuse with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'Useful for design commentary, TODO markers, revision notes' implies when to reach for it, but there is no explicit exclusion or pointer to an alternative when a text frame, directive, or live note is the better choice. Usage is inferable but not routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_portA
Place a port on the active schematic for inter-sheet connectivity.
Args: name: Port name (maps to net name) x: X coordinate in mils y: Y coordinate in mils style: Arrow style, "none", "left", "right", "left_right" io_type: I/O direction, "unspecified", "output", "input", "bidirectional"
Returns: Dictionary confirming placement
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| name | Yes | ||
| style | No | right | |
| io_type | No | bidirectional |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the target ('active schematic'), the consequence that the name maps to a net name, and that a confirmation dictionary is returned, but it says nothing about prerequisites (open/active document), duplicate-name behavior, or side effects on the netlist/ERC. Useful but incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence, followed by a compact Args list and a short Returns line. Every line carries information given the 0% schema coverage, though the stylized docstring formatting is slightly heavier than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, and the parameter documentation is complete enough to invoke the tool correctly, including units and enumerations. The remaining gap is behavioral context (document preconditions, duplicate handling, interaction with sch_set_units), which an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents all five parameters: meaning of name (maps to net name), units for x/y (mils), and the full allowed value sets for style and io_type. This compensates well for the empty schema; only the defaults ('right', 'bidirectional') are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place a port'), names the target surface ('active schematic'), and gives the purpose ('inter-sheet connectivity'). It does not explicitly distinguish itself from close siblings such as sch_place_cross_sheet_connector, sch_place_power_port, or sch_place_sheet_entry, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for inter-sheet connectivity' implies the design situation where this tool applies, and 'on the active schematic' implies the precondition that a schematic document must be active. There is no explicit when-not guidance and no named alternative among the many sch_place_* port/sheet-entry tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_power_portA
Place a power port symbol (VCC, GND, etc.) on the active schematic.
Args: text: Net name for the power port (e.g., "VCC", "GND", "+3V3") x: X coordinate in mils y: Y coordinate in mils style: Symbol style: "circle", circle symbol (default, typical for VCC) "arrow", arrow symbol "bar", bar/line symbol "wave", wave symbol "gnd_power", power ground symbol "gnd_signal", signal ground symbol "gnd_earth", earth ground symbol orientation: which way the glyph points from the connection point: 0=right, 1=up, 2=left, 3=down. Leave at -1 to let the bridge decide by style, which sends the ground glyphs down and everything else up.
PASS IT EXPLICITLY FOR A RAIL DRAWN WITH style="bar".
The style-based default groups "bar" and "wave" with the
grounds, so a VCC bar comes out pointing DOWN and reads
as a ground symbol. orientation=1 is what you want there.Returns: Dictionary confirming placement
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| text | Yes | ||
| style | No | circle | |
| orientation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: it discloses coordinate units (mils), the sentinel default orientation=-1 and the bridge's style-based decision rule, plus a specific failure mode (a "bar" VCC rendering downward and reading as ground). It omits whether the port is placed on the current sheet, snapping behavior, and whether placement is reversible/undoable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by an Args block that is easy to scan. The orientation entry runs long with its all-caps emphasis, but the extra words describe a real rendering trap rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter placement tool with an output schema (so return values need no explanation), the description covers units, defaults, glyph styles, and a known pitfall. Remaining gaps are preconditions and side effects — no mention of requiring an open/active schematic document or of undo behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all parameter meaning, and it does: text (net name), x/y (mils), style with all seven enumerated glyph values plus the default, and orientation with the full 0/1/2/3 direction mapping and the -1 sentinel. This adds substantial meaning that the bare integer/string properties do not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Place a power port symbol") and scopes the target ("on the active schematic"), with examples (VCC, GND, etc.) that make the object type unambiguous. The term "power port" naturally distinguishes it from the sibling placement tools such as sch_place_port, sch_place_net_label, and sch_place_bus_entry without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is entirely parameter-level (when to override style/orientation) rather than tool-level; it never says when to choose this over sch_place_port or sch_place_net_label. The one strong piece of situational advice — pass orientation explicitly for a rail drawn with style="bar" — is genuinely useful but is about parameter choice, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_probeA
Place a probe/measurement marker on the active schematic.
Probes mark nodes for SPICE/simulation output. Attach one to a wire to declare "capture voltage / current at this point" in simulation runs.
Args: x, y: Probe location in mils. net_name: Optional explicit net label text. probe_method: "probed_nets_only" (default) or "all_nets".
Returns: Dict with success, x, y, net_name.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| net_name | No | ||
| probe_method | No | probed_nets_only |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does disclose the return keys and that the probe attaches to the active schematic (implying an open document is required). It does not say what happens when the point is not on a wire, whether probes can be moved or removed, or how probe_method changes collection behavior, which are meaningful gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, followed by a compact context sentence and a well-formed Args block. The Returns block is partly redundant given the tool has an output schema, which is the only wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, and it covers all four parameters plus the simulation purpose. Remaining gaps (probe_method semantics, error conditions, deletion/undo) are modest for a simple placement tool but keep it below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: it supplies the mils unit for x/y (absent from the schema), marks net_name as an optional explicit net label, and names both probe_method values with the default. The main shortfall is that 'probed_nets_only' vs 'all_nets' is never explained in behavioral terms.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource ('Place a probe/measurement marker') on a clearly scoped target ('the active schematic'). The follow-up sentence distinguishes it from a plain net label by explaining that probes declare simulation capture points, so an agent can tell it apart from siblings like sch_place_net_label or sch_place_junction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the operative context ('Attach one to a wire... in simulation runs'), which tells the agent this is a simulation-preparation step rather than a general annotation. It stops short of naming alternatives or exclusions (e.g. when to use sim_attach_primitives or sch_place_net_label instead), so it is clear context without routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_rectangleA
Place a rectangle shape on the active schematic (decorative only).
Args: x1, y1, x2, y2: Opposite corners in mils solid: Fill the rectangle (default False = outline only) line_width: 1 (small), 2 (medium), 3 (large)
Returns: Dictionary confirming rectangle placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| solid | No | ||
| line_width | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It usefully discloses that the shape is non-electrical/destructive-free (decorative only), the coordinate unit (mils), the fill default, and the return shape — but says nothing about which document it mutates, whether it can be undone, what happens on an invalid region, or whether it requires an active sheet.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the action and scope, and the Args block is terse with no filler. The docstring formatting is slightly mechanical but every line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations and 0% schema coverage, the description documents all parameters and units, and an output schema exists so return details are not needed. It falls short only on preconditions (active document/sheet) and mutation side effects, which an agent would want before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (only bare titles), so the description does real work: it explains that x1/y1/x2/y2 are opposite corners in mils, that solid toggles fill vs. outline, and that line_width maps 1/2/3 to small/medium/large. Only minor gaps remain, such as line_width units and whether values outside 1-3 are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (place a rectangle shape on the active schematic) plus a scope qualifier (decorative only) that distinguishes it from functional placement tools like sch_place_line or sch_place_wires. It does not name a sibling outright, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Decorative only" implicitly tells the agent this is for annotation, not electrical geometry, which is meaningful routing guidance. However, there is no explicit when-to-use/when-not language, no mention of prerequisites such as an open schematic or the current sheet, and no named alternative for other shape types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_sheet_entryA
Place a sheet entry port on an existing sheet symbol.
Sheet entries are the ports on a sheet symbol that map to hierarchical ports inside the child sheet. Name must match a port defined in the child .SchDoc for electrical continuity.
Args: sheet_name: SheetName of the target sheet symbol entry_name: Port name (must match a port in the child sheet) io_type: "input" | "output" | "bidirectional" | "unspecified" side: "left" | "right" | "top" | "bottom" distance_from_top: Position along the chosen side in mils
Returns: Dictionary confirming sheet entry placement
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | left | |
| io_type | No | unspecified | |
| entry_name | Yes | ||
| sheet_name | Yes | ||
| distance_from_top | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the key domain rule (name must match a child port for continuity) plus that the call returns a confirmation dictionary. It omits failure behavior on name mismatch, whether the active document must be the schematic, and whether the operation is undoable — meaningful gaps for a document-mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, followed by a compact domain gloss and a conventional Args/Returns block. The child-port matching rule is repeated in both the prose and the entry_name arg line — minor redundancy, otherwise no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five parameters are all described, an output schema exists so return values need no elaboration, and the domain prerequisite is covered. What is missing for a mutation tool is the failure/validation story (what happens if the port doesn't exist) and any indication of required document state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and no enums are declared in the schema, yet the description supplies the allowed values for io_type ('input' | 'output' | 'bidirectional' | 'unspecified'), for side ('left' | 'right' | 'top' | 'bottom'), and gives units for distance_from_top (mils). It also clarifies the cross-reference requirement for entry_name. This is fully additive over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Place a sheet entry port on an existing sheet symbol'), and the following sentence defines what a sheet entry is and ties it to the parent sheet symbol — which implicitly separates it from sch_place_sheet_symbol (creates the symbol) and sch_place_port (child-sheet side). An agent can classify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Preconditions are stated explicitly: the target must be an existing sheet symbol, and entry_name must match a port defined in the child .SchDoc or electrical continuity is lost. That is a real when-to-use constraint. It stops short of naming alternatives or stating what to do when no matching port exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_sheet_symbolA
Place a sheet symbol linking to a child schematic document.
Used for hierarchical designs, the parent sheet has one sheet symbol per child .SchDoc in the project. The sheet_file_name must exactly match a .SchDoc that's a project member. Without that match the sheet symbol is dangling.
After placing, use sch_place_sheet_entry to add sheet entries
corresponding to the child sheet's ports.
Args: x1, y1, x2, y2: Sheet symbol box corners in mils sheet_file_name: Child SchDoc filename (e.g. "PSU.SchDoc") sheet_name: Display label (default: file name without extension)
Returns: Dictionary confirming sheet symbol placement
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| sheet_name | No | ||
| sheet_file_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden, and it discloses the critical dangling-symbol consequence if `sheet_file_name` does not match a project member. It also states the required follow-up workflow with `sch_place_sheet_entry`, though it does not cover active-document prerequisites or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and key constraint, then provides structured parameter and return notes. Every sentence adds useful information for correct invocation, with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For this hierarchical schematic placement tool, the description covers the required project-member constraint, coordinate semantics, optional display label behavior, follow-up workflow, and return confirmation. Since an output schema exists, it need not expand further on return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description documents all six parameters. It explains coordinate units in mils, gives an example filename for `sheet_file_name`, and states the default behavior for `sheet_name`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: placing a sheet symbol linking to a child schematic document. It also distinguishes this operation from the related sibling `sch_place_sheet_entry`, making it clear which tool handles sheet symbols versus sheet entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says this is used for hierarchical designs and that the parent sheet needs one sheet symbol per child .SchDoc. It names the follow-up tool `sch_place_sheet_entry` and gives the key selection condition: `sheet_file_name` must match a project member.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_text_frameA
Place a multi-line text frame (note block) on the active sheet.
A text frame is a bordered rectangle that word-wraps a block of
text. Use \n in text for explicit line breaks.
Args: x1, y1, x2, y2: The two rectangle corners in mils. text: Frame contents (use \n for line breaks). align: Horizontal alignment "left", "center", or "right".
Returns: Dict confirming placement and the frame corners.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| text | Yes | ||
| align | No | left |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It states that the tool places text on the active sheet and returns a confirmation dict, but it does not discuss permissions, reversibility, interaction with existing frames, or other side effects of this mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then uses compact Args and Returns sections with no filler. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, no annotations, and a 0% schema description coverage; the description fills the parameter documentation gap and even explains the return value. It is complete enough for correct invocation, though it still lacks guidance on selecting this tool over sibling placement tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents every parameter: x1/y1/x2/y2 as rectangle corners in mils, text as frame contents with explicit line-break support, and align with valid values 'left', 'center', and 'right'. This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Place a multi-line text frame (note block) on the active sheet.' It also explains what a text frame is, which helps distinguish it from a generic rectangle, but it does not explicitly differentiate it from the sibling sch_place_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining the text frame as a bordered, word-wrapping note block, but it never states when to use this tool instead of sch_place_note, sch_place_rectangle, or other placement siblings. No explicit alternatives or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_vault_componentsA
Place MANY managed (Workspace) components in ONE call.
sch_place_components for parts that live in an Altium
Workspace rather than a library file. Such a part has no library
path; it is placed by its Design Item ID and stays linked to its
Workspace item. The hand-drawing rule of sch_place_components
applies here too: four or more parts onto a sheet with two or
fewer is refused unless allow_manual_layout=True.
A part number is not looked up here, so bring the Design Item ID.
lib_get_vault_component checks one without placing it.
Args:
placements: List of dicts, each with "design_item_id"
(required), x and y in mils, and optionally
designator and rotation (0, 90, 180 or 270).
vault: The Workspace name, for the whole batch. Usually left
out: it is read off managed parts already on an open
sheet of the design, where Altium wrote it. When no open
sheet has one, the call is refused and says what to do.
Ask the user for the name rather than making one up.
document_path: Absolute path of the .SchDoc to place onto. It
is focused first; without it the active sheet is used,
and a sheet just created is not active yet.
lib_identifier_kind: The identifier kind to load by, 4
(VaultName) when left out. lib_get_vault_component
reports the kind that loaded.
allow_manual_layout: Place onto a near-empty sheet anyway.
Returns:
placed, linked, failed, total, vault,
lib_identifier_kind, loader_callable, note and one
items entry per placement. linked counts the parts
that read back a VaultGUID and ItemGUID, the link the file
saves; a part placed but not linked is a plain copy of the
symbol (reason PLACED_WITHOUT_LINK). NOT_FOUND_IN_VAULT
means that ID did not load; LOAD_RAISED means this Altium
cannot load managed parts at all.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | ||
| placements | Yes | ||
| document_path | No | ||
| allow_manual_layout | No | ||
| lib_identifier_kind | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it explains the manual-layout refusal rule, how `vault` is derived and what happens when it cannot be (call refused with guidance), that `document_path` is focused first and a just-created sheet is not active yet, and the difference between a linked placement and a plain symbol copy. Failure modes PLACED_WITHOUT_LINK, NOT_FOUND_IN_VAULT and LOAD_RAISED give the agent diagnostic semantics it could not infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key distinction before any detail, and every section (Args, Returns) is scannable. The Returns paragraph is somewhat long and partly overlaps the output schema, though the error-code interpretation earns its place; a little could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter batch-mutation tool with 0% schema coverage, no annotations and an output schema, this covers everything an agent needs: what to supply, where it lands, the batch-size rule, vault resolution and fallback, and how to interpret partial failure. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: it documents the required shape of each `placements` dict (design_item_id required; x/y in mils; optional designator and rotation restricted to 0/90/180/270), the default of `lib_identifier_kind` (4/VaultName) and what `lib_get_vault_component` reports, and the meaning and default of `allow_manual_layout`. That is meaningfully more than the bare type declarations in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Place MANY managed (Workspace) components in ONE call") and immediately scopes it against `sch_place_components` for library-file parts, plus notes these parts have no library path and are placed by Design Item ID. This is unambiguous against the nearest siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use `sch_place_components` for parts that live in a library file, `lib_get_vault_component` to check an ID without placing it, and this tool for Workspace parts in bulk. It also names a hard precondition (four-plus parts onto a sheet with two or fewer is refused unless `allow_manual_layout=True`) and tells the agent to ask the user for a vault name rather than inventing one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_place_wiresA
Place MANY wire segments on the active schematic in ONE call.
NOT THE WAY TO WIRE A DESIGN. Routing a netlist segment by segment means choosing every corner yourself, and the result reads like nothing a person would draw. design_execute_plan routes the whole sheet from a DesignPlan through the layout engine, deciding wire-versus-label per net and keeping wires off other nets' pins. Use THIS tool for a few segments on a sheet that already exists.
PREFER THIS over placing wires one segment at a time (there is no singular variant). Wiring up a netlist is inherently N pairs of endpoints; the bulk version is 10-100x faster in wall time because the whole batch shares one PreProcess/PostProcess and one redraw.
Args: wires: List of wire dicts, each with x1, y1, x2, y2 in mils.
Example, a 3-segment L-shaped bus routing: place_wires(wires=[ {"x1": 100, "y1": 200, "x2": 300, "y2": 200}, {"x1": 300, "y1": 200, "x2": 300, "y2": 400}, {"x1": 300, "y1": 400, "x2": 600, "y2": 400}, ])
Returns: Dict with placed, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| wires | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does well: it discloses that the target is the active schematic, that this is an additive write, and that results are partial-prone (placed/failed/total counts), plus why batching is faster (shared PreProcess/PostProcess and redraw). It omits reversibility/undo, grid-snapping behavior, and what conditions cause a segment to land in 'failed' — reasonable gaps, but with zero annotation coverage they are real.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: the one-line summary, the redirect to design_execute_plan, and the args come before the example. There is mild redundancy between 'NOT THE WAY TO WIRE A DESIGN', 'PREFER THIS over placing wires one segment at a time', and the '10-100x faster' justification, which restate the same point three ways.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still names the return shape (placed/failed/total), which is helpful for a batch tool where partial failure matters. Combined with the named alternative, the unit-bearing args, and a worked example, an agent has enough to call it correctly; only grid/undo semantics are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema itself is untyped (items are bare objects with integer additionalProperties), so the description must compensate — and it does, naming the keys x1, y1, x2, y2, giving the unit (mils), and providing a concrete 3-segment example. It stops short of saying whether extra keys are rejected, whether zero-length segments are legal, or ordering constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus a distinguishing scope ('Place MANY wire segments on the active schematic in ONE call'). It explicitly separates itself from design_execute_plan and notes there is no singular variant, so an agent can pick it out 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not ('NOT THE WAY TO WIRE A DESIGN... design_execute_plan routes the whole sheet') and when ('use THIS tool for a few segments on a sheet that already exists'), naming the alternative tool. The 'PREFER THIS over placing wires one segment at a time' line removes any remaining ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_render_svgA
Render the active SchDoc to an SVG file (in-house renderer).
SCOPE: this is a VISUAL artifact for when an image is genuinely
needed (layout/readability review, sharing a picture, a CI
thumbnail). It is NOT an input to a design review. NEVER judge
connectivity, part values, ratings, or pin functions from this
render -- a wire that looks joined may not share a net, and a
net can be correct while the drawing looks messy. Connectivity
and part facts come from the compiled netlist + part data
(proj_get_nets, proj_get_connectivity_many, obj_crossref_net,
proj_get_unconnected_pins, proj_get_erc_violations,
design_review_snapshot), never from a picture.
Pulls every component, pin, wire, junction, net label, port and
power port from the active schematic via the bridge, then emits
a self-contained SVG with data-designator, data-net,
data-pin attributes on every meaningful group so a downstream
consumer (the web dashboard, an LLM tool, a CI check) can hook
interaction without re-parsing.
v1 draws components as labelled bounding-box bodies with pin stubs from the body to the electrical end. Full symbol-internal primitives (rectangles / lines / arcs inside each symbol) are deferred to v2 -- the v1 output is recognisable and ready for interactive overlay but does not yet draw the actual symbol art.
Args:
output_path: Where to write the SVG. Defaults to the
transient <workspace>/renders/ dir (kept out of the
workspace root so renders don't pile up in your folder).
margin_mils: Padding around the geometry bbox in mils
(default 200).
flip_y: When True (default) flip the Y axis so the output
reads in Altium's conventional bottom-left-origin space
rather than SVG's top-left-origin.
Returns:
Dict with ok, svg_path, doc, counts
(one entry per primitive type).
| Name | Required | Description | Default |
|---|---|---|---|
| flip_y | No | ||
| margin_mils | No | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the extraction path (bridge pull of components, pins, wires, junctions, net labels, ports, power ports), the emitted structure (self-contained SVG with data-designator/data-net/data-pin attributes for downstream consumers), and an honest v1 limitation (bounding-box bodies with pin stubs; symbol-internal primitives deferred to v2). It also explains the default output location is a transient renders dir kept out of the workspace root.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose first, then SCOPE, then behavior, then Args/Returns. The connectivity warning is repeated across two paragraphs ('NEVER judge connectivity...' and 'Connectivity and part facts come from...'), which is slightly redundant, but every remaining sentence adds a distinct fact about output structure or v1 limits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a render/export tool with an output schema, the definition covers what an agent still needs: what gets drawn in v1, what does not, where the file lands, and which tools to consult instead for electrical facts. The Returns block is somewhat duplicative of the output schema but not harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for all three parameters: output_path with its default transient directory and the rationale, margin_mils as padding around the geometry bbox in mils with default 200, and flip_y with the coordinate-space reason it defaults to True. No parameter is left to guesswork.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+target format: 'Render the active SchDoc to an SVG file (in-house renderer).' It immediately distinguishes itself from pcb_render_svg and the generic image/PDF exporters by naming the source document type and the in-house renderer, and the SCOPE paragraph further pins down that the output is a visual artifact, not a data source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The SCOPE section gives an explicit when-to-use list (layout/readability review, sharing a picture, CI thumbnail) and an explicit when-NOT-to-use rule ('NEVER judge connectivity, part values, ratings, or pin functions from this render'), then names six concrete alternative tools for the excluded use cases. This is exactly the routing information an agent needs to avoid misusing a picture as design truth.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_replicate_componentA
Copy a placed schematic part and share the master's UniqueId.
ECO groups multi-part packages (quad comparators, dual op-amps) only when every unit has the same UniqueId. Writing UniqueId after the copy is already on the sheet remints a new id if that value is already present. This path stamps UniqueId on the replica before AddSchObject, which is the share that sticks.
Finds the first instance whose designator matches, Replicates it, optionally switches CurrentPartID, optionally moves it, and keeps the master's UniqueId.
Args: designator: Source instance to copy (e.g. "U8"). part_id: 1-based CurrentPartID for the copy. 0 = keep source. x, y: Placement in mils. Omit both to leave the replica where Replicate dropped it. new_designator: Designator for the copy. Empty keeps the source designator (required for multi-part packing).
Returns:
Dict with success, source/copy UniqueIds, part_id, and
shared (true when the copy kept the master's UniqueId).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| part_id | No | ||
| designator | Yes | ||
| new_designator | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the mutation, the first-match designator lookup, the optional part-id switch and move, and the UniqueId-sharing side effect. Gaps remain around required document state (active schematic) and failure behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the Args block is tight. The ECO/UniqueId rationale paragraph is longer than strictly necessary but explains a genuinely non-obvious mechanism, so it mostly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, all five parameters, the multi-part packing constraint, and even the return shape despite an output schema already existing. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: designator gets an example ("U8"), part_id is clarified as 1-based with 0 meaning keep source, x/y are in mils and must be omitted together, and new_designator empty keeps the source designator with the multi-part rationale. Every parameter gains meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Copy a placed schematic part") plus the distinguishing behavior ("share the master's UniqueId"), which separates it from siblings like obj_copy, sch_place_components and sch_set_component_unique_id. An agent can tell what it does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage rationale: this path is the one to use for multi-part packing because it stamps UniqueId before AddSchObject rather than after. It explains the condition that selects this approach, though it never explicitly names an alternative sibling to use instead for other cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_set_component_part_idA
Switch the active sub-part on a multi-part schematic component.
Multi-gate parts like quad op-amps expose one sub-part per gate (U1A, U1B, U1C, U1D). CurrentPartID selects which one this symbol instance represents. IDs are 1-based.
A DESIGNATOR IS NOT UNIQUE HERE. Every sub-part of a multi-part device carries the same one, so "U13" can name three symbols on the sheet. When it names more than one and no location is given this REFUSES, and returns the candidates with their locations, current part ids and unique ids. It used to write whichever the iterator reached first and report success naming only the designator, so the caller could not tell which symbol changed.
Location is the discriminator because the alternatives do not work: two symbols can sit on the same part, and sub-parts of one physical device are supposed to SHARE a unique id.
Args: designator: Component reference (e.g., "U1"). part_id: Sub-part index, 1-based (1=A, 2=B, ...). A value above PartCount is accepted by Altium and does not take, so the result is read back and a mismatch is reported. location_x: Symbol X in mils, to choose one of several. location_y: Symbol Y in mils, to choose one of several.
Returns:
Dict with success, designator, part_id, the location written
and how many symbols carried the designator. On ambiguity,
an AMBIGUOUS_DESIGNATOR error carrying candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| part_id | Yes | ||
| designator | Yes | ||
| location_x | No | ||
| location_y | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does so thoroughly: it is a mutation tool, it refuses on ambiguous designators instead of silently choosing, it returns candidates with locations/part ids/unique ids, it reads back part_id after writing to detect non-accepted values, and it reports how many symbols shared the designator.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core action, then ambiguity rules, then parameter details, so an agent can extract the key behavior quickly. It is somewhat lengthy due to the historical implementation note about old behavior, which is informative but could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no annotations and 0% schema description coverage, the description provides complete operational context, including return shape and ambiguity error behavior. The output schema exists, but the description still helpfully summarizes the return values and candidates payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains designator as a component reference with example 'U1', part_id as a 1-based sub-part index with Altium behavior above PartCount, and location_x/location_y as mils coordinates used to disambiguate among multiple symbols.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: 'Switch the active sub-part on a multi-part schematic component.' It immediately distinguishes multi-gate parts and explains that CurrentPartID selects the represented sub-part, so the agent knows exactly what this tool changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context for multi-gate parts like quad op-amps, warns that designators are not unique across sub-parts, and describes the ambiguity path and refusal behavior. It also explains why location_x and location_y are the discriminators instead of designator or unique id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_set_components_parametersA
Bulk-update parameters on PLACED schematic components.
Single IPC call wraps N component updates inside one
PreProcess/PostProcess undo group. Avoids the 10-100x slowdown
of looping the singular variant. The canonical follow-up tool
after audits that flag parameter-level bugs --
audit_find_visible_supplier_pn,
audit_find_placeholder_values,
audit_find_mpn_inconsistencies -- recommend it.
Each stamp targets one component by designator and sets one or more parameters. Special keys allowed:
Value,Comment,Manufacturer,MPN,Footprint,Description,HelpURL, etc.Custom parameters: any key name. Unknown parameters are CREATED if they don't already exist on the component.
Args:
stamps: List of dicts. Each dict must include designator
and one or more parameter key/value pairs. Example:
[{"designator": "R1", "Value": "10k", "Manufacturer": "Yageo", "MPN": "RC0603FR-0710KL"}, {"designator": "C5", "Value": "100nF"}]
sheet_path: Optional explicit SchDoc path. Empty uses the
currently-focused schematic.
Returns:
Dict with {updated, failed, total}. updated is the
count of components whose parameters were touched;
failed is the count of stamps that couldn't be applied
(designator not found, parameter not settable, etc).
A Footprint key repoints the part's footprint model;
footprints_applied counts the ones that read back the
new name and footprints_not_applied lists designators
whose part has no footprint model or did not take it.
| Name | Required | Description | Default |
|---|---|---|---|
| stamps | Yes | ||
| sheet_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load, and it does well: single IPC call, one PreProcess/PostProcess undo group, unknown parameters are CREATED, and a Footprint key repoints the footprint model with read-back verification. It stops short of stating permission requirements or whether partial failures leave the document in a half-updated state, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the sibling-routing rule; the Args/Returns blocks earn their space given 0% schema coverage. It is slightly long with some conversational padding ('recommend it', 'etc.'), but nothing critical is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotations, the definition covers return shape (updated/failed/total plus footprint counters), creation semantics, and failure counting. An output schema exists so return values are doubly covered; remaining gaps (atomicity on partial failure, auth) are minor but real.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully compensates: it explains that stamps is a list of dicts each requiring a designator plus one or more key/value pairs, gives a concrete JSON example, lists special keys (Value, Comment, Manufacturer, MPN, Footprint, Description, HelpURL), and describes custom-key creation behavior. sheet_path's default/empty behavior is also spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Bulk-update parameters on PLACED schematic components') and immediately distinguishes itself from the singular variant it wraps. An agent can tell it apart from library-side batch tools like lib_batch_set_params because the target (placed schematic components) is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (canonical follow-up after parameter audits), names the three audit tools that flag such bugs, and explains why not to loop the singular variant (10-100x slowdown). This is the exact when/why/alternative routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_set_component_unique_idA
Set UniqueId on every placed symbol with this designator.
ECO treats sub-parts of a multi-gate symbol (quad comparator, dual op-amp) as one physical footprint only when they share UniqueId. Four copies of part 1 with four UniqueIds become four packages.
EVERY MATCHING SYMBOL IS STAMPED, not the first. Sharing the id is the whole point of the property, so writing one of three and reporting success left the other two pointing at packages of their own, which is the exact condition this repairs.
Altium mints UniqueIds itself and may keep its own. Each write is read back and COMPARED; if any symbol kept its old id the call fails and names which ones, because a partial stamp still leaves the device split.
Args: designator: Component reference as drawn (e.g. "U_COMP2B"). unique_id: Target UniqueId, usually copied from the A unit.
Returns: Dict with success, designator, unique_id, symbols_written, symbols_found, and per-symbol locations with the id each reads back.
| Name | Required | Description | Default |
|---|---|---|---|
| unique_id | Yes | ||
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries behavioral disclosure: every matching symbol is written, each write is read back and compared, partial success fails the call, and Altium may retain its own UniqueIds. This is unusually thorough for a mutation tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and the rationale, and every paragraph adds useful behavioral detail. It is somewhat longer than strictly necessary, but the repeated capitalization and structured Args/Returns sections keep it navigable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with an existing output schema, the description covers purpose, usage context, write semantics, verification behavior, failure conditions, and parameter meaning. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate, and it does: designator is described as the reference as drawn with an example, and unique_id is described as the target copy typically taken from the A unit. Both required parameters are given clear semantics and practical context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: stamp every placed symbol sharing a designator with a target UniqueId. It clearly distinguishes this repair operation from related schematic tools by explaining the multi-gate symbol consolidation semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains exactly when to use this tool — when sub-parts of a multi-gate symbol need to share one physical footprint — and why partial stamping is insufficient. The use case is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_set_net_tieA
Mark a placed schematic component as a net tie.
A net tie shorts the nets that land on its pins for routing while keeping them as separate logical nets (so ERC/DRC treat the join as intentional). Sets the component's ComponentKind. Use on a dedicated net-tie footprint/symbol you have already placed and wired.
Args: designator: Component to convert (e.g. "NT1"). mode: "nobom" (default, hidden from BOM, kept through sync) or "bom" (appears in the BOM).
Returns: {"designator", "component_kind"} or NOT_FOUND.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | nobom | |
| designator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly succeeds: it discloses the semantic effect (shorts nets for routing while keeping logical nets separate so ERC/DRC treat the join as intentional), that it sets ComponentKind, and the behavioral difference between the two modes (BOM visibility and survival through sync). It omits whether the change requires a save/compile or is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then rationale, then Args/Returns blocks. Every sentence adds information, though the parenthetical net-tie explanation is slightly longer than strictly needed for an expert agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations, the description covers purpose, precondition, both parameter values, the ComponentKind effect, and the return shape including NOT_FOUND. Only the persistence/save implications are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: designator is explained with a concrete example ("NT1") and mode's default plus both accepted values and their consequences are spelled out even though the schema has no enum. Minor gap: it doesn't clarify designator-vs-unique-id disambiguation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Mark a placed schematic component as a net tie") and then defines the concept so the agent knows exactly what state change results. No sibling tool performs net-tie conversion, and the description makes that scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition: "Use on a dedicated net-tie footprint/symbol you have already placed and wired." It tells the agent the required prior state but offers no alternatives or when-not-to-use guidance (e.g. how to undo, or what to do if the component isn't wired).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_set_sheet_sizeA
Set the sheet size / template style of the active schematic.
Changes SheetStyle on the current SchDoc. Use a named style
(A-E, A0-A4, Letter, Legal, Tabloid) or "Custom" with explicit
width and height in mils. Give style, orientation or both.
Args: style: Sheet size name, e.g. "A", "A3", "A4", "Letter", "Custom" custom_width: Custom sheet width in mils (only if style="Custom") custom_height: Custom sheet height in mils (only if style="Custom") orientation: "landscape" or "portrait"; empty leaves it as is
Returns: Dictionary confirming the style change
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | ||
| orientation | No | ||
| custom_width | No | ||
| custom_height | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden well: it identifies the mutation target (SheetStyle on the current SchDoc), notes that empty orientation leaves the setting unchanged, and states that it returns a confirming dictionary. It does not discuss permissions, reversibility, or side effects beyond the style change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then uses compact Args/Returns sections. It is slightly repetitive about custom width/height but remains efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the action, all parameter semantics, valid style names, and return confirmation, which is sufficient for a 4-parameter mutation tool. The only gap is deeper mutation-safety context such as permissions or reversibility, but that is a minor omission given the tool's focused scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully documents every parameter: style names, custom width/height in mils with the dependency on style='Custom', and orientation accepted values including the empty-value behavior. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Set the sheet size / template style of the active schematic.' It further specifies that it changes SheetStyle on the current SchDoc, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains how to use the tool: named styles or 'Custom' with explicit width/height, and that style, orientation, or both may be supplied. It does not explicitly name alternatives or when not to use it, though the guidance is strong enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_set_unitsA
Set the unit system for the active schematic.
Calls ISch_Document.SetState_Unit with a TUnit enum value. The
current unit is readable via obj_get_document_info (unit_system field).
Args: unit: one of "mil" , imperial, mils (0.001 in) "inch" , imperial, inches "dxp" , DXP default "auto_imperial" , auto-scaled imperial display "mm" , metric, millimetres "cm" , metric, centimetres "m" , metric, metres "auto_metric" , auto-scaled metric display
Returns: Dictionary confirming the change, with the resulting unit_system ("imperial" or "metric").
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that this calls `ISch_Document.SetState_Unit` and that the response confirms the resulting `unit_system`, but it does not clarify whether the change is purely display-level, whether it persists, or what happens if no schematic is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the enum documentation is structured and useful. The description is slightly longer than strictly necessary because it repeats return information already covered by the output schema, but every section is readable and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter setter with an output schema, the description covers the important input semantics and points to the sibling for reading the current unit. It could be more complete by stating the active-document precondition or the scope of the change, but overall it contains what an agent needs to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage and only declares `unit` as an unconstrained string. The description compensates fully by enumerating every accepted enum value and explaining what each means, including imperial, metric, and auto-scaled options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: set the unit system for the active schematic. It also distinguishes the write operation from the read path by naming `obj_get_document_info` as the way to inspect the current unit, so an agent can tell it apart from the inspection sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by explaining that this tool changes the active schematic's units and that the current value is available through `obj_get_document_info`. It does not explicitly state exclusions or prerequisites such as requiring an open active schematic, which keeps it from a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_stub_pinsA
Draw a short wire stub + net label on every unconnected schematic pin.
Finds floating pins (via the same connectivity check as
proj_get_unconnected_pins), then for each one places a wire extending from
the pin's electrical end outward along its orientation, terminated by a
net label named "_<pin_number>". This makes dangling pins
explicit so ERC reports them as named single-pin nets rather than silent
floats, and gives a labelled anchor to wire up later.
Args: stub_length_mils: Length of each stub wire in mils (default 100) only_designators: If given, only stub pins on these components
Returns: Dictionary with "stubbed" and "failed" counts, plus the pin list that was acted on
| Name | Required | Description | Default |
|---|---|---|---|
| only_designators | No | ||
| stub_length_mils | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does most of it well: it discloses that this places objects (wires + net labels), the exact shape of each addition (wire from pin's electrical end along its orientation, terminated by a '<designator>_<pin_number>' label), and the downstream ERC consequence. It omits operational context that matters for a mutating tool — whether a schematic document must be active, idempotency on re-run, and undo/checkpoint implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool does, followed by rationale, then a conventional Args/Returns block. Every sentence adds information; nothing is redundant with the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a schematic-mutating tool with an output schema, the description covers mechanism, target selection, naming scheme, and the returned 'stubbed'/'failed' counts. The main missing piece is the precondition — which document/sheet must be active — which an agent would still have to discover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: both parameters are explained in the Args block (stub length in mils with default 100, and a designator filter limiting which components are stubbed). Minor gap: the units/format of only_designators entries are implied rather than stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a concrete verb+resource pair ('Draw a short wire stub + net label') and the exact target scope ('every unconnected schematic pin'). It is immediately distinguishable from read-only diagnostics like proj_get_unconnected_pins or audit_find_single_pin_nets because it clearly mutates the schematic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says when to reach for it ('makes dangling pins explicit so ERC reports them as named single-pin nets rather than silent floats') and points at the diagnostic it builds on ('same connectivity check as proj_get_unconnected_pins'). It does not explicitly say when *not* to use it (e.g. read-only inspection instead of mutation), so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sch_toggle_pin_visibilityA
Show or hide pin name / designator labels on schematic symbols.
Targets a single component (by designator) or every component
on the active sheet when designator is empty. Provide
show_name and/or show_designator to set those flags; omit a
flag to leave it unchanged.
Args: designator: Component to target, or "" for all components. show_name: True/False to set pin-name visibility (optional). show_designator: True/False to set pin-designator visibility.
Returns: Dict with success and pins_modified (count).
| Name | Required | Description | Default |
|---|---|---|---|
| show_name | No | ||
| designator | No | ||
| show_designator | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the operation mutates the schematic, that an empty designator triggers a sheet-wide bulk change (a meaningful blast-radius fact), and that omitted flags are left untouched. It omits whether the change is undoable, persisted, or requires a specific edit mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence, then the targeting/flag semantics, then a compact Args/Returns block. The Args block largely restates the prose above it, a small redundancy, but every line still carries actionable meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still names the key field (pins_modified). Combined with full parameter documentation and the bulk-vs-single targeting rule, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema titles are bare, but the description fully compensates: `designator` with "" meaning all components, and both boolean flags documented as tri-state (True/False sets, omitted leaves unchanged). That tri-state semantics is the critical detail the schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb pair (show/hide) and a precise resource (pin name / designator labels on schematic symbols). Scope is further narrowed to schematic symbols, which cleanly separates it from PCB-side siblings such as pcb_set_text_visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the targeting rule (single component via `designator`, or every component on the active sheet when empty) and the set-vs-leave-unchanged convention for the flags. It gives clear operating context but does not name an alternative tool or state preconditions such as needing an active schematic document open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sim_attach_modelA
Attach an external SPICE model file (.mdl / .ckt / .lib) to a component.
Use this after fetching a vendor SPICE model file from the
manufacturer and saving it locally. The model_name parameter
must be the exact .SUBCKT <name> declaration from inside
the file, not the file name.
Args:
designator: Component reference (e.g. "U1").
file_path: Full path to the locally-saved .mdl / .ckt / .lib.
model_name: Subcircuit / model name declared inside the
file. Open the file and look for .SUBCKT <name>
or .MODEL <name>.
primitive: SPICE prefix letter. Default "X" (subcircuit).
Use "D"/"Q"/"M" when the file declares a .MODEL of
that kind instead of a subcircuit.
Returns: Dict with success, designator, file_path, model_name.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| primitive | No | X | |
| designator | Yes | ||
| model_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose real preconditions (the file must already exist locally, model_name must match the .SUBCKT declaration inside the file, primitive selects the SPICE prefix), but it is silent on mutation semantics: whether the file is copied or referenced, whether the component must already exist, what happens on name mismatch, and whether the change is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in one sentence, then the usage precondition, then parameters. The Google-style Args/Returns layout is scannable; the Returns block is mildly redundant given an output schema exists, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation with no annotations, the description covers all parameters, the file-preparation precondition, and the return shape. The remaining gap is sibling disambiguation against sim_attach_primitives and lib_set_model_* tools, and any failure behavior when the declared name is not found.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely and it does: designator is given an example ('U1'), file_path is defined as the full local path, model_name is defined by how to locate it inside the file ('.SUBCKT <name>' / '.MODEL <name>') and explicitly contrasted with the file name, and primitive's default 'X' plus the D/Q/M alternatives are explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Attach an external SPICE model file') and enumerates the accepted file formats (.mdl / .ckt / .lib). An agent knows exactly what the call accomplishes 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering context: 'Use this after fetching a vendor SPICE model file from the manufacturer and saving it locally.' It does not, however, distinguish this from related siblings such as sim_attach_primitives, lib_set_model_name, or lib_set_model_source, so the agent has no routing rule when several model-related tools could apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sim_attach_primitivesA
Attach SPICE primitives to MANY components in ONE call.
PREFER THIS after running sim_get_readiness, the
readiness response typically lists 20-50 passives that all
need the SpicePrefix + Value parameter pair. Attaching them one
at a time would cost one LLM turn per component (there is no
singular variant); this tool does the whole set in one round-trip.
Args: attachments: List of attach dicts, each with: - designator (str, required) - primitive (str, required), R/L/C/V/I/D/Q/M/X - value (str, optional), "10k", "100n", "DC 5", "SIN(0 1 1k)", etc. - spice_model (str, optional), model name for semi/sub-circuit parts - sim_kind (str, optional), "General" / "Subcircuit" / "Model"
Example, attach the 4 passives from a readiness audit: sch_attach_spice_primitives(attachments=[ {"designator": "R1", "primitive": "R", "value": "10k"}, {"designator": "R2", "primitive": "R", "value": "10k"}, {"designator": "C1", "primitive": "C", "value": "100n"}, {"designator": "C2", "primitive": "C", "value": "1u"}, ])
Returns: Dict with attached, failed, total counts.
| Name | Required | Description | Default |
|---|---|---|---|
| attachments | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the load: it discloses batch semantics, the round-trip savings, and that results come back as attached/failed/total, implicitly warning of partial failure. It does not say whether re-attaching overwrites an existing primitive or what permissions are needed, leaving a modest gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the batching rationale, then args, then a worked example. The example is long but justified given the untyped schema; the one blemish is that the example calls the tool `sch_attach_spice_primitives` instead of `sim_attach_primitives`, which could confuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarizes the return shape (attached/failed/total). Combined with full per-key parameter documentation and the readiness-workflow context, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema types the array items only as a string map, so the description must compensate entirely — and it does, enumerating designator/primitive/value/spice_model/sim_kind, giving the primitive letter set R/L/C/V/I/D/Q/M/X, and providing concrete value syntax like "10k" and "SIN(0 1 1k)".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (attach), resource (SPICE primitives), and scope (MANY components in ONE call). The batch nature and the absence of a singular variant make it unambiguous against its schematic/simulation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to PREFER THIS after `sim_get_readiness`, explains the typical 20-50 passive scenario, and states there is no singular variant so per-component calls would waste turns. Clear when-to-use with the alternative ruled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sim_get_readinessA
Audit every component on the active schematic for SPICE readiness.
Use this as step 1 of any simulation workflow. The response classifies each component into one of three buckets:
ready, SpicePrefix already set; nothing to do.needs_primitive, a passive (R/L/C) or source (V/I/D/Q) that just needs SpicePrefix + Value. Pass them all to sim_attach_primitives in one call.needs_file, an IC or active part that requires a manufacturer-supplied .mdl / .ckt / .lib file. Call sim_attach_model after fetching the file from the vendor.
CRITICAL, vendor SPICE models only:
Never fabricate a SPICE model from datasheet reasoning. The
parameters that matter for convergence, bias point, and
small-signal behavior are not in any datasheet summary; a
plausible-looking hand-rolled model produces confidently-wrong
simulation results. The response's _spice_guidance block
makes this rule explicit and gives you per-part search queries.
Returns: Dict with: - ready, ready_count - needs_primitive, needs_primitive_count (each entry has designator, comment, suggested_prefix, suggested_value) - needs_file, needs_file_count (each entry has designator, comment, lib_ref, manufacturer, manufacturer_part) - _spice_guidance (rules + structured search_hints + primitive_hints)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and mostly delivers: it discloses the exact response shape, per-entry fields, the _spice_guidance block, and a strong correctness warning about hand-rolled vendor models. It stops short of stating that the call is read-only and side-effect-free on the schematic, which would complete the behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by a scannable bucket list and a clearly fenced CRITICAL warning. The Returns block is somewhat redundant with the existing output schema, but it is compact and aids at-a-glance planning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, yet the description still summarizes the fields that drive the agent's next action (suggested_prefix, suggested_value, manufacturer_part) and explains the guidance block. For a zero-parameter audit tool feeding a multi-step simulation workflow, nothing an agent needs to proceed is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so there is nothing to document and the baseline applies. The description does not waste space inventing parameter semantics, correctly focusing instead on the output contract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Audit every component on the active schematic for SPICE readiness') and immediately distinguishes itself from downstream siblings by naming sim_attach_primitives and sim_attach_model as the follow-on tools. The three-bucket classification makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this as step 1 of any simulation workflow' and then prescribes the branch for each bucket (pass needs_primitive parts to sim_attach_primitives in one call; call sim_attach_model for needs_file). It even gives a negative constraint: never fabricate SPICE models from datasheet reasoning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sim_get_resultsA
Read a simulation's results: every wave, with sampled points.
Reads the .sdf that sim_run saved (the last one by default). Each wave comes with its unit, point count, min/max/first/last over every point, and up to max_points samples evenly spaced from first to last. An AC wave reports magnitude and phase in degrees against frequency. The sweep variable (time, frequency, the swept source) is marked independent.
Args: results_document: path of a .sdf; empty uses the last sim_run. analysis: one analysis by name ("Transient Analysis", "AC Analysis", "Operating Point", "DC Sweep", ...); empty returns all. waves: wave names to keep, e.g. ["v(out)", "i(v1)"]; empty keeps all. max_points: samples per wave; 0 returns statistics only. all_runs: a document run more than once holds every run; by default only the latest run of each analysis is returned.
Returns: Dict with results_document and analyses: a list of {analysis, waves: [...]}, or an error naming what is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| waves | No | ||
| all_runs | No | ||
| analysis | No | ||
| max_points | No | ||
| results_document | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that this is a read of an existing .sdf, the default-source behavior, sampling behavior ('up to max_points samples evenly spaced'), the statistics-only mode when max_points=0, and that failures return an error naming what is missing. It does not state file-size/performance limits or whether it errors when no prior sim_run exists, leaving a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary sentence, then a paragraph on data shape, then structured Args and Returns blocks. Dense with information and free of filler; the AC-wave and independent-variable notes are non-obvious details worth their length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still sketches the return shape ({analysis, waves: [...]}) and error behavior, and it fully documents five otherwise-undescribed parameters. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all five parameters are explained with meaning and edge-case semantics (empty results_document = last sim_run, empty analysis = all, empty waves = all, max_points=0 = statistics only, all_runs = every run vs latest). Example values are given for wave names and analysis names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Read a simulation's results') and immediately scopes the content ('every wave, with sampled points'). The second paragraph identifies the underlying artifact (.sdf written by sim_run) and the default fallback, which distinguishes it from the sibling sim_run that produces that file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is clear from context: it reads what sim_run saved, with an explicit default ('empty uses the last sim_run') and per-argument conventions for narrowing (analysis by name, waves to keep, all_runs for multi-run documents). It lacks an explicit 'do not use this to run a simulation' exclusion or a named alternative, 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.
sim_runA
Run Altium's mixed-signal simulation of the focused project.
Runs the analyses set up for the project: with sim_setup_analysis, or in Altium's Simulation Dashboard. A run started from a script performs an operating point, DC sweep, transient and AC together (MEASURED: the dashboard's on/off switches are not honoured).
It succeeds only when the run produced its results document (a .sdf, opened in its own tab), and fails with SIM_NOT_RUN when nothing appeared. The results are saved and read back: the reply carries each analysis's waves with min, max, first and last, and sim_get_results gives the traces.
Typical workflow: 1. Activate one of the project's schematic sheets. 2. Use sim_get_readiness + sim_attach_* to make sure every component has a SPICE model. 3. Place probes on measurement nodes with sch_place_probe. 4. Set the analyses with sim_setup_analysis. 5. Call sim_run, then sim_get_results for the traces.
Args: analysis: Free-form label echoed back in the response. Does not drive Altium, the project's setup does.
Returns: Dict with success, ran, results_document (the .sdf path), results_saved, results (per analysis, per wave: unit, points, min, max, first, last; magnitude for an AC wave), analysis and note.
| Name | Required | Description | Default |
|---|---|---|---|
| analysis | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses that script-started runs perform operating point, DC sweep, transient and AC together regardless of dashboard switches, succeeds only when an .sdf results document appears, and fails with SIM_NOT_RUN otherwise. It also explains that results are saved and read back, including which summary values are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical, but the complexity justifies most of the detail. It is front-loaded with purpose and behavior, then structured with workflow, Args, and Returns sections, though a few sentences could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, lack of annotations, and the fact that its behavior depends on external setup, the description is complete enough for correct invocation. It covers prerequisites, success/failure semantics, parameter meaning, workflow, and return shape, even though an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining that the only parameter, analysis, is a free-form label echoed back and does not drive Altium. This prevents an agent from assuming the argument selects the analysis configuration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: running Altium's mixed-signal simulation of the focused project. It clearly distinguishes the tool from setup and retrieval siblings by explaining that it executes the configured analyses and produces the results document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit typical workflow with prerequisites: activate a schematic sheet, verify SPICE readiness, place probes, configure analyses, then call sim_run and sim_get_results. It also names the relevant setup alternatives, sim_setup_analysis and the Simulation Dashboard, so the agent knows where configuration belongs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sim_setup_analysisA
Set the analyses sim_run will use, in the project's .simcfg.
Values are SPICE values: a number in SI units, or a string with a SPICE suffix ("5u", "10n", "1k", "100meg").
Args: transient: {"stop", "step", "start" (default 0), "max_step" (default step)}. ac: {"start", "stop", "points", "sweep": "dec" | "oct" | "lin"}. Points are per decade or octave, or in total for lin. dc: {"source" (a source designator such as "V1", or "Temp"), "start", "stop", "step"}. outputs: expressions to plot in each analysis set here, e.g. ["v(out)", "i(v1)"]. project_path: the project; empty uses the focused one.
WHAT A RUN DOES, MEASURED: a run started from a script performs an operating point, a DC sweep, a transient and an AC analysis together, whatever is switched off in the dashboard. The values set here are what those analyses use. An analysis you do not need still runs on its last settings; sim_get_results(analysis=...) returns just the one you want.
Altium's own settings are saved first, so changes made in the Simulation Dashboard are kept, then the file is changed and reloaded into Altium. A project without a .simcfg gets one.
Returns: Dict with simcfg (the file), set (the keys written), reloaded, and created when the file is new.
| Name | Required | Description | Default |
|---|---|---|---|
| ac | No | ||
| dc | No | ||
| outputs | No | ||
| transient | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole load and does so well: it discloses that a script-started run performs operating point, DC sweep, transient and AC together regardless of the dashboard, that Altium's own settings are saved first and the file is reloaded afterwards, and that a missing .simcfg is created. It also names the mutation target and the exact return keys (simcfg, set, reloaded, created).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary, then value format, args, and run behavior — a sensible order. There is mild redundancy (re-stating that the analyses set here are what the run uses, and a block-caps 'WHAT A RUN DOES, MEASURED' heading) but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with five loosely typed params, no annotations and no documented schema properties, the description covers input semantics, side effects, file creation, reload behavior and return keys. An agent has everything needed to invoke it correctly without opening other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the nested objects have no declared properties, so the description supplies all meaning: SPICE value formats with SI suffixes ('5u', '100meg'), defaults (start=0, max_step=step), the ac sweep enum semantics (points per decade/octave vs total for lin), dc source as a designator or 'Temp', output expressions, and project_path defaulting to the focused project.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+location: sets the analyses that sim_run uses, written into the project's .simcfg. It explicitly names sim_run and later sim_get_results(analysis=...), so an agent can place it in the simulation workflow rather than confusing it with the other sim_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing 'Set the analyses sim_run will use' establishes this as a configuration step that precedes a run, and the note that an unneeded analysis 'still runs on its last settings' with sim_get_results returning just one is useful routing context. It does not spell out an explicit precondition/ordering ('call before sim_run') or when-not to call it, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_catalogA
Discover tools by category / maturity / interaction without loading every schema.
The surface has 350+ tools; loading them all strains a client's context. This meta-tool returns a filtered, classified index so a client can find the right tool first, then rely on its full schema.
Filters (all optional, AND-combined):
category: core, application, project, library, generic,
schematic, pcb, audit, design, simulation, routing, meta,
parts (and kicad on the KiCad backend; the EasyEDA tools
file under the same subject headings as Altium's, so
"pcb" means the same thing on either). "core" holds the
EDA-agnostic main flow (review_design, get_board_info,
list_components, list_nets, run_drc, run_erc) and is the
usual starting point. Call with NO filter to get the live
categories map rather than trusting this list.
maturity: how far a tool can be exercised without Altium.
offline needs no Altium at all; simulator is
bridge-backed but every command it sends is implemented
by the in-repo Altium simulator; live_only sends at
least one command only real Altium answers. Filter on
offline to find what runs with nothing open.
interaction: readonly | silent | modal | partial. modal
tools pop a blocking Altium dialog; partial ones leave
the job incomplete: plan around both.
query: case-insensitive substring over the tool name (and
description when with_description).
with_description: include the one-line summary per tool.
with_schema: include each tool's parameters and required
list. ESSENTIAL under the minimal toolset: no tool schema
is loaded up front there, so calling tool_invoke without
this means guessing argument names. Filter first, schemas
are dropped past a cap so this cannot flood the very
context the minimal toolset exists to protect.
Returns {count, tools:[{name, category, maturity, interaction [, description][, parameters, required]}], categories:{cat: n}}.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| category | No | ||
| maturity | No | ||
| interaction | No | ||
| with_schema | No | ||
| with_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden and does so richly: it discloses the return shape, that filters are AND-combined, that schemas are dropped past a cap (a behavioral safety detail), and what each maturity/interaction value implies operationally (modal pops a blocking dialog, partial leaves jobs incomplete). This is exactly the beyond-schema context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose before the filter breakdown, and the per-filter bullets are well organized. It is somewhat long and the KiCad/EasyEDA parenthetical under category is rambling, but the length is largely justified by six undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists (so return details are technically optional), the description still explains the return shape and, more importantly, the cap-on-schemas behavior and the minimal-toolset interaction that an agent must know to call it correctly. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate fully and does: it defines each filter's semantics and enum values (category list, maturity offline/simulator/live_only, interaction readonly/silent/modal/partial), explains query as case-insensitive substring over name (and description when with_description), and clarifies with_description and with_schema behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Discover tools by category / maturity / interaction' — and frames its role precisely as a meta-tool that avoids loading 350+ schemas. An agent can immediately tell it apart from the concrete sibling tools like tool_invoke or tool_guide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the when-to-use rationale (context strain), the recommended starting point ('core' is the usual starting point), the discovery pattern (filter first, then rely on full schema / tool_invoke), and the special rule for with_schema under the minimal toolset. It even says to call with NO filter to get the live categories map rather than trusting the list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_guideA
How to do something correctly, and what is genuinely impossible.
USE THIS BEFORE CONCLUDING A CAPABILITY IS MISSING. The recorded
failures are not "could not find the tool name", which
tool_catalog already solves. They are aiming a board tool at
a library, and reporting a capability absent when it was
present. Both return a confident wrong answer rather than an
error.
Answers three distinct things, kept apart on purpose: the tool and its prerequisites, the tool you were probably reaching for and why it acts on another document, and the short list of things that are proven impossible with the reason.
An empty result means this guide has nothing on the subject. It
is not evidence that the server cannot do it: fall back to
tool_catalog.
Search here for help when a tool seems missing, when you are not
sure which tool to use, when an operation seems not supported,
or when a call failed because the wrong document was open.
(tool_catalog matches on this description, and searching the
obvious word, help, used to return four other tools and not this
one. The vocabulary of being stuck has to appear here, not only
the vocabulary of the answer.)
Args: task: What you are trying to do, in your own words, e.g. "delete silkscreen from a footprint". Matched on keywords, so a rough phrase is fine. document_kind: Narrow to one of library, board, schematic, project, any. Optional. backend: altium, kicad or easyeda. Optional; omit to see every backend's answer.
Returns:
Dict with recipes (each with use, avoid and a
note), not_possible, and matched.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | ||
| backend | No | ||
| document_kind | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the two real failure modes it targets (wrong document kind, false negative on capability), warns that an empty result is not evidence of absence, explains that `task` is keyword-matched, and names the returned keys (`recipes` with `use`/`avoid`/`note`, `not_possible`, `matched`).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical instruction is front-loaded and the rest is organized by concern. It loses a little to self-referential meta-commentary about how `tool_catalog` matches this description and how the word 'help' used to miss it — useful for maintainers, but it consumes space without telling the calling agent anything actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-optional-param advisory tool with no annotations and an output schema present, everything an agent needs is covered: when to call, when not to trust an empty result, what the three params accept, and what comes back. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (params have only titles and empty defaults), so the description must compensate and does: `task` is free-form natural language matched on keywords with a worked example, `document_kind` enumerates library/board/schematic/project/any, and `backend` enumerates altium/kicad/easyeda with the meaning of omitting it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The definition states a specific role — a troubleshooting/recipes lookup that answers what the right tool and prerequisites are, what the sibling tool you probably wanted is, and what is provably impossible. It also explicitly separates itself from `tool_catalog` (which resolves missing tool names), so an agent can choose correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('USE THIS BEFORE CONCLUDING A CAPABILITY IS MISSING') plus a concrete enumeration of situations: tool seems missing, unsure which tool to use, operation seems unsupported, or a call failed on the wrong document. It also names the fallback (`tool_catalog`) and the condition under which an empty result does not mean impossibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_invokeA
Invoke any registered tool by name: the companion to
tool_catalog.
A client with a limited context can expose only the core tools plus
this pair: discover a tool with tool_catalog, then run it here by
name without ever loading its schema. arguments is the tool's
keyword-argument dict.
GET THE ARGUMENT NAMES FIRST. Under the minimal toolset no schema
is loaded up front, so call
tool_catalog(query="<name>", with_schema=True) and use the
parameters/required it returns. Guessing is a real failure
mode: several tools take names that look obvious but are not
(current_amps, not current_a), and the same tool can differ
between backends.
Returns the tool's own result (JSON-decoded), or {"error": ...}
for an unknown/disallowed name. Note: bypassing the schema means
argument mistakes surface as the target tool's own error, not a
pre-validation message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| arguments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the return contract (the target tool's own JSON-decoded result, or {"error": ...} for unknown/disallowed names) and the important trait that argument mistakes bypass pre-validation and surface as the target tool's raw error. What it omits is any warning that this dispatcher can reach destructive siblings and offers no permission/allowlist detail beyond the phrase 'unknown/disallowed name'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose and the discovery-then-invoke workflow, and every paragraph adds an actionable detail. Slightly redundant: the 'no schema loaded up front' point is made twice (in the intro and again in the GET THE ARGUMENT NAMES paragraph and the closing note).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic dispatcher this is complete: it covers discovery, argument sourcing, error surface, and name-resolution pitfalls. An output schema exists, yet the description still usefully summarizes the return shape and the error shape, leaving nothing an agent needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema titles ('Name', 'Arguments') convey nothing, so the description must compensate — and it does: `name` is the registered tool's name, `arguments` is that tool's keyword-argument dict, sourced from the `parameters`/`required` fields returned by tool_catalog. It does not say that `arguments` may be omitted for zero-argument tools, but the core semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Invoke any registered tool by name') and immediately positions itself relative to its sibling: 'the companion to tool_catalog'. An agent can distinguish dispatching a tool from discovering one 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the two-step workflow (discover via tool_catalog, then run here) and the exact call to make first: `tool_catalog(query="<name>", with_schema=True)`. It also names the failure mode to avoid (guessing argument names) and gives a concrete example of a non-obvious name (current_amps vs current_a), which is far beyond generic 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
480 tool updates
v0.6.1- First observed
app_activate_row - First observed
app_attach - First observed
app_canvas - First observed
app_checkpoint - First observed
app_click_menu - First observed
app_close_document - First observed
app_context - First observed
app_context_menu - First observed
app_create_document - First observed
app_detach - First observed
app_diag_workspace - First observed
app_dialog_tab - First observed
app_drive_dialogs - First observed
app_exit_active_command - First observed
app_expand_tree_node - First observed
app_get_active_document - First observed
app_get_clipboard - First observed
app_get_preferences - First observed
app_get_report - First observed
app_get_status - First observed
app_get_version - First observed
app_invoke_element - First observed
app_list_checkpoints - First observed
app_list_documents - First observed
app_list_open_dialogs - First observed
app_list_panels - First observed
app_open_panel - First observed
app_ping - First observed
app_press_dialog_button - First observed
app_read_panel - First observed
app_read_window - First observed
app_restore_checkpoint - First observed
app_run_menu - First observed
app_run_ui_command - First observed
app_save_all - First observed
app_save_document - First observed
app_screenshot - First observed
app_scroll_control - First observed
app_send_keys - First observed
app_set_active_document - First observed
app_set_dialog_control - First observed
app_set_dropdown - First observed
app_set_grid_cell - First observed
app_set_intent - First observed
app_toolbar - First observed
app_type_text - First observed
app_ui_snapshot - First observed
app_update_from_libraries - First observed
app_wait_for_dialog - First observed
audit_component_param_visibility - First observed
audit_find_acute_angles - First observed
audit_find_bad_connections - First observed
audit_find_components_outside_board_outline - First observed
audit_find_designator_collisions - First observed
audit_find_floating_ports - First observed
audit_find_inconsistent_track_widths - First observed
audit_find_invalid_regions - First observed
audit_find_mirrored_pcb_text - First observed
audit_find_missing_datasheets - First observed
audit_find_missing_decoupling - First observed
audit_find_mixed_designator_rotation - First observed
audit_find_mpn_inconsistencies - First observed
audit_find_net_label_conflicts - First observed
audit_find_non_embedded_images - First observed
audit_find_off_grid_components - First observed
audit_find_orphan_net_labels - First observed
audit_find_orphan_power_objects - First observed
audit_find_pads_near_board_edge - First observed
audit_find_pin_net_name_mismatches - First observed
audit_find_placeholder_values - First observed
audit_find_removed_pad_shapes - First observed
audit_find_signal_vias_without_return - First observed
audit_find_single_pin_nets - First observed
audit_find_unconnected_ic_pins - First observed
audit_find_unlocked_component_primitives - First observed
audit_find_unmatched_ports - First observed
audit_find_via_antennas - First observed
audit_find_visible_supplier_pn - First observed
audit_power_port_orientation - First observed
audit_tented_via_ratio - First observed
audit_variant_not_fitted - First observed
datasheet_fetch - First observed
design_add_circuit_block - First observed
design_add_part - First observed
design_apply_hierarchy - First observed
design_audit_schematic - First observed
design_autonomy_guide - First observed
design_bom_file - First observed
design_compose_netlist - First observed
design_compute_component_value - First observed
design_connect_bus - First observed
design_datasheet_checklist - First observed
design_describe_circuits - First observed
design_edit_plan - First observed
design_execute_plan - First observed
design_generate_bom - First observed
design_get_discipline - First observed
design_hints_from_sheet - First observed
design_job_result - First observed
design_job_start - First observed
design_job_status - First observed
design_layout_schematic - First observed
design_learn_from_layout - First observed
design_lint_report - First observed
design_list_circuit_blocks - First observed
design_live_note - First observed
design_live_snapshot - First observed
design_live_view - First observed
design_load_fab_profile - First observed
design_next_action - First observed
design_plan_from_sheet - First observed
design_plan_hierarchy - First observed
design_preview_plan - First observed
design_review_file - First observed
design_review_plan - First observed
design_review_snapshot - First observed
design_session_log - First observed
design_session_report - First observed
design_session_resume - First observed
design_session_start - First observed
design_session_status - First observed
design_snapshot_inventory - First observed
design_solve_netlist_file - First observed
design_suggest_diff_pair_traces - First observed
design_suggest_partition - First observed
design_synthesize_rules - First observed
design_validate - First observed
design_validate_plan - First observed
design_validate_requirement - First observed
design_visual_review - First observed
footprint_check_package - First observed
footprint_render_package - First observed
get_board_info - First observed
lib_add_footprint_arc - First observed
lib_add_footprint_pad - First observed
lib_add_footprint_pads - First observed
lib_add_footprint_regions - First observed
lib_add_footprint_text - First observed
lib_add_footprint_track - First observed
lib_add_footprint_tracks - First observed
lib_add_pins - First observed
lib_add_symbol_arc - First observed
lib_add_symbol_lines - First observed
lib_add_symbol_polygon - First observed
lib_add_symbol_rectangle - First observed
lib_add_symbol_text - First observed
lib_audit_footprint_policies - First observed
lib_audit_footprint_vs_datasheet - First observed
lib_audit_footprint_vs_package - First observed
lib_audit_styles - First observed
lib_auto_link_3d_models - First observed
lib_batch_rename - First observed
lib_batch_set_params - First observed
lib_clear_source_library - First observed
lib_convert_designators_to_stroke - First observed
lib_copy_component - First observed
lib_copy_footprint - First observed
lib_create_footprint - First observed
lib_create_footprint_from_package - First observed
lib_create_ic_symbol - First observed
lib_create_passive_symbol - First observed
lib_create_standard_footprint - First observed
lib_create_symbol - First observed
lib_dblib_get_record - First observed
lib_dblib_info - First observed
lib_dblib_search - First observed
lib_delete_component - First observed
lib_delete_footprint - First observed
lib_delete_footprint_primitives - First observed
lib_diff_libraries - First observed
lib_easyeda_import - First observed
lib_easyeda_search - First observed
lib_export_kicad_footprint - First observed
lib_export_kicad_symbol - First observed
lib_extract_cse_zip - First observed
lib_extract_intlib - First observed
lib_find_vault_components - First observed
lib_fix_designators - First observed
lib_get_component_details - First observed
lib_get_components - First observed
lib_get_footprint_primitives - First observed
lib_get_footprints - First observed
lib_get_installed_libraries - First observed
lib_get_pad_geometry - First observed
lib_get_pin_list - First observed
lib_get_vault_component - First observed
lib_get_vault_name - First observed
lib_inspect_cse_zip - First observed
lib_install_library - First observed
lib_kicad_import - First observed
lib_link_3d_model - First observed
lib_link_footprint - First observed
lib_move_bodies_to_layer - First observed
lib_move_components - First observed
lib_move_footprints - First observed
lib_normalize_implementations - First observed
lib_probe_designator - First observed
lib_probe_footprint - First observed
lib_redraw_assembly - First observed
lib_reload_library - First observed
lib_remove_model - First observed
lib_rename_component - First observed
lib_rename_footprint - First observed
lib_run_across - First observed
lib_search - First observed
lib_set_component_description - First observed
lib_set_current_component - First observed
lib_set_footprint_height - First observed
lib_set_label_formats - First observed
lib_set_mech_layers - First observed
lib_set_model_name - First observed
lib_set_model_source - First observed
lib_set_pad_properties - First observed
lib_set_pin_owner_part - First observed
lib_split_pin_functions - First observed
lib_uninstall_library - First observed
lib_update_footprint_heights_from_3d - First observed
list_components - First observed
list_nets - First observed
obj_batch_create - First observed
obj_batch_delete - First observed
obj_batch_modify - First observed
obj_clear_highlights - First observed
obj_copy - First observed
obj_count - First observed
obj_create - First observed
obj_crossref_net - First observed
obj_delete - First observed
obj_deselect_all - First observed
obj_explain_pin - First observed
obj_get_document_info - First observed
obj_get_font_id - First observed
obj_get_font_spec - First observed
obj_highlight_net - First observed
obj_modify - First observed
obj_query - First observed
obj_refresh_document - First observed
obj_run_process - First observed
obj_select - First observed
obj_set_grid - First observed
obj_switch_view - First observed
obj_zoom - First observed
part_fetch - First observed
part_search - First observed
pcb_add_layer - First observed
pcb_add_teardrops - First observed
pcb_add_testpoints_for_net_class - First observed
pcb_align_components - First observed
pcb_apply_dnp_paste_exclusion - First observed
pcb_apply_via_template - First observed
pcb_audit_pad_center_connected - First observed
pcb_auto_size_board_outline - First observed
pcb_autoplace - First observed
pcb_autoplace_apply - First observed
pcb_autoplace_silkscreen - First observed
pcb_autoroute - First observed
pcb_autoroute_apply - First observed
pcb_bevel_polygon_corners - First observed
pcb_bind_pad_nets - First observed
pcb_build_from_project - First observed
pcb_calc_impedance - First observed
pcb_calc_length_match - First observed
pcb_calc_polygon_area - First observed
pcb_calc_termination - First observed
pcb_calc_thermal_vias - First observed
pcb_calc_trace_width_for_current - First observed
pcb_calc_trace_width_for_impedance - First observed
pcb_calc_track_current_capacity - First observed
pcb_check_placement_collision - First observed
pcb_cleanup_tracks - First observed
pcb_clear_source_footprint_library - First observed
pcb_copy_component_placement - First observed
pcb_copy_designators_to_mech - First observed
pcb_copy_tracks_radial - First observed
pcb_create_design_rule - First observed
pcb_create_diff_pair - First observed
pcb_create_net_class - First observed
pcb_create_nets_from_list - First observed
pcb_create_room - First observed
pcb_delete_design_rule - First observed
pcb_delete_invalid_objects - First observed
pcb_delete_net - First observed
pcb_delete_object - First observed
pcb_distribute_components - First observed
pcb_export_coordinates - First observed
pcb_export_stackup_csv - First observed
pcb_filter_variant_components - First observed
pcb_flip_component - First observed
pcb_focus_board - First observed
pcb_get_board_outline - First observed
pcb_get_board_statistics - First observed
pcb_get_clearance_violations - First observed
pcb_get_component_pads - First observed
pcb_get_components - First observed
pcb_get_design_rules - First observed
pcb_get_diff_pair_rules - First observed
pcb_get_differential_pairs - First observed
pcb_get_fab_stats - First observed
pcb_get_layer_display - First observed
pcb_get_layer_stackup - First observed
pcb_get_mech_layer_names - First observed
pcb_get_net_classes - First observed
pcb_get_nets - First observed
pcb_get_pad_properties - First observed
pcb_get_polygons - First observed
pcb_get_room_rules - First observed
pcb_get_rule_properties - First observed
pcb_get_selected_objects - First observed
pcb_get_trace_lengths - First observed
pcb_get_unrouted_nets - First observed
pcb_get_vias - First observed
pcb_import_placement - First observed
pcb_layout_audit - First observed
pcb_lock_net_routing - First observed
pcb_make_paste_grid - First observed
pcb_modify_layer - First observed
pcb_modify_polygon - First observed
pcb_move_components - First observed
pcb_move_tracks_to_layer - First observed
pcb_normalize_vias - First observed
pcb_panelize - First observed
pcb_place_3d_body - First observed
pcb_place_angular_dimension - First observed
pcb_place_arc - First observed
pcb_place_components - First observed
pcb_place_dimension - First observed
pcb_place_embedded_board - First observed
pcb_place_fill - First observed
pcb_place_pad - First observed
pcb_place_polygon_rect - First observed
pcb_place_radial_dimension - First observed
pcb_place_region - First observed
pcb_place_stitching_vias - First observed
pcb_place_text - First observed
pcb_place_thieving_pads - First observed
pcb_place_tracks - First observed
pcb_place_via - First observed
pcb_place_via_array - First observed
pcb_place_vias - First observed
pcb_plan_placement - First observed
pcb_remove_layer - First observed
pcb_remove_teardrops - First observed
pcb_render_svg - First observed
pcb_renumber_pads - First observed
pcb_replicate_layout - First observed
pcb_repour_polygons - First observed
pcb_run_drc - First observed
pcb_scale - First observed
pcb_set_board_shape - First observed
pcb_set_layer_color - First observed
pcb_set_layer_visibility - First observed
pcb_set_mech_layer_kind - First observed
pcb_set_mech_layers - First observed
pcb_set_plane_net - First observed
pcb_set_rule_properties - First observed
pcb_set_rules_enabled - First observed
pcb_set_text_style - First observed
pcb_set_text_visibility - First observed
pcb_set_track_width - First observed
pcb_set_via_soldermask_relief - First observed
pcb_snap_to_grid - First observed
pcb_start_polygon_placement - First observed
pcb_trim_extend_track - First observed
pcb_tune_length - First observed
pcb_unroute - First observed
proj_add_document - First observed
proj_add_sheet - First observed
proj_annotate - First observed
proj_close - First observed
proj_compare_sch_pcb - First observed
proj_compile - First observed
proj_create - First observed
proj_create_variant - First observed
proj_cross_probe - First observed
proj_delete_sheet - First observed
proj_delete_variant - First observed
proj_export_bom_html - First observed
proj_export_dxf - First observed
proj_export_image - First observed
proj_export_netlist - First observed
proj_export_pdf - First observed
proj_export_step - First observed
proj_export_variant_matrix_csv - First observed
proj_find_component - First observed
proj_force_recompile - First observed
proj_generate_fab_package - First observed
proj_get_active_variant - First observed
proj_get_board_info - First observed
proj_get_bom - First observed
proj_get_compile_freshness - First observed
proj_get_component_info - First observed
proj_get_component_info_many - First observed
proj_get_connectivity - First observed
proj_get_connectivity_many - First observed
proj_get_differences - First observed
proj_get_erc_violations - First observed
proj_get_focused - First observed
proj_get_messages - First observed
proj_get_nets - First observed
proj_get_options - First observed
proj_get_parameters - First observed
proj_get_path - First observed
proj_get_stats - First observed
proj_get_unconnected_pins - First observed
proj_import_document - First observed
proj_list_documents - First observed
proj_list_open - First observed
proj_list_outjob_containers - First observed
proj_list_variants - First observed
proj_load_sheets - First observed
proj_lock_designator - First observed
proj_open - First observed
proj_print_all_variants - First observed
proj_push_parameters - First observed
proj_remove_document - First observed
proj_replace_component - First observed
proj_run_erc - First observed
proj_run_outjob - First observed
proj_run_outjob_all - First observed
proj_run_output - First observed
proj_save - First observed
proj_set_active_variant - First observed
proj_set_document_parameter - First observed
proj_set_parameter - First observed
proj_sync_pcb - First observed
proj_sync_schematic - First observed
review_design - First observed
route_plan - First observed
route_plan_repairs - First observed
run_drc - First observed
run_erc - First observed
sch_add_datafile_link - First observed
sch_add_directive - First observed
sch_clear_source_library - First observed
sch_generate_toc - First observed
sch_get_constraint_groups - First observed
sch_get_directives - First observed
sch_get_sheet_parameters - First observed
sch_increment_designators - First observed
sch_mirror_component - First observed
sch_place_bus - First observed
sch_place_bus_entry - First observed
sch_place_components - First observed
sch_place_cross_sheet_connector - First observed
sch_place_dblib_component - First observed
sch_place_harness_connector - First observed
sch_place_image - First observed
sch_place_junction - First observed
sch_place_line - First observed
sch_place_net_label - First observed
sch_place_no_erc - First observed
sch_place_note - First observed
sch_place_port - First observed
sch_place_power_port - First observed
sch_place_probe - First observed
sch_place_rectangle - First observed
sch_place_sheet_entry - First observed
sch_place_sheet_symbol - First observed
sch_place_text_frame - First observed
sch_place_vault_components - First observed
sch_place_wires - First observed
sch_render_svg - First observed
sch_replicate_component - First observed
sch_set_component_part_id - First observed
sch_set_component_unique_id - First observed
sch_set_components_parameters - First observed
sch_set_net_tie - First observed
sch_set_sheet_size - First observed
sch_set_units - First observed
sch_stub_pins - First observed
sch_toggle_pin_visibility - First observed
sim_attach_model - First observed
sim_attach_primitives - First observed
sim_get_readiness - First observed
sim_get_results - First observed
sim_run - First observed
sim_setup_analysis - First observed
tool_catalog - First observed
tool_guide - First observed
tool_invoke
TDQS
Scored across 480 tools
The 480-tool set contains many near-overlapping tools: app_run_menu vs app_click_menu vs app_run_ui_command; app_list_open_dialogs vs app_read_window vs app_ui_snapshot; proj_get_nets vs proj_get_connectivity vs proj_get_component_info; and many audit_find_* and pcb_get_* variants. Descriptions often explain distinctions, but the sheer breadth makes misselection likely for an agent.
There are recognizable prefix families (app_, proj_, lib_, pcb_, sch_, design_, audit_, sim_), but many tools use bare names (list_components, run_drc, run_erc, get_board_info, review_design, route_plan, tool_invoke). Snake_case is mostly preserved, but verb styles and prefixing conventions vary widely across the surface.
480 tools is far beyond a well-scoped set; even a large EDA automation suite does not justify this count for an agent-facing MCP server. tool_catalog and tool_invoke mitigate discovery, but the raw surface remains extreme and impractical to load or reason about reliably.
The surface covers project and document lifecycle, schematic and PCB CRUD, library authoring, simulation, routing, auditing, BOM/export, UI driving, and meta-tooling. Despite redundancy, there is no obvious core gap for the stated Altium/EDA automation domain.
Maintenance
Related MCP Connectors
Design, route, check, review and export manufacturable PCBs from plain language; KiCad import.
EasyGerber brings AI printed circuit board (PCB) design, layout, and routing to MCP-compatible assistants. Describe a circuit or start from firmware pin assignments, search published electronic components, and build schematics using catalog parts with their footprints and available 3D models. Create and revise boards, generate layouts with automatic component placement and routing, inspect previews, and check saved layouts for blocking design issues. Export manufacturing ZIPs containing Gerber and drill files, a bill of materials, and component placement data, or download an editable EasyGerber (.egb) file. Start without signing up. Your agent creates a private guest session for one board, including catalog access, edits, layout, checks, previews, and exports. Sign in through OAuth to work with saved account boards, access permitted organization boards, or save the guest design to your account. Guest support depends on your MCP client and installed integration.
Design and revise PCBs from plain language, track jobs, and retrieve design artifacts.
Design a KiCad PCB from a prompt: parts, schematic checks, routing, KiCad DRC and Gerbers.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI-powered autonomous hardware design within EasyEDA Pro, allowing users to create schematics, PCB layouts, and manufacturing files using natural language. It integrates direct EDA tool control with an engineering knowledge base and real-time component searching via JLCPCB and LCSC.-
- AlicenseCqualityCmaintenanceEnables AI coding assistants to control JLCPCB EDA for PCB automation, exposing 39 tools for component manipulation, routing, copper pour, DRC, and more. Includes a built-in PCB agent for orchestrating multi-step tasks.59265MIT
- FlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with JLCEDA EDA for schematic/PCB design operations like component placement, wiring, and circuit analysis through natural language.-
- AlicenseBqualityBmaintenanceEnables AI assistants to interact with KiCAD for PCB design automation, including schematic editing, component placement, routing, DRC/ERC, and export.10029 npm2MIT