Skip to main content
Glama
sheares

easyeda-mcp-fix

by sheares

easyeda-mcp-fix

Bug-fix fork of the EasyEDA Pro MCP bridge. Resolves silent BOM wipes, dead copper to SMD pads and five-minute netlist hangs, hardened on a real board taken to fab.

Base: javawizard/easyeda-agent-mcp-server (itself a fork of QuincySx/easyeda-agent-mcp-server).

Quick start (students start here)

Connect Claude Code to EasyEDA Pro so Claude can read, check and edit your schematics and PCBs, then lint a board before you order it.

Follow the step-by-step student guide. In short:

  1. Download easyeda-mcp.zip from the latest release and unzip it into your home folder. No build step needed.

  2. In EasyEDA Pro: Advanced → Extension Manager → Import the .eext, then turn on External Interactions and Show in top menu.

  3. Register the server with Claude Code (Windows: same command in PowerShell with \ in the path): claude mcp add --scope user easyeda node "$HOME/easyeda-mcp/dist/mcp-server/index.js" -e EDA_REQUEST_TIMEOUT_MS=180000

  4. Install the board checker: copy skills/pcb-lint into ~/.claude/skills/.

  5. In EasyEDA, open a schematic or PCB and click Claude → Connect Claude. Then ask Claude to "check the EasyEDA connection", or run /pcb-lint.

New to Claude Code? After step 1, open Claude Code in the easyeda-mcp folder and say "help me set this up". CLAUDE.md tells Claude how to walk you through the rest, and the do's and don'ts it follows when editing your designs.

Platform

Status

macOS

Tested end to end (EasyEDA Pro desktop 3.2.149)

Windows 10/11

Supported from v1.6.5 (native, PowerShell). Server and bridge tested in CI; a full EasyEDA session on Windows still to be confirmed

Linux

Server and bridge tested in CI; EasyEDA side untested

test

pcb-lint: a board checker skill

skills/pcb-lint/ is a Claude Code skill that runs 26 design-hygiene checks (12 schematic, 14 PCB) through this bridge and writes a scored report: regulator output against downstream abs-max, USB-C CC pull-downs, ESP32 strapping pins, first-flash power path, decoupling distance, annular ring, mask dams, copper-to-edge clearance, antenna keep-outs and more. Type /pcb-lint in Claude Code with a board open. See its README and SKILL.md.


The rest of this page is for developers: what the fork fixes, how it is secured, and how to build it.

Related MCP server: a2n-easyeda-mcp

Why this fork exists

The upstream easyeda-agent-mcp-server extension bridges Claude Code (and other MCP clients) to EasyEDA Pro, exposing the internal eda.* API as ~98 MCP tools. Excellent design in the small, but during Splitflap Controller Board 3 bring-up (June 2026) six upstream bugs surfaced that turned day-to-day workflows into data-loss risks:

  • A single sch_modify_component call on any parameter (just x, say) silently wiped supplierId and blanked every field of otherProperty. Twenty-four components lost their BOM lines in one batch before the pattern was noticed. The schematic looked correct in the canvas.

  • The Board 3 PCB layout passed clearance DRC, and the canvas rendered cleanly, but every API-drawn track was electrically dead to its SMD pads. Only a No-Connection check surfaced it.

  • Every read that needed pin-to-net data hung about five minutes, then rejected with nothing. Neither cache nor higher timeouts helped.

Each turned out to have a specific root cause, not just a slow API, so the fixes below are deterministic rather than workarounds. All six were live-verified against Splitflap Board 3 taken to fab.

What's fixed

#

Symptom on upstream

Root cause

Fix in this fork

1

sch_modify_component on any parameter silently overwrites supplierId with the raw symbol filename and blanks otherProperty (Value, LCSC part, tolerance, voltage, datasheet). BOM broken.

Modify re-serialises the component from the symbol, losing metadata.

Snapshot the component via sch_PrimitiveComponent.get before write, merge supplierId, otherProperty, manufacturer, manufacturerId, supplier, uniqueId around the caller's property (preserveMetadataOnModify, sch-component.ts).

2

sch_get_all_components allSchematicPages:true still returns only the active page.

The flag is forwarded to eda.sch_PrimitiveComponent.getAll, which ignores it.

Fan out per-page via dmt_Schematic.getAllSchematicPagesInfo + openDocument. Landing page verified, original active page restored in finally, unhandled-rejection safe.

3

sch_get_netlist and every read that needs pin-to-net (connectivity queries, ={...} template resolution) hangs ~5 min then rejects empty.

Calls @deprecated eda.sch_Netlist.getNetlist(JLCEDA). The deprecated path triggers a blocking JLC reconciliation that never resolves headlessly, even though DRC and File → Export Netlist finish in ~1 s on the same project.

Route through sch_ManufactureData.getNetlistFile('netlist', JLCEDA_PRO) (measured 766 ms vs 300 000 ms failure). New parser for the v2.0.0 {version, components:{uid:{props, pinInfoMap}}} shape; legacy flat shape kept for the deprecated fallback. Unconnected pins are omitted so they cannot read as a shared net.

4

API-drawn tracks and arcs are electrically dead to their SMD pads. Clearance DRC passes; only a No-Connection check surfaces it.

EasyEDA stores the layer param verbatim ("TopLayer"); native SMD pads use numeric layerId:1; EasyEDA's connectivity test uses loose == so "TopLayer" == 1 is false.

Central layer name → numeric EPCB_LayerId conversion on every pcb.* write path (ws-client.ts dispatch). Names or numbers both accepted. Unknown names throw. Covers line, arc, polyline, pour, fill, region, pad and pcb_move_component's target-layer flip.

5

pcb_create_polyline_track rejects every call as Invalid polygon data. Multi-corner routes have to be built from N individual pcb_create_track segments.

Handler passes a raw array where pcb_PrimitivePolyline.create expects an IPCB_Polygon; the fork's own tool documentation had the L-mode source order wrong (leading L token).

Handler wraps input via pcb_MathPolygon.createPolygon. Ergonomic [{x, y}, ...] point arrays now work. Source order corrected to x1 y1 L x2 y2 ... per TPCB_PolygonSourceArray JSDoc; pour/fill/region tool descriptions fixed too.

6

Schematic-editing library computes pin world coordinates wrongly for mirrored components (flip=1). Downstream addNetport / addSeriesResistor / addPowerSymbol write at those wrong coordinates.

schematic-reader.ts pin resolution never consulted comp.flip.

Mirror about local Y before rotate (matching the verified geometry.ts convention), plus pin-angle flip (θ → 180 − θ, normalised to [0, 360)). Regression coverage in tests/schematic-reader-flip.test.ts.

All six live-verified on Splitflap Controller Board 3: DRC returns zero, connectivity queries return real nets in under a second, and the numeric layer id is round-tripped through pcb_get_primitives_by_id.

Not fixed (yet)

Deliberate limits, kept honest:

  • Sheet-locked modify. sch_modify_component's document param does not reassign a primitive across schematic pages; empirically confirmed by trying it and catching the underlying undefined.getState_ComponentType. Cross-page moves still require manual UI Cut, switch page, Paste.

Security audit

AUDIT.md documents the whole codebase across the three layers (MCP server, bridge daemon, EDA Pro extension) with severity ratings. Seven criticals were identified; all seven are resolved on this branch.

C4 (WebSocket authentication) is a mutual HMAC challenge-response (hmac-v1, since v1.6.0): the daemon writes a per-run random token (mode 0600, inside its 0700 state dir) and challenges every connection with a fresh nonce; the extension reads the token itself (path shape validated) and answers with an HMAC over the nonces, and the daemon proves its own token knowledge back with a domain-separated HMAC the extension verifies. The raw token never crosses the wire, and a rogue process that binds the port cannot impersonate either side. A wrong answer always closes the socket.

Since v1.6.1 the extension also enforces its side: when it could read the token, it refuses every request from a daemon that has not proven itself, whether the daemon's auth.ok failed, never arrived (15 s window from the challenge, since v1.6.2; 5 s in v1.6.1), or the peer did not offer hmac-v1 at all. The refusal is a clear error on each call plus a one-time toast. A valid auth.ok that arrives after the window (a slow handshake, not a rogue: a rogue cannot forge the MAC) upgrades the verdict, a second toast says so, and requests resume without a reconnect. A connection that cannot read the token (the browser web app, or a desktop install without the extension's external interaction permission) has nothing to check and is still accepted on Origin trust, matching pre-C4 behaviour. Set EDA_WS_AUTH=require in the daemon's environment to refuse those too (hardened mode; desktop client only, and the extension's external interaction permission must be enabled).

Upgrade notes: a v1.6.x .eext never sends the raw token. A v1.6.1+ .eext against a pre-1.6.0 daemon refuses all requests until the daemon is restarted on the new build (bridge_restart still works: the daemon answers it without touching the extension). The daemon stays resident across rebuilds while any MCP client is attached, so after a rebuild check server_info: it reports daemonVersion, each instance's extensionVersion, and versionMismatch. EasyEDA ignores a same-version .eext reinstall, so bump the version before rebuilding.

Two QA passes on 2026-07-24 (QA-REPORT-2026-07-24.md, QA-DEEP-REPORT-2026-07-24.md) drove a further hardening round: document-switch verification before every routed operation, pre-write backups on bulk supplier swaps, MCP risk annotations on all ~100 tools, the mutual auth above, and assorted transport and correctness fixes. See HANDOVER-2026-07-24.md for the work-order trail. A third pass on 2026-08-23 (QA-REPORT-2026-08-23.md) verified that round live and produced v1.6.1: request gating on daemon verification, version reporting in server_info, in-place log rotation, and smaller fixes. A fourth pass on 2026-09-06 (QA-REPORT-2026-09-06.md), after two weeks of field use, produced v1.6.2: late-auth.ok recovery and a headless harness for the extension's request pipeline. v1.6.3 fixed new-project imports, v1.6.4 added the library footprint tools, and v1.6.5 made the bridge run on native Windows (a named pipe in place of the Unix socket file).

Environment variables

All knobs are daemon/server side; the extension has no environment access.

Variable

Default

Purpose

EDA_BRIDGE_STATE_DIR

~/.easyeda-mcp

State dir (UDS socket, pid file, ws-token, bridge.log). On Windows the socket is a named pipe, \\.\pipe\easyeda-mcp-bridge-<hash of this dir>

EDA_WS_PORT

16168

Daemon WS port. The extension always dials 16168 (it cannot see env vars), so changing this strands it: test use only

EDA_WS_AUTH

unset

require refuses WS connections that do not prove token knowledge

EDA_WS_ALLOW_ALL_ORIGINS

unset

1 disables the WS Origin allowlist. Debugging escape hatch only; the daemon logs a loud warning at startup and server_info reports it

EDA_BRIDGE_IDLE_EXIT_SEC

5

Daemon exits this many seconds after the last MCP client disconnects (0 = immediate)

EDA_BRIDGE_DAEMON_ENTRY

dist/bridge-daemon/index.js

Daemon entry override (tests point it at the .ts source)

EDA_REQUEST_TIMEOUT_MS

45000

Per-RPC extension timeout; the MCP proxy's call timeout derives from it (3x + 30 s). EASYEDA_REQUEST_TIMEOUT_MS is an accepted alias

EDA_BACKUP_DIR

~/.easyeda-mcp-backup

Git-tracked backup repo for destructive operations

EDA_DISCOVERY_LOG

~/.easyeda-schema-discovery.jsonl

Where unknown schema tags are logged for schema growth

Install from source

Students: use the release download instead. This is for changing the code.

git clone https://github.com/sheares/easyeda-mcp-fix.git
cd easyeda-mcp-fix
npm install
npm test              # 208 tests
npm run smoke         # after a build: starts the bundled server and a real bridge
npm run build         # produces dist/ and build/dist/easyeda-agent-mcp-server_vN.N.N.eext

Then in EasyEDA Pro (v3):

  1. Advanced → Extension Manager → Import the built .eext from build/dist/. (EasyEDA Pro v2: Settings → Extensions → Extension Manager → Import Extension.)

  2. Select the extension and turn on External Interactions and Show in top menu.

  3. Open a schematic or PCB and click Claude → Connect Claude.

Register the server with your MCP client. For Claude Code:

claude mcp add --scope user easyeda node "$(pwd)/dist/mcp-server/index.js"

The bridge daemon is spawned automatically on the first tool call and listens on 127.0.0.1:16168. dist/ is fully bundled (no node_modules needed at run time), which is what the release zip ships.

Same-version reinstalls are a no-op in EasyEDA Pro. Bump the version in extension.json before rebuilding if you want your changes to take effect.

Provenance

  • Base: javawizard/easyeda-agent-mcp-server at commit 3b8f2e5 (the extended fork with per-request document param dispatch already threaded through ws-client.ts).

  • Original: QuincySx/easyeda-agent-mcp-server.

  • MIT licence, inherited. See LICENSE.


What's inside

src/
  mcp-server/    the MCP server (TypeScript, stdio transport)
  bridge-daemon/ the WebSocket bridge between MCP server and extension
  extension/     the EasyEDA Pro extension (.eext), incl. bug-fix handlers
  lib/           schematic editing library (start at src/lib/README.md)
skills/
  pcb-lint/      Claude Code skill: board design-hygiene checks
docs/            student guide, .esch / .epcb / .epro file format reference
  dev-notes/     audit, QA reports and handover work orders
examples/        working examples using the editing library
tests/           208 tests (node --test, ts-node) + smoke-bundle.js

Two distinct pieces

1. The MCP server + extension

A pair of programs connected over WebSocket:

  • The MCP server runs as a stdio process spawned by an MCP client. It exposes EasyEDA operations as MCP tools.

  • The .eext extension runs inside EasyEDA Pro (browser or desktop). It connects to the MCP server's WebSocket and dispatches API calls to EasyEDA Pro's internal eda.* namespace.

The server exposes ~100 tools covering schematic primitives, PCB primitives, libraries, manufacture exports, DRC and document I/O. Multiple EasyEDA Pro instances can share one daemon; every tool takes an optional instance_id and document param for cross-tab routing.

Two tool families are worth calling out for high-throughput workflows:

  • document_get_source / document_set_source read and write the entire document as a string in EasyEDA's internal NDJSON format.

  • document_save_to_file / document_load_from_file do the same via local files (avoids MCP payload size limits).

  • project_export_file / project_import_file read and write entire .epro projects as ZIP archives. A new-project import is saved to the team/workspace of the project open in the target window (fixed in v1.6.3: before that, EasyEDA silently rejected every new-project import).

  • sch_export_bom returns the schematic-side BOM as parsed rows (the source of truth for supplier metadata), handy for verifying BOM integrity after batch edits.

  • sch_swap_supplier_part does a filter-and-replace on supplier metadata across matched components in one call, reusing the bug-1 metadata guard so nothing else is wiped; supports dryRun for a preview before the real swap.

2. The schematic editing library

src/lib/ is an in-tree TypeScript library for editing EasyEDA Pro schematics by manipulating the raw NDJSON format directly. It exists because EasyEDA's per-operation API is too slow for bulk edits; the library lets you pull the document source, modify it locally, and push it back in a single round trip.

Its Zod schemas ARE wired into the MCP tools: document_set_source and document_load_from_file uploads are validated against them (strict by default), and document_validate exposes the check directly (see src/bridge-daemon/tools/schema-tools.ts). The writer API itself is not exposed as MCP tools (intentional); the intended workflow:

1. project_export_file → /tmp/myproject.epro
2. unzip /tmp/myproject.epro -d /tmp/myproject/
3. ts-node a script that uses loadSchematic + SchematicWriter
4. document_load_from_file → push the result back into EasyEDA

Read src/lib/README.md for the API tour and gotchas. Run examples/add-fpga-config-resistors.ts to see it in action.

Building

npm install
npm run typecheck    # type-check both server and extension
npm run compile      # build to dist/
npm run build        # build + package extension into .eext file
npm test             # run the full test suite
npm start            # run the MCP server (usually launched by an MCP client)

File format reference

docs/schematic-format.md documents the .esch schematic format: coordinate system (math coordinates: +X right, +Y up, CCW rotation), element line formats (COMPONENT, ATTR, WIRE, PIN, FONTSTYLE, HEAD), the netport recipe, and the gotchas discovered the hard way (junction wires required at component-to-component connections, every component needs a non-empty Unique ID, some components resolve their symbol via project.json rather than a Symbol ATTR).

Available Tools

103 tools
bridge_restartA
Destructive

Restart the EasyEDA bridge daemon. Use this only after the bridge-daemon code itself has changed (new tools, fixed handler logic, etc.) and you want the new code loaded without manually killing the process.

DO NOT use this just because the EasyEDA browser extension was reloaded — the extension reconnects to the existing daemon over WebSocket on its own. The daemon doesn't need restarting for that.

SIDE EFFECTS — please be aware before invoking:

  • Every other Claude Code session sharing this daemon also loses its connection mid-flight. Any tool call in progress (in any session) will fail with a connection-dropped error.

  • The EasyEDA extension's WebSocket drops and reconnects (typically within a second, capped at 15s). Tool calls landing during that window will fail.

  • Your own MCP proxy reconnects transparently and re-lists tools, so the next call after this one will Just Work — but the call itself returns before the new daemon is necessarily up.

Returns { ok, pidWas, message } before the daemon exits (~100ms grace for response to flush).

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoFree-text reason logged on the daemon side (e.g. "loaded new SI export tools").

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only flag destructiveHint/openWorldHint/idempotentHint; the description goes far beyond, disclosing that other Claude Code sessions lose their connection, in-flight calls fail, the extension WebSocket drops with reconnect timing (typically <1s, capped 15s), the proxy reconnects transparently, and the call returns before the new daemon is necessarily up.

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

Conciseness5/5

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

Front-loads the action, then usage rules, then a bulleted side-effects block, then the return contract. Every sentence carries decision-relevant information; nothing is padding despite the length.

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

Completeness5/5

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

For a destructive, cross-session-affecting operation with no output schema, the description supplies the missing return contract ({ ok, pidWas, message }, ~100ms flush window) and full blast-radius disclosure. An agent has everything needed to decide and invoke correctly.

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

Parameters3/5

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

There is one optional 'reason' parameter and schema description coverage is 100%, so the schema already documents it fully; the description adds no syntax or format detail for it. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

Opens with a specific verb and resource: 'Restart the EasyEDA bridge daemon.' This is unmistakably distinct from every sibling (all pcb_/sch_/lib_/document_ operations), 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.

Usage Guidelines5/5

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

States the precise trigger ('only after the bridge-daemon code itself has changed... new code loaded without manually killing the process') and an explicit exclusion ('DO NOT use this just because the EasyEDA browser extension was reloaded'), explaining why the extension reconnects on its own.

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

document_get_sourceA
Read-onlyIdempotent

Get the raw source code of the currently active document (schematic page, PCB, or panel). Returns the document as a string in EasyEDA's internal format (newline-delimited JSON arrays). Use editor_open_document to switch to the desired document first, then call this tool. The source can be modified and written back with document_set_source.

For schematic documents, the source is also run through the schema validator as a side effect — any unknown tags get logged to ~/.easyeda-schema-discovery.jsonl so we can grow the schema. The response itself is unchanged. Use document_validate for a structured validation report.

FAST-BATCH WORKFLOW: for making many changes at once, it is much faster to export the document or project (document_save_to_file / project_export_file), edit the raw source on disk, then re-upload (document_load_from_file / project_import_file) than to issue many small per-primitive MCP calls. The document source is newline-delimited JSON arrays; .epro files are ZIP archives of the same. Every destructive upload is auto-backed-up to a local git repo first — the response includes a backup SHA you can use to find the prior state if the edit goes wrong. Upload tools accept validate='off'|'warn'|'strict' (default 'strict') which runs the Zod schema on the new source — see document_validate for standalone validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint, so safety is covered. The description adds a non-obvious side effect (schematic sources are run through the schema validator and unknown tags logged to a file) and clarifies the response is unchanged. Some surrounding text (backups, validate flags) belongs to sibling upload tools rather than this one.

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

Conciseness4/5

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

Core purpose is front-loaded and the response format follows immediately. The FAST-BATCH block is useful but lengthy and partly concerns other tools, making the description denser than strictly needed for a read-only getter.

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

Completeness4/5

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

For a read-only tool with full schema coverage and no output schema, the description supplies the return format and the validator side effect, which is sufficient. The additional upload/backup detail is more relevant to siblings and slightly inflates the entry.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (document UUID, instance_id) are fully documented in the schema. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (get) and resource (raw source of the currently active document), and specifies the exact return format (string in EasyEDA's internal newline-delimited JSON arrays). It is immediately distinguishable from write siblings like document_set_source.

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

Usage Guidelines5/5

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

Explicitly routes the agent: switch with editor_open_document first, write back with document_set_source, use document_validate for a structured report, and use the export/edit/re-upload workflow for bulk changes instead of many small MCP calls. Alternatives and conditions are all named.

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

document_load_from_fileA
Destructive

Load document source from a local file and push it into the currently active document. Reads the file from disk and calls setDocumentSource to replace the document contents. The file must contain valid EasyEDA document source (same format as document_get_source / document_save_to_file). WARNING: This replaces the entire document. A backup of the prior state is taken automatically (after validation passes) and committed to a local git-tracked repo — the returned backup.sha references the pre-edit state. Validation runs only for schematic documents (documentType=1); other types skip with a status.

FAST-BATCH WORKFLOW: for making many changes at once, it is much faster to export the document or project (document_save_to_file / project_export_file), edit the raw source on disk, then re-upload (document_load_from_file / project_import_file) than to issue many small per-primitive MCP calls. The document source is newline-delimited JSON arrays; .epro files are ZIP archives of the same. Every destructive upload is auto-backed-up to a local git repo first — the response includes a backup SHA you can use to find the prior state if the edit goes wrong. Upload tools accept validate='off'|'warn'|'strict' (default 'strict') which runs the Zod schema on the new source — see document_validate for standalone validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
filePathYesAbsolute path to read the document source from
validateNoSchema validation mode for schematic uploads: 'off' skips entirely, 'warn' aborts only on malformed known tags or JSON parse errors, 'strict' (default) also aborts on any unknown-tag line.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the destructiveHint=true annotation by disclosing that a backup is taken automatically after validation passes, that it is committed to a local git-tracked repo, that backup.sha references the pre-edit state, and that validation only runs for schematic documents (documentType=1) while other types skip with a status. These are non-obvious, high-value behavioral facts 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.

Conciseness4/5

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

Front-loads the core action and the destructive warning, and the workflow paragraph is genuinely useful. It is somewhat long and repeats the git-backup/backup-SHA point twice, which costs a little efficiency without adding information.

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

Completeness5/5

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

There is no output schema, yet the description covers the return contract (backup.sha), the validation outcome, the mutation risk, and the recommended workflow, plus how to obtain document UUIDs via list_instances/editor_get_open_tabs. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds value by explaining that validate runs the Zod schema on new source and clarifying the schematic-only scope of validation. It largely restates the enum semantics already in the schema, so it does not go far beyond, but the validation-scope clarification is genuine added meaning.

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

Purpose5/5

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

States a specific verb and resource ('Load document source from a local file and push it into the currently active document') and even names the internal call it makes (setDocumentSource). It distinguishes itself from project_import_file (project scope) and document_set_source (in-memory source) by tying the operation to a disk file and the active document.

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

Usage Guidelines5/5

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

Explicitly prescribes when to use this over alternatives: the FAST-BATCH WORKFLOW paragraph says to export/edit/re-upload instead of issuing many small per-primitive MCP calls, names the sibling pairs (document_save_to_file/project_export_file, project_import_file), and points to document_validate for standalone validation. When-to-use, when-not, and 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.

document_save_to_fileA

Save the source code of the currently active document to a local file. Fetches the document source from EasyEDA and writes it directly to disk. The file will contain the document in EasyEDA's internal format (newline-delimited JSON arrays). Use document_load_from_file to push a modified file back.

For schematic documents, the source is also run through the schema validator in warn mode — the returned JSON includes a validation report, and any unknown tags are logged to ~/.easyeda-schema-discovery.jsonl. Since this is a download (EasyEDA's output), a schema mismatch means our schema is missing coverage, not that the data is bad.

FAST-BATCH WORKFLOW: for making many changes at once, it is much faster to export the document or project (document_save_to_file / project_export_file), edit the raw source on disk, then re-upload (document_load_from_file / project_import_file) than to issue many small per-primitive MCP calls. The document source is newline-delimited JSON arrays; .epro files are ZIP archives of the same. Every destructive upload is auto-backed-up to a local git repo first — the response includes a backup SHA you can use to find the prior state if the edit goes wrong. Upload tools accept validate='off'|'warn'|'strict' (default 'strict') which runs the Zod schema on the new source — see document_validate for standalone validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
filePathYesAbsolute path to write the document source to
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only give a coarse safety profile (readOnlyHint=false, destructiveHint=false), and the description adds substantial behavior the agent could not otherwise know: schematic sources are run through the schema validator in warn mode, the response carries a validation report, unknown tags are logged to ~/.easyeda-schema-discovery.jsonl, and mismatches are framed as missing schema coverage rather than bad data. That is real disclosure beyond the structured fields.

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

Conciseness4/5

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

Well front-loaded with the core action first, then format, then workflow guidance. It is on the long side and a notable portion (backup SHAs, validate modes, Zod validation) describes the upload path rather than this save tool, which blurs focus, but most of the text is decision-relevant.

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

Completeness4/5

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

For a tool with no output schema, the description does explain what comes back (the document source plus a validation report for schematics). It is nearly complete for invocation; the only gap is that details about upload-side backups and validate modes belong to sibling tools and slightly dilute what is needed specifically to call this one.

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

Parameters3/5

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

Schema description coverage is 100%, so filePath, document and instance_id are already documented in the schema, which sets the baseline at 3. The description clarifies what the file at filePath will contain (EasyEDA internal newline-delimited JSON, or ZIP for .epro), but adds nothing about the document UUID or instance_id parameters themselves.

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

Purpose5/5

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

The first sentence states a specific verb and resource: save the source code of the active document to a local file, plus the exact serialization format (newline-delimited JSON arrays). It also explicitly positions itself against document_load_from_file as the reverse operation, so an agent can distinguish it from siblings without opening any schema.

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

Usage Guidelines5/5

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

The FAST-BATCH WORKFLOW paragraph gives an explicit when-to-use rule: for many changes, export/edit/re-upload beats many small per-primitive MCP calls, and it names the alternative tools (document_save_to_file/project_export_file vs document_load_from_file/project_import_file). It also states default behavior for the related upload path (validate='strict') and points to document_validate for standalone checks.

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

document_set_sourceA
Destructive

Replace the source code of the currently active document. Accepts the full document source as a string (same format returned by document_get_source). Returns { success, backup: { sha, path }, validation: {...} } on success, or throws if validation aborts the upload or the pre-edit backup could not be written. WARNING: This replaces the entire document. Always get the current source first, modify it, then set it back. A backup of the prior state is taken automatically before the replacement (after validation passes) and committed to a local git-tracked repo — the returned backup.sha references the pre-edit state. Validation runs only for schematic documents (documentType=1); other types skip with a status.

FAST-BATCH WORKFLOW: for making many changes at once, it is much faster to export the document or project (document_save_to_file / project_export_file), edit the raw source on disk, then re-upload (document_load_from_file / project_import_file) than to issue many small per-primitive MCP calls. The document source is newline-delimited JSON arrays; .epro files are ZIP archives of the same. Every destructive upload is auto-backed-up to a local git repo first — the response includes a backup SHA you can use to find the prior state if the edit goes wrong. Upload tools accept validate='off'|'warn'|'strict' (default 'strict') which runs the Zod schema on the new source — see document_validate for standalone validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesThe complete document source code to set
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
validateNoSchema validation mode for schematic uploads: 'off' skips entirely, 'warn' aborts only on malformed known tags or JSON parse errors, 'strict' (default) also aborts on any unknown-tag line.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the destructiveHint=true annotation: it discloses that a git-backed backup is taken automatically before replacement, that the returned backup.sha references the pre-edit state, that validation only runs for schematic documents (documentType=1), and that the call throws when validation aborts or backup fails. These are exactly the failure modes and side effects an agent needs for a destructive write.

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

Conciseness4/5

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

Front-loaded with the core action and return shape, then layered with warning and workflow guidance. It is somewhat dense and the backup guarantee is stated twice, but every sentence carries operational weight, so the redundancy is minor.

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

Completeness5/5

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

Even without an output schema, the description specifies the success return shape ({ success, backup: { sha, path }, validation }) and the error conditions, plus validation scoping per document type. For a destructive 4-param tool, nothing essential to correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value: it explains the validate modes and their strictness semantics, the auto-switch behavior of the document UUID, and the on-disk format ('newline-delimited JSON arrays; .epro files are ZIP archives') that governs the source string. That format context is not in the schema and meaningfully informs the source parameter.

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

Purpose5/5

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

States a specific verb and resource ('Replace the source code of the currently active document') and immediately disambiguates against document_get_source by noting the same format is returned there. The agent can distinguish this as the write counterpart to the get/load/validate siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicitly states the correct workflow ('Always get the current source first, modify it, then set it back') and names concrete alternatives for the batch case (document_save_to_file / project_export_file, then document_load_from_file / project_import_file), including the condition (making many changes at once). This is unambiguous when-to-use and when-to-use-something-else guidance.

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

document_validateA
Read-onlyIdempotent

Validate a document's source against the Zod-backed EasyEDA schema. Runs on the currently active document by default, or on a local file if filePath is provided. Schematic (.esch, documentType=1) and PCB (.epcb, documentType=3) documents are validated; other types return a "skipped" report with a reason. Unknown tags (shapes the schema doesn't cover yet) are appended to the discovery log at ~/.easyeda-schema-discovery.jsonl (override via EDA_DISCOVERY_LOG).

Returns a JSON-serializable report: { docType, lineCount, knownCount, unknownTagCount, invalidCount, samples: { unknownTags, invalid } }. Known issues are samples of known tags whose shape failed validation (typically writer bugs); unknowns are tags not yet in the schema vocabulary.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
filePathNoAbsolute path to a local file to validate. If omitted, validates the currently active document.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare the safety profile (readOnly, idempotent, non-destructive, not openWorld), but the description adds substantial context beyond them: which doc types validate, that other types return a 'skipped' report with a reason, a filesystem side effect (unknown tags appended to a discovery log with EDA_DISCOVERY_LOG override), and the distinction between known-invalid samples vs unknown tags. This is exactly the behavioral detail annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the core purpose, then scoped behavior, then return shape — a logical ordering. It is somewhat dense (three short paragraphs), but each block carries real information (supported types, logging side effect, report structure) rather than filler.

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

Completeness5/5

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

With no output schema present, the description carries the full burden and does so: it spells out the returned JSON report shape (docType, lineCount, knownCount, unknownTagCount, invalidCount, samples), validation coverage, and the logging side effect. 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies. The description restates the filePath-vs-default-document behavior, but this is already documented in the schema, so it adds little meaning beyond what the structured fields provide.

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

Purpose4/5

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

The description opens with a precise verb+resource: 'Validate a document's source against the Zod-backed EasyEDA schema.' It further scopes the tool by naming exactly which document types are validated (Schematic/PCB) and that others are skipped. It never explicitly name-checks a sibling for contrast, but the validation function is unambiguous against the get/set/save/load siblings.

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

Usage Guidelines3/5

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

It gives useful operational guidance — 'Runs on the currently active document by default, or on a local file if filePath is provided' — which tells the agent how to invoke it. However, it offers no when-to-use/when-not guidance relative to sibling tools (e.g., document_get_source) and no prerequisites, leaving the choice of this tool over alternatives to inference.

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

editor_get_current_documentA
Read-onlyIdempotent

Get detailed info about the currently focused document. For schematic pages, includes parent schematic info. For PCBs, includes associated board info.

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context by disclosing that returned content is document-type dependent (parent schematic info for schematic pages, associated board info for PCBs), which is exactly the kind of value annotations cannot provide.

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

Conciseness5/5

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

Two sentences, zero waste, front-loaded with the core action followed by the type-conditional return detail. Nothing is redundant or padded.

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

Completeness4/5

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

No output schema exists, so the description carries some of the return-value burden, and it does describe the type-conditional structure of the response. A getter with full annotation coverage and a fully documented single parameter is largely complete, though it could say a bit more about the shape of 'detailed info'.

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

Parameters3/5

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

With only one parameter and 100% schema description coverage, the schema fully documents instance_id including the 8-char hex format and the list_instances reference. The description adds nothing about it, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Get) and resource (currently focused document) with a clear scope qualifier. It is distinguishable from siblings like editor_get_open_tabs and editor_open_document by the 'currently focused' qualifier, though it does not name 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.

Usage Guidelines3/5

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

Usage is implied by 'currently focused document' but there is no explicit when-to-use guidance, no mention of when to prefer this over editor_get_open_tabs or document_get_source, and no stated prerequisites. The agent can infer intent but must guess at alternatives.

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

editor_get_open_tabsA
Read-onlyIdempotent

Get all currently open tabs in the editor, with the active tab marked. Also returns the split screen structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely new context by disclosing what comes back (all open tabs, active tab marker, split-screen structure), which matters because there is no output schema. It could still mention ordering or multiplicity limitations.

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

Conciseness5/5

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

Two short sentences, no filler, and the primary result (open tabs) is front-loaded ahead of the secondary result (split screen structure). Every clause earns its place.

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

Completeness4/5

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

For a simple read-only query tool with complete annotations and a well-documented parameter, the description covers everything needed to invoke it: what it returns and how the active tab is identified. Only richer return detail (ordering, per-tab fields) would add value.

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

Parameters3/5

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

Schema description coverage is 100%; the single instance_id parameter is fully documented in the schema, including the multi-instance and auto-selection behavior. The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Get all currently open tabs in the editor') and adds scope detail ('active tab marked', 'split screen structure'). It is clearly distinguishable from editor_get_current_document by implication (all tabs vs. one), but it never names or contrasts 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.

Usage Guidelines3/5

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

No explicit when-to-use, when-not-to-use, or alternative is stated. Usage is only implied: an agent can infer this is how you discover which tab is active versus calling editor_get_current_document. That is implied guidance, not stated guidance.

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

editor_open_documentA
Idempotent

Open/navigate to a specific document by UUID. Works for schematic page UUIDs, PCB UUIDs, and panel UUIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
documentUuidYesThe UUID of the document to open

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is clear without the text. The description adds genuine value by disclosing the supported UUID categories, but says nothing about what happens to currently open documents, whether unsaved work is at risk, or behavior when the UUID is invalid. A 3 is appropriate with annotations carrying the safety burden.

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

Conciseness5/5

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

Two tight sentences, zero filler, and the core action is front-loaded before the scope qualification. Nothing needs trimming.

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

Completeness3/5

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

For a simple navigation tool with no output schema and annotations covering idempotence and safety, the description is nearly complete but silent on failure modes (unknown UUID, wrong document type for the current editor mode) and on side effects to existing open tabs. Adequate, with clear but minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (instance_id auto-selection rules, documentUuid) are already fully documented in the schema. The description only contributes the set of document types a UUID may refer to, which is a modest addition over the schema's generic 'UUID of the document to open'. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

States a concrete verb (open/navigate) and resource (document) and enumerates the accepted UUID domains: schematic page, PCB, and panel. That level of specificity lets an agent distinguish it from editor_get_current_document and editor_get_open_tabs, though it never explicitly names an alternative it must not be confused with (e.g. pcb_navigate_to).

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent can infer it should call this to bring a document into the editor, and the UUID-type sentence hints at valid inputs. There is no explicit when-to-use vs when-not-to-use guidance and no mention of the sibling navigation tools (pcb_navigate_to, pcb_navigate_to_region) that overlap in intent.

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

lib_device_copyA

Copy a library device from one library to another. Returns the new device UUID. Whether the device's symbol/footprint are deep-copied or referenced cross-library is yet to be confirmed empirically.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceUuidYesSource device UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesSource library UUID
newDeviceNameNoName for the copy (defaults to source name; collisions fail)
targetLibraryUuidYesDestination library UUID

TDQS

A3.5/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, destructive=false, idempotent=false), it discloses the return value (the new device UUID) and honestly flags that whether the symbol/footprint are deep-copied or cross-library references is unverified - a meaningful behavioral caveat since it affects whether editing the copy touches the source. It still omits error/authorization behavior and collision handling (which lives only in 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.

Conciseness4/5

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

Two sentences, front-loaded with the action and the return value, and no filler. The second sentence is a hedge but it carries real behavioral information rather than padding.

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

Completeness4/5

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

For a mutation tool with no output schema, the description supplies the one return value an agent needs (new device UUID) and covers the annotation profile. Missing only failure/permission context, which is a minor gap given the rich schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (including the conditional instance_id and the collision-failing newDeviceName) are already documented in the schema. The description adds no format, default, or constraint information beyond that baseline.

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

Purpose4/5

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

States a specific verb and resource (copy a library device) plus the scope (from one library to another), so an agent knows exactly what operation is performed. It does not explicitly contrast itself with the nearest sibling lib_symbol_copy, but the device-vs-symbol resource distinction makes the target unambiguous.

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

Usage Guidelines2/5

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

The description never says when to use this tool versus alternatives such as lib_symbol_copy, nor does it state prerequisites (e.g., both libraries must exist, instance selection when multiple instances are connected). Usage is only inferable from the name and schema.

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

lib_device_deleteA
Destructive

Delete a library device. Does NOT delete its referenced symbol/footprint. IRREVERSIBLE: no undo, and no backup snapshot is taken (library assets are not documents). Record the device data with lib_get_device first if you may need to restore it. Returns boolean success.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceUuidYesDevice UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the device

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false) by disclosing that the operation is irreversible, that no undo and no backup snapshot exist because library assets are not documents, and that the return value is a boolean success flag.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the action and its scope, then the destructive consequences, then the mitigation. 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.

Completeness5/5

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

For a destructive, no-output-schema tool, the definition supplies everything an agent needs: irreversibility, absence of backups, the scope boundary versus symbol/footprint, and the return type. Nothing material is missing.

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

Parameters3/5

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

All three parameters are already documented at 100% schema coverage, and the description adds no syntax, format, or edge-case meaning for deviceUuid/libraryUuid/instance_id. Baseline 3 applies when the schema carries the full parameter burden.

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

Purpose5/5

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

States a specific verb and resource ('Delete a library device') and immediately scopes it by clarifying it does NOT delete the referenced symbol/footprint, which distinguishes it from lib_symbol_delete and lib_device_modify without opening any schema.

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

Usage Guidelines4/5

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

Gives a concrete precondition — record the device with lib_get_device first if a restore may be needed — and the symbol/footprint note implicitly routes the agent to the sibling delete for those asset types. It stops short of an explicit when-to-use vs. alternatives comparison, 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_device_modifyA
Idempotent

Modify a library device — re-bind its symbol/footprint, or change name/classification/description/properties. Pass only the fields you want to change. Pass null to clear an optional field. Use the association arg to swap to a different symbol or footprint UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
propertyNo
deviceNameNoNew device name
deviceUuidYesDevice UUID
associationNoRe-bind symbol/footprint/3D model. Each is { uuid, libraryUuid }.
descriptionNoNew description (null to clear)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the device

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds genuinely useful behavioral context beyond that: partial-update semantics and the null-clears-a-field convention. It stops short of permission requirements or failure behavior, but with annotations carrying the safety profile this is a meaningful gain.

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

Conciseness4/5

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

Three short sentences, front-loaded with the highest-value info (what can be changed), then patch semantics, then association details. Slight redundancy between 're-bind its symbol/footprint' and the later association sentence, but no filler.

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

Completeness4/5

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

For a complex tool with nested objects and no output schema, the description covers the essential calling semantics: partial updates, null clearing, and association swapping. It omits any statement of return value (acceptable with no output schema) and defers instance selection to the schema, but nothing critical for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is high (86%), so the baseline is 3, but the description adds real meaning: it clarifies that nullable optional fields are cleared by passing null, and it explains the purpose of the nested association object (swap symbol/footprint UUIDs), which the schema only labels tersely. That goes beyond what the schema conveys.

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

Purpose5/5

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

The description names a specific verb (modify) and resource (library device), then enumerates the mutable facets: symbol/footprint re-binding, name, classification, description, and properties. This distinguishes it clearly from its siblings lib_device_delete, lib_device_copy, and lib_get_device.

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

Usage Guidelines3/5

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

It gives solid patch-semantics guidance ('Pass only the fields you want to change', 'Pass null to clear an optional field'), which tells the agent how to invoke it. However, it never states when to prefer this over alternatives like lib_device_copy or lib_device_delete, 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.

lib_footprint_getA
Read-onlyIdempotent

Get a library footprint's metadata (uuid, library, name, classification, description) by UUID. Read the source itself by opening the footprint with lib_footprint_open_in_editor and calling document_get_source on the returned tabId.

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidNoLibrary UUID containing the footprint (defaults to the system library)
footprintUuidYesFootprint UUID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value by disclosing the scope of the result (metadata only, not source) and where the source actually lives, which is a behavioral boundary not encoded in annotations 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.

Conciseness5/5

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

Two sentences, zero filler: the first states purpose and return payload, the second routes to the correct tool for source retrieval. Front-loaded and tightly scoped.

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

Completeness5/5

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

No output schema exists, and the description compensates by enumerating the returned metadata fields (uuid, library, name, classification, description). Combined with the annotations covering the safety profile and full schema coverage, 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.

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (including instance_id and libraryUuid defaults) are documented in the schema. The description only restates 'by UUID' and does not add format or resolution semantics beyond that, so the baseline 3 applies.

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

Purpose5/5

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

Starts with a specific verb+resource ('Get a library footprint's metadata') and enumerates the returned fields, which cleanly separates it from lib_symbol_get and from lib_footprint_open_in_editor. An agent can distinguish it from siblings without opening any schema.

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

Usage Guidelines4/5

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

Explicitly tells the agent that this tool does not return source, and prescribes the alternative workflow (lib_footprint_open_in_editor + document_get_source). It gives a clear when-to-use-this-vs-that condition, though it does not state exclusions for the sibling it is contrasted with.

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

lib_footprint_open_in_editorA
Idempotent

Open a library footprint in the EasyEDA editor as a tab. Returns the new tabId: use it as the document UUID for document_get_source / document_save_to_file. Only footprints in a personal, team or project library can be opened (system-library ones are refused).

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the footprint (see lib_get_project_library_uuid / lib_get_personal_library_uuid)
footprintUuidYesFootprint UUID
splitScreenIdNoSplit screen ID (defaults to last-focused split)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the bar is lower, yet the description still adds real behavior: opening creates a tab, the call returns a tabId, and system-library footprints are rejected. It does not say what happens if the same footprint is already open in a tab.

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

Conciseness5/5

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

Three sentences, zero waste, and the core action is front-loaded ahead of the return-value and eligibility details. Every sentence carries distinct information.

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

Completeness4/5

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

With no output schema, the description correctly explains the return value (tabId and how to use it) and states the eligibility restriction. The remaining gap is what state the editor/tab ends up in and whether repeated opens stack tabs.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters and the baseline is 3. The description adds indirect meaning only (libraryUuid must point at a personal/team/project library, and the returned tabId is a document UUID); it says nothing about instance_id or splitScreenId.

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

Purpose5/5

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

States a specific verb+resource ('Open a library footprint in the EasyEDA editor as a tab') and pins the scope with a hard constraint ('only footprints in a personal, team or project library'). The footprint/symbol distinction is unambiguous against lib_symbol_open_in_editor, which shares the same verb.

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

Usage Guidelines4/5

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

Gives clear when-to-use context plus a chaining recipe: take the returned tabId and feed it to document_get_source / document_save_to_file as the document UUID. It also states a negative condition (system-library footprints are refused). It does not name an alternative tool for cases where the footprint should not be opened interactively.

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

lib_footprint_update_document_sourceA
Destructive

Replace a library footprint's entire source. IRREVERSIBLE: no undo, and no backup snapshot is taken (library assets are not documents). Read and save the current source first (lib_footprint_open_in_editor + document_save_to_file). The footprint must live in a library you can write to (personal/team/project). Returns boolean success.

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the footprint (see lib_get_project_library_uuid / lib_get_personal_library_uuid)
footprintUuidYesFootprint UUID
documentSourceYesNew footprint source (same format document_get_source returns for the open footprint)

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the destructiveHint=true annotation: states it is IRREVERSIBLE, that no undo and no backup snapshot exist because library assets aren't documents, spells out the required library permission level, and declares the boolean return. This is exactly the extra context the annotation bar rewards.

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

Conciseness4/5

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

Front-loads the irreversible warning first, then workflow, then precondition, then return value - well ordered. It is somewhat dense with parentheticals, but every sentence carries load; no filler.

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

Completeness5/5

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

A destructive mutation with no output schema, yet the description covers safety, required permissions, a safe pre-step, and the return type. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds real meaning for libraryUuid (must be a library you can write to - personal/team/project) and ties documentSource to the format document_get_source returns, which is slightly beyond the schema text.

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

Purpose5/5

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

Precise verb+resource: 'Replace a library footprint's entire source.' The 'entire source' scope and the 'footprint' (vs the symbol sibling lib_symbol_update_document_source, and vs document_set_source on the open document) let an agent 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.

Usage Guidelines4/5

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

Gives a clear precondition workflow ('Read and save the current source first' via lib_footprint_open_in_editor + document_save_to_file) and a gating condition ('must live in a library you can write to'). It does not state explicit when-not-to-use or name the update-in-place sibling as an 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.

lib_get_all_librariesB
Read-onlyIdempotent

Get a list of all available component libraries with their UUIDs and names

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered without the description. The description adds only the return shape (UUIDs and names), which is modestly useful since no output schema exists. No pagination, ordering, or size caveats 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.

Conciseness4/5

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

A single, front-loaded sentence that names the resource and the returned fields with no filler. It is appropriately sized for a simple read tool, though there is no additional structure because there is nothing else to say.

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

Completeness3/5

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

For a read-only, zero-required-param list tool whose annotations cover safety, this is close to sufficient, and it even describes the return payload in the absence of an output schema. The gap is the absence of routing guidance among the several sibling library-UUID tools, which is the main thing an agent would need.

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

Parameters3/5

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

Schema description coverage is 100% and the single instance_id parameter is fully documented in the schema, including the auto-selection rule and the list_instances pointer. The description adds nothing beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource: 'Get a list of all available component libraries with their UUIDs and names.' The word 'all' and 'list' distinguish it as a bulk enumeration rather than a single-record lookup. It does not, however, explicitly differentiate itself from sibling UUID getters like lib_get_personal_library_uuid or lib_get_system_library_uuid.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance is given. It never mentions the alternatives (lib_get_personal_library_uuid, lib_get_project_library_uuid, lib_get_system_library_uuid) that an agent must choose between to fetch library identifiers. The 'all' phrasing offers an implicit contrast but no directive.

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

lib_get_deviceA
Read-onlyIdempotent

Get detailed information about a specific device by its UUID, including symbol, footprint, and all properties

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceUuidYesThe device UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidNoLibrary UUID (omit to search all libraries)

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that the response includes symbol, footprint, and 'all properties', but says nothing about error behavior when the UUID is not found or cross-instance/library resolution semantics.

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

Conciseness4/5

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

A single, well-shaped sentence with the key lookup identifier front-loaded and the return contents trailing. No filler or redundancy, though the trailing clause is a light restatement of expected output rather than new guidance.

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

Completeness4/5

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

For a single-entity getter with full schema coverage and annotations carrying the safety profile, the description is largely sufficient. In the absence of an output schema it helpfully names the returned fields (symbol, footprint, properties), which covers most of what an agent needs before calling.

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

Parameters3/5

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

With 100% schema description coverage, all three parameters (deviceUuid, instance_id, libraryUuid) are already documented in the schema, including multi-instance handling. The description only restates the UUID lookup and adds no format, scoping, or resolution meaning beyond it, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (Get) and resource (device) with the lookup key (UUID) and the returned content (symbol, footprint, properties). It is clearly distinguishable from lib_search_device and lib_get_device_by_lcsc, though the description does not name 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.

Usage Guidelines3/5

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

Usage is implied rather than stated: 'by its UUID' signals you need a device UUID in hand. No explicit when-to-use, prerequisites, or routing to the sibling search/lookup tools is given, so the agent must infer this is the follow-up to a search.

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

lib_get_device_by_lcscB
Read-onlyIdempotent

Get device(s) by LCSC C-number(s). Useful for finding specific components like "C17414" for a 2.2k resistor.

ParametersJSON Schema
NameRequiredDescriptionDefault
lcscIdsYesSingle LCSC ID (e.g. "C17414") or array of LCSC IDs
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidNoLibrary UUID (omit to search all libraries)

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds nothing behavioral beyond that — no note on multi-instance targeting behavior (the instance_id requirement) or what a multi-ID query returns. With annotations doing all the work, the description contributes almost no extra context.

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

Conciseness5/5

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

Two compact sentences with the core operation front-loaded and a concrete example following immediately; no filler or redundancy.

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

Completeness4/5

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

For a simple read-only lookup with full schema coverage and annotations covering the safety profile, the description is nearly complete. A brief mention that results span libraries unless libraryUuid is supplied would close the remaining gap, but nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (lcscIds, instance_id, libraryUuid) are already documented in the schema, including the single-vs-array form and the multi-instance condition. The description's C-number example duplicates the schema's own example, adding no new syntax or format detail, so baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Get device(s)') and identifies the lookup key ('by LCSC C-number(s)'), which distinguishes it from siblings like lib_get_device and lib_search_device that presumably key off other fields. It does not explicitly name those siblings, so the differentiation is implicit rather than spelled out.

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

Usage Guidelines3/5

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

The example ('finding specific components like "C17414" for a 2.2k resistor') illustrates a valid use case, giving implied guidance on when to reach for this tool. However, it never states when NOT to use it or points to lib_get_device / lib_search_device as the alternatives for non-LCSC lookups.

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

lib_get_personal_library_uuidA
Read-onlyIdempotent

Get the UUID of the user's personal library (returns undefined on private deployments)

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value by disclosing that the call returns undefined on private deployments, an edge case not captured by annotations and useful given no output schema exists.

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

Conciseness5/5

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

A single tight sentence with the core purpose front-loaded and the caveat parenthetically appended. No filler or redundancy to trim.

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

Completeness4/5

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

With full annotation coverage, a fully documented parameter schema, and only one trivial argument, the description covers what an agent needs, including the private-deployment caveat. It could optionally note the UUID's format or relationship to the other library-UUID tools, but nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single instance_id parameter, and the schema already explains the 8-char hex format and the omit-when-single-instance rule. The description adds nothing beyond that, so the baseline 3 applies.

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

Purpose5/5

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

The description names a specific verb (Get) and a precise resource (the user's personal library UUID), which is self-differentiating from the nearby lib_get_system_library_uuid and lib_get_project_library_uuid siblings by the 'personal' qualifier alone. An agent can tell exactly what it retrieves without opening the schema.

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

Usage Guidelines3/5

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

The resource name implies when to use it (when you need the personal library's identifier), but there is no explicit when-to-use/when-not guidance or reference to the system/project library UUID alternatives in the sibling set. Usage is inferable but not stated.

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

lib_get_project_library_uuidA
Read-onlyIdempotent

Get the UUID of the current project's library (returns undefined if no project is open)

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, closed-world read, so the bar is low. The description still adds real value by disclosing the edge-case return behavior (undefined when no project is open), which the annotations cannot express.

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

Conciseness5/5

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

One front-loaded sentence with a parenthetical for the edge case; every clause earns its place and nothing is padded.

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

Completeness4/5

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

For a parameterless getter with no output schema, the definition covers the one thing an agent needs beyond the schema: what comes back when there is no open project. Missing only an explicit pointer to the sibling UUID getters.

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

Parameters3/5

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

The single instance_id parameter is fully documented in the schema (100% coverage), including the multi-instance rule and the list_instances pointer. The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (get) and resource (UUID of the current project's library), which is more precise than the sibling getters. It does not, however, explicitly distinguish itself from lib_get_personal_library_uuid or lib_get_system_library_uuid, leaving the agent to infer the difference from the 'project' qualifier alone.

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

Usage Guidelines3/5

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

Usage is only implied: the tool is clearly the project-scoped variant, and the parenthetical hints at a precondition ('if no project is open'), but no alternatives are named and no explicit when-to-use guidance is given.

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

lib_get_system_library_uuidA
Read-onlyIdempotent

Get the UUID of the system (built-in) component library

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only the resource scope ('system built-in') and does not disclose any further behavioral traits such as UUID stability or required auth; with annotations covering the basics, this is minimal but adequate.

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

Conciseness5/5

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

A single sentence that is front-loaded with the verb and resource. Every word earns its place with zero redundancy.

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

Completeness5/5

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

For a simple read-only getter with comprehensive annotations, full schema coverage, and no output schema, the description states the returned value (the UUID) and the resource scope. 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.

Parameters3/5

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

Schema description coverage is 100% and the single optional instance_id parameter is fully documented in the schema, including when to omit it and a reference to list_instances. The description adds no meaning beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb 'Get' and resource 'UUID of the system (built-in) component library'. The phrase 'system (built-in)' explicitly separates it from sibling tools lib_get_personal_library_uuid and lib_get_project_library_uuid, so an agent can select it without opening schemas.

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

Usage Guidelines2/5

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

No when-to-use, prerequisites, or alternatives are stated. The description does not tell the agent when to choose this over lib_get_all_libraries or the personal/project UUID getters; usage must be inferred from the name alone.

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

lib_search_deviceA
Read-onlyIdempotent

Search the component library for devices by keyword. Returns a list of matching components with their UUIDs, names, descriptions, and package info.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesSearch keyword (e.g. "2.2k resistor", "STM32F103", "0805 capacitor")
pageNoPage number (0-based)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
itemsOfPageNoNumber of results per page (default varies)
libraryUuidNoLibrary UUID to search in (omit to search all libraries)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds return-field context (UUIDs, names, descriptions, package info) but discloses nothing about pagination behavior, result caps, or rate/instance constraints beyond what the schema already says.

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

Conciseness5/5

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

Two sentences, zero filler, with the action stated first and the return shape second. Nothing is redundant or padded.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields, and the schema fully documents the five parameters. It is adequate for a read-only search tool; only pagination/default-result behavior is left unstated, which is a minor gap given the page/itemsOfPage params.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters including the 0-based page, instance_id, and libraryUuid are already documented in the schema. The description's 'by keyword' merely restates the key parameter, adding no format or syntax detail beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

Names a specific verb (Search) and resource (component library devices) plus the key mechanism (by keyword). It is distinguishable from lib_get_device and lib_get_device_by_lcsc by retrieval mode, though it never names those siblings explicitly, which keeps it just short of a 5.

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

Usage Guidelines3/5

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

'by keyword' implies the intended use case (find devices when you don't already have an identifier), but the description states no when-to-use condition, no when-not-to-use, and no alternatives such as lib_get_device or lib_get_device_by_lcsc. Usage is inferred 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_symbol_copyA

Copy a library symbol from one library to another (e.g. system → personal). Returns the new symbol UUID. Fails if newSymbolName collides in the target library.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolUuidYesSource symbol UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesSource library UUID
newSymbolNameNoName for the copy (defaults to source name; collisions fail)
targetLibraryUuidYesDestination library UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-readonly, non-destructive, non-idempotent. The description adds genuine value beyond them: it discloses the return value (the new symbol UUID) and a specific failure condition (name collision in the target library). It does not cover auth/permission requirements, but the failure-mode and return disclosure are useful additions.

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

Conciseness5/5

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

Three short sentences with zero waste; the core action is front-loaded and the return value and failure condition follow logically. Every sentence earns its place.

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

Completeness4/5

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

With no output schema, the description compensates by naming the return value (new symbol UUID) and the collision failure path. Combined with the fully-covered input schema, an agent has what it needs, though permission/prerequisite context is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema (including the instance_id conditional behavior and newSymbolName default). The description only echoes the collision semantics already stated in the newSymbolName schema description, adding no new parameter-level meaning.

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

Purpose5/5

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

States a specific verb (copy) and resource (library symbol) plus directionality (one library to another) with a concrete example (system → personal). This clearly distinguishes it from the sibling lib_device_copy, which operates on devices rather than symbols.

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

Usage Guidelines3/5

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

The description implies the scenario (moving/copying a symbol between libraries, e.g. system → personal) but never states when to use this instead of alternatives such as lib_device_copy or lib_symbol_update_document_source. Usage is inferable but not explicit.

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

lib_symbol_deleteA
Destructive

Delete a library symbol. IRREVERSIBLE: no undo, and no backup snapshot is taken (library assets are not documents). Fetch and save the symbol source with lib_symbol_get first if you may need to restore it. Returns boolean success.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolUuidYesSymbol UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the symbol

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds material context the annotations cannot: no undo, no backup snapshot is taken, and the reason (library assets are not documents). It also states the return shape (boolean success), which is useful given there is no output schema.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the irreversible consequence and followed by the mitigating action and return type. No filler; every sentence changes agent behavior.

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

Completeness5/5

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

For a destructive, no-output-schema tool this is complete: it covers irreversibility, the absence of backups, the recovery workflow, and the boolean return value. Nothing an agent needs before calling it is missing.

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

Parameters3/5

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

Schema description coverage is 100%, including the non-obvious instance_id auto-selection rule and the list_instances referral, so the schema carries parameter meaning. The description adds nothing parameter-specific, which is the correct baseline when the schema already does this work.

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

Purpose5/5

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

The first sentence states a precise verb+resource ('Delete a library symbol') and the scope is unambiguous against siblings like lib_symbol_get and lib_device_delete. An agent can distinguish it immediately without opening the schema.

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

Usage Guidelines5/5

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

It names the safety pre-step and the alternative tool explicitly: 'Fetch and save the symbol source with lib_symbol_get first if you may need to restore it.' That routes the agent to the right sibling under a stated condition rather than leaving it to inference.

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

lib_symbol_getA
Read-onlyIdempotent

Get a library symbol's metadata (name, classification, description) by UUID. Does NOT return the .esym source — use lib_symbol_open_in_editor + document_get_source for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolUuidYesSymbol UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidNoLibrary UUID (defaults to system library)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context by scoping the return payload (metadata only, no .esym source) and routing the caller elsewhere. It stops short of describing errors or behavior when the UUID is not found, so a 4 rather than a 5.

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

Conciseness5/5

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

Two sentences, zero waste, and the primary action is front-loaded ahead of the negative/alternative clause. Nothing here could be deleted without losing routing value.

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

Completeness5/5

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

No output schema exists, and the description compensates by enumerating the returned fields (name, classification, description) and explicitly excluding the source body. Combined with the fully documented input schema and read-only annotations, 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.

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (including instance_id's multi-instance rule and libraryUuid's default) are already documented in the schema. The description only restates 'by UUID' and adds no format, default, or edge-case meaning beyond that. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get a library symbol's metadata') plus the key ('by UUID'), and explicitly distinguishes itself from source retrieval by naming what it does NOT return. An agent can separate it from lib_symbol_open_in_editor and document_get_source without reading any schema.

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

Usage Guidelines5/5

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

The description names the alternative path explicitly ('use lib_symbol_open_in_editor + document_get_source') for the case the agent actually wants source content, which is the most likely reason to call the wrong sibling. That is an explicit when-not plus named alternatives.

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

lib_symbol_open_in_editorA
Idempotent

Open a library symbol in the EasyEDA editor as a tab. Returns the new tabId — use that as the document UUID for document_get_source. Only symbols in a personal, team or project library can be opened; EDA Pro refuses system-library symbols (the call errors rather than returning a tabId), so lib_symbol_copy one into your own library first.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolUuidYesSymbol UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the symbol
splitScreenIdNoSplit screen ID (defaults to last-focused split)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (not read-only, not destructive, idempotent), and the description adds behavior beyond them: it creates an editor tab as a side effect, returns a tabId, discloses the failure mode for system-library symbols (error instead of a tabId), and links the return value to a downstream tool. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences, zero filler, front-loaded with purpose and return value before the constraint and fallback. Every clause earns its place.

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

Completeness5/5

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

No output schema exists, so the description carries the return-value burden and does so (tabId and its use with document_get_source). Combined with the full schema coverage and annotation safety hints, an agent has everything needed to call this correctly or route to lib_symbol_copy when the call would fail.

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

Parameters3/5

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

Schema description coverage is 100% and all four parameters are documented in the schema (including instance_id selection and splitScreenId defaults), so the baseline of 3 applies. The description adds no parameter-level detail such as symbolUuid vs libraryUuid syntax or format beyond what the schema already provides.

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

Purpose5/5

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

States a specific verb and resource ('Open a library symbol in the EasyEDA editor as a tab') and immediately distinguishes the outcome (returns a new tabId). An agent can tell it apart from siblings like lib_symbol_copy and lib_footprint_open_in_editor without opening either schema.

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

Usage Guidelines5/5

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

Explicitly states the precondition that only personal, team, or project library symbols can be opened, that system-library symbols cause an error, and names the alternative (lib_symbol_copy into your own library first). This is exactly the when/when-not/alternative 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.

lib_symbol_update_document_sourceA
Destructive

Replace a library symbol's entire .esym source. IRREVERSIBLE: no undo, and no backup snapshot is taken (library assets are not documents). Fetch and save the current source with lib_symbol_get first if you may need to restore it. The symbol must live in a library you can write to (personal/team/project). Returns boolean success.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolUuidYesSymbol UUID
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
libraryUuidYesLibrary UUID containing the symbol
documentSourceYesNew .esym source (NDJSON, same format as document_get_source)

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses irreversibility, that no undo exists, that no backup snapshot is taken (because library assets are not documents), the write-permission requirement, and the boolean return. This is exactly the destructive-operation context an agent needs before committing.

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

Conciseness5/5

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

Front-loaded with the action, then the irreversibility warning, then the prerequisite and return type. Four tight sentences with no filler; every clause carries actionable information.

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

Completeness5/5

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

For a destructive mutation with no output schema, the description covers the safety posture, the recovery path, the permission prerequisite, and the return value. There is nothing an agent needs to call this correctly that is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (symbolUuid, libraryUuid, documentSource, instance_id) are already documented in the schema. The description adds no format or syntax detail beyond it, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource: 'Replace a library symbol's entire .esym source.' The scope (entire source, symbol-level) is precise and distinguishes it from footprint/document variants and from lib_symbol_get, which it explicitly positions as the read counterpart.

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

Usage Guidelines4/5

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

Gives clear operating context: it must target a writable library (personal/team/project), and it prescribes the recovery workflow ('Fetch and save the current source with lib_symbol_get first'). It stops short of naming when-to-use alternatives like document_set_source, so an explicit exclusion is missing.

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

list_instancesA
Read-onlyIdempotent

List all connected EasyEDA Pro instances with their current state (project, active document, open tabs). Use this to find the instance_id you need for other tools when multiple instances are connected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds useful value by disclosing what the read returns (per-instance project, active document, open tabs), which matters since there is no output schema.

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

Conciseness5/5

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

Two sentences, zero waste, with the purpose front-loaded and the routing rationale second. Nothing is repeated from the schema or annotations.

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

Completeness5/5

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

For a zero-parameter, read-only list tool with no output schema, the description covers what it does, when to call it, and the shape of the result. An agent has everything needed 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.

Parameters4/5

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 implies there is nothing to supply and focuses instead on what the call yields.

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

Purpose5/5

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

States a specific verb (List) and resource (connected EasyEDA Pro instances) and enumerates the state fields returned (project, active document, open tabs). No sibling tool lists instances, so the distinction is unambiguous from the name plus this scoping sentence.

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

Usage Guidelines4/5

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

Explicitly states the use case: find the instance_id needed by other tools when multiple instances are connected. There are no competing alternatives to exclude, but the trigger condition is spelled out clearly rather than implied.

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

pcb_canvas_originA
Idempotent

Get or set the canvas origin offset relative to data origin. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes"get" to read, "set" to write
offsetXNoX offset (required for set)
offsetYNoY offset (required for set)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false, so the safety profile is known. The description adds useful context on coordinate units and frame, which is valuable. It doesn't state what happens to existing content when the origin is changed or whether the change persists to file, so it goes modestly beyond annotations without fully covering behavioral effects.

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

Conciseness4/5

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

Four sentences, front-loaded with the core purpose, followed by units/frame then alternative routing. No filler; each sentence carries meaning, though the explicit sentence recommending use of this tool to read/set the offset is somewhat redundant with the opening sentence.

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

Completeness4/5

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

For a get/set origin tool with no output schema, the description gives units, coordinate frame, and the alternative conversion tool – enough for an agent to call it correctly. It doesn't describe the return shape for the 'get' action or persistence semantics, which are minor given annotations and schema coverage.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all five parameters. The description adds a coordinate-frame contract (mil, +X rightward, +Y upward) that supplements the plain offsetX/offsetY parameter descriptions, but does not expand on 'action', 'document', or 'instance_id' beyond what the schema says. Baseline 3 is correct.

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

Purpose5/5

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

States a specific verb+resource ('canvas origin offset relative to data origin') and distinguishes its get/set dual behavior. The units and coordinate frame (+X rightward, +Y upward, mil) make it unambiguous compared to siblings like pcb_convert_coordinates.

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

Usage Guidelines4/5

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

Explicitly names the sibling pcb_convert_coordinates and the condition that selects it ('to convert between canvas and data coordinates'), giving clear alternative routing. It does not spell out when to prefer 'get' vs 'set', but the action enum in the schema covers that.

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

pcb_clear_selectionB
Idempotent

Clear all selection in the PCB editor

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), which matches 'clear all selection' — clearing is a state change but non-destructive and idempotent. The description adds only the 'all' scope and no new behavioral context, so it neither contradicts nor enriches the annotations.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is appropriately terse for a simple state-clearing tool, though it forgoes the opportunity to add any routing or context.

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

Completeness4/5

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

For a low-complexity selection-clearing tool with no output schema and annotations covering the safety profile, plus 100% schema coverage, the description is sufficient to invoke it correctly. Only usage context is missing.

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

Parameters3/5

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

Schema coverage is 100%: both 'document' (UUID with auto-switch semantics) and 'instance_id' are fully documented in the schema. The description adds no parameter detail, so the baseline 3 applies since the schema already does the work.

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

Purpose4/5

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

States a specific verb+resource+scope: 'clear' the 'selection' in the 'PCB editor'. An agent can immediately tell this apart from pcb_get_selected (read) and pcb_select_net (set). It does not name alternatives explicitly, but the action is unambiguous.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as pcb_get_selected or pcb_select_net. The single sentence only describes the action, leaving the agent to infer context.

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

pcb_convert_coordinatesA
Read-onlyIdempotent

Convert between canvas coordinates and data coordinates. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
directionYesConversion direction
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare this is a safe, idempotent, non-destructive read, so the safety profile is covered. The description adds genuinely useful non-obvious context: units are mil (1 mil = 0.001 inch), coordinates are relative to the canvas origin, and +X/+Y point right/up. It does not restate any annotation and does not contradict them.

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

Conciseness4/5

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

Front-loaded with the core purpose, followed by the unit/origin conventions an agent needs. The final clause ('Use ... pcb_convert_coordinates to convert between canvas and data coordinates') is mildly circular since it restates the first sentence, a small redundancy in an otherwise tight description.

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

Completeness4/5

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

No output schema exists, but the description need not explain the return value for a symmetric conversion tool. It covers units, origin, and axis conventions well; the only untouched behaviors (document auto-switch, instance auto-selection) are already fully documented in the schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema's bare 'X coordinate'/'Y coordinate': units in mil and the origin-relative axis convention that determines how the numeric inputs must be interpreted. The direction enum values are self-explanatory and need no further gloss.

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

Purpose5/5

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

States a specific verb and resource — converting between canvas and data coordinates — and immediately pins down the unit system (mil, relative to canvas origin) and axis orientation. It also names the related sibling pcb_canvas_origin, so an agent can separate this tool from the origin-management 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.

Usage Guidelines4/5

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

Gives clear context for when this tool is relevant (any canvas/data coordinate translation) and points to pcb_canvas_origin for the complementary origin-offset task. It stops short of explicit when-not guidance or an explanation of when each direction value should be chosen, but the routing 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_create_arcA

Create an arc track segment on the PCB. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesNet name
endXYesEnd X coordinate
endYYesEnd Y coordinate
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
startXYesStart X coordinate
startYYesStart Y coordinate
arcAngleYesArc angle in degrees
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineWidthNoTrack width
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive write. The description adds the coordinate-space convention (canvas mils, +X right, +Y up), which is real value, but discloses nothing about failure modes, whether a save is required afterward, or how the new primitive is returned. Adds some context beyond annotations, not rich behavioral detail.

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

Conciseness4/5

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

Three sentences, front-loaded with the action, followed by units and a pointer to helper tools. No filler, though the helper-tool sentence could be tightened. Appropriate length for a 10-parameter primitive-creation tool.

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

Completeness4/5

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

For a mutation tool with 10 parameters, no output schema, and full schema coverage, the description covers the critical ambiguity (units and coordinate frame) that the schema omits. It does not address the optional lineWidth or multi-instance behavior, but the schema and sibling guidance largely cover those.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the schema's own parameter descriptions are thin ('Start X coordinate', 'Track width') and omit units entirely. The description compensates by specifying that coordinates and lengths are in mil and defining the axis orientation, which the schema does not.

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

Purpose4/5

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

The description states a specific verb+resource: 'Create an arc track segment on the PCB.' An agent immediately knows this produces an arc primitive rather than a straight track. It does not explicitly distinguish itself from close siblings like pcb_create_track or pcb_create_polyline_track, but the arc/segment distinction is clear from the wording.

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

Usage Guidelines3/5

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

The description names two helper tools (pcb_canvas_origin, pcb_convert_coordinates) for coordinate handling, which is useful routing guidance. However, it never states when to choose this tool over the other track-creation siblings (pcb_create_track, pcb_create_polyline_track), so usage vs alternatives 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_fillA

Create a fill region on the PCB. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoNet name
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
polygonYesEither an ergonomic point array [{x, y}, ...] (minimum 3 points; the ring is closed automatically and converted to L-mode), or a raw EasyEDA L-mode source array [x1, y1, "L", x2, y2, ..., x1, y1] — coordinates of the first point, then the "L" token, then the remaining points (closed: last point repeats the first)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineWidthNoLine width
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds the coordinate frame and units, but says nothing about whether the fill can be undone, whether a net association is required, or what happens on overlap with existing copper.

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

Conciseness4/5

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

The purpose is front-loaded in the first clause, followed by coordinate semantics and cross-references. The sentence about lengths ('widths, diameters') is generic boilerplate that does not apply to a polygon fill, a small amount of wasted text.

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

Completeness3/5

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

There is no output schema, so the description carries the burden of explaining results and side effects, which it does not. Coordinate semantics are well covered, but for a geometry-creating mutation it omits return value, undo/reversibility, and interaction with existing fills.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds genuinely new meaning the schema lacks: coordinates are in mil (0.001 inch), relative to canvas origin, +X rightward and +Y upward. That unit/frame clarification is directly needed to supply a correct polygon.

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

Purpose4/5

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

States a specific verb and resource ('Create a fill region on the PCB'), which is clear on its own. However, it never distinguishes the tool from close siblings like pcb_create_pour or pcb_create_region, so an agent must guess which of the three creation tools to pick.

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

Usage Guidelines3/5

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

The description routes the agent to pcb_canvas_origin and pcb_convert_coordinates for the coordinate system, which is useful operational guidance. It gives no when/when-not advice relative to pcb_create_pour or pcb_create_region, so selection between the geometry-creation siblings 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_create_padA

Create a standalone pad on the PCB. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
netNoNet name
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
rotationNoRotation angle in degrees
padNumberYesPad number/name
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-idempotent, non-destructive write. The description adds the coordinate origin and unit semantics, which go beyond the annotations, but it says nothing about atomicity, repeat-invocation behavior (relevant given idempotentHint=false), 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.

Conciseness4/5

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

Four sentences, all front-loaded with the action first and coordinate semantics second; each sentence carries information the schema lacks. No wasted filler, though 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.

Completeness4/5

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

For a mutation tool with no output schema, the description covers the highest-risk ambiguity (units and coordinate reference frame) and routes to helper tools. It is close to complete, missing only a note on return/failure behavior, which is minor given the annotation coverage.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully adds unit and axis semantics (mil units, +X rightward, +Y upward, relative to canvas origin) that the terse schema ('X coordinate') does not convey. That extra meaning pushes it above baseline.

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

Purpose4/5

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

States a specific verb+resource ('Create a standalone pad on the PCB'), and the word 'standalone' usefully hints this is a free pad rather than one owned by a footprint. It does not explicitly differentiate itself from creation siblings like pcb_create_via or pcb_create_track, so it falls just short of a 5.

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

Usage Guidelines3/5

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

The description gives genuine usage context by pointing to pcb_canvas_origin and pcb_convert_coordinates for handling the coordinate system, which is the main source of error here. However it offers no explicit when-to-use vs when-not guidance or alternatives for the creation act itself, leaving that implied.

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

pcb_create_polyline_trackA

Create a multi-segment polyline track defined by a series of points. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesNet name for the track
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
polygonYesArray of points [{x, y}, ...] defining the polyline path
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineWidthNoTrack width
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this is a non-destructive, non-idempotent write operation, so the safety profile is covered. The description adds coordinate-frame and unit context but says nothing about side effects, whether existing geometry is replaced, or how net/layer assignment behaves on execution.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by tightly scoped unit/coordinate clarification and two tool cross-references. Every sentence carries information; only the coordinate-system detail is slightly verbose but still earns its place.

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

Completeness4/5

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

For a write tool with no output schema, the description supplies the unit convention, coordinate frame, and pointers to origin/conversion helpers that an agent needs to build correct point arrays. It omits the semantics of net/layer assignment, but the schema documents those adequately.

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

Parameters4/5

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

Schema coverage is 100%, setting a baseline of 3, but the description adds meaning the schema lacks: coordinates and widths are in mil (1 mil = 0.001 inch), relative to the canvas origin with +X rightward and +Y upward. This is genuinely additive for the polygon and lineWidth parameters.

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

Purpose4/5

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

States a specific verb and resource: 'Create a multi-segment polyline track defined by a series of points.' The 'multi-segment polyline' qualifier implicitly distinguishes it from the sibling pcb_create_track, but it does not name that alternative explicitly.

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

Usage Guidelines3/5

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

Provides useful context (coordinate system, units) and cross-references pcb_canvas_origin and pcb_convert_coordinates for coordinate handling. However, it never states when to choose this over pcb_create_track or other creation tools, leaving the primary routing decision to inference.

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

pcb_create_pourA

Create a copper pour region on the PCB. Two upstream EDA bugs to note: (1) pours reflow using the design-rule snapshot taken when the document was opened, so rules written via the API do not affect reflow until the PCB document is closed and reopened (pro-api-sdk issue #34); reopen before rebuilding pours after rule changes. (2) Rebuilding a pour does not cut internal-plane anti-pads for different-net vias created after plane generation (issue #32); regenerate the plane instead. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesNet name for the pour
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
polygonYesEither an ergonomic point array [{x, y}, ...] (minimum 3 points; the ring is closed automatically and converted to L-mode), or a raw EasyEDA L-mode source array [x1, y1, "L", x2, y2, ..., x1, y1] — coordinates of the first point, then the "L" token, then the remaining points (closed: last point repeats the first)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
pourNameNoName for the pour region
lineWidthNoLine width
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
pourPriorityNoPour priority (higher = poured first)
preserveSilosNoWhether to preserve copper islands
pourFillMethodNoFill method

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare it is a non-read-only, non-idempotent, non-destructive mutation, so the safety bar is partly covered. The description adds genuinely non-obvious behavior: pours reflow against a stale design-rule snapshot until the PCB is reopened (issue #34) and pour rebuilds miss anti-pads for post-plane vias (issue #32). It does not state whether repeated calls create duplicate pours, which matters given idempotentHint=false.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by actionable bug caveats and unit conventions. It is somewhat long and splits the unit convention across two sentences (coordinates, then lengths), but every sentence carries information an agent would otherwise have to discover the hard way.

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

Completeness4/5

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

For a 10-parameter mutation tool with no output schema, the description covers units, coordinate frame, known upstream pitfalls, and the helper tools for origin/conversion. Remaining gaps (no return-value note, no idempotency note) are minor given the fully documented schema and existing annotations.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds real semantic value beyond the schema: coordinates are canvas coordinates in mil relative to the canvas origin, +X rightward and +Y upward, and lengths are also in mil. It also points to pcb_convert_coordinates for canvas/data conversion, which the schema does not mention.

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

Purpose4/5

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

"Create a copper pour region on the PCB" gives a specific verb and resource, so the agent knows precisely what operation is performed. However, it never distinguishes this from close siblings like pcb_create_region or pcb_create_fill, which an agent could easily confuse with a pour.

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

Usage Guidelines3/5

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

There is no explicit when-to-use or when-not guidance, and the near-siblings (pcb_create_region, pcb_create_fill) are not named as alternatives. It does provide operational guidance (reopen the document before rebuilding pours after rule changes) and routes the agent to pcb_canvas_origin / pcb_convert_coordinates for coordinates, so usage is implied but not delimited.

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

pcb_create_regionA

Create a design rule region (keepout/constraint area) on the PCB. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
polygonYesEither an ergonomic point array [{x, y}, ...] (minimum 3 points; the ring is closed automatically and converted to L-mode), or a raw EasyEDA L-mode source array [x1, y1, "L", x2, y2, ..., x1, y1] — coordinates of the first point, then the "L" token, then the remaining points (closed: last point repeats the first)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
ruleTypeNoRule type(s) for the region
lineWidthNoOutline width
regionNameNoName for the region
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this is a non-idempotent, non-destructive write in a closed world. The description adds useful behavioral context about the coordinate space (canvas coordinates, +X right/+Y up, mil units) and auto-closing of polygons, but does not describe side effects like document auto-switching or failure modes beyond what annotations cover.

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

Conciseness4/5

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

Three sentences, front-loaded with the purpose, then coordinate semantics, then helper-tool routing. Every sentence earns its place; the only mild cost is that the coordinate detail could be trimmed for brevity.

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

Completeness4/5

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

For a 7-parameter, 3-required write tool with 100% schema coverage and no output schema, the description covers the highest-risk ambiguity (coordinate system and units) and points to companion tools. It omits return behavior and error handling, but annotations carry the safety profile, making this largely complete.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning the schema lacks: the coordinate units (mil) and the canvas coordinate orientation for polygon points, plus that lengths such as lineWidth are also in mil. The schema only types these as bare numbers, so this compensates for the ambiguity.

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

Purpose4/5

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

States a specific verb (Create) and resource (design rule region) with a clarifying parenthetical '(keepout/constraint area)' that distinguishes it from copper-area siblings like pcb_create_pour and pcb_create_fill. It does not explicitly name or route away from those siblings, but the resource is specific enough to be actionable.

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

Usage Guidelines3/5

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

The description gives real coordinate-handling guidance by naming pcb_canvas_origin and pcb_convert_coordinates for origin management and coordinate conversion. However, it offers no when-to-use vs when-not guidance relative to the other pcb_create_* tools, 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.

pcb_create_trackA

Create a single track segment (line) between two points on a specified layer and net. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesNet name for the track
endXYesEnd X coordinate
endYYesEnd Y coordinate
layerYesLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
startXYesStart X coordinate
startYYesStart Y coordinate
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineWidthNoTrack width (default uses design rules)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered by structured data. The description adds the coordinate model (canvas-relative mil, +Y upward), which is helpful, but it does not disclose what happens on failure, whether re-issuing creates duplicates, or the auto document-switch side effect beyond what the schema states.

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

Conciseness4/5

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

Front-loads the core action in the first clause, then layers on coordinate conventions and cross-references. Every sentence carries information, though the coordinate-system detail is slightly dense for a single sentence.

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

Completeness4/5

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

Covers purpose, coordinate semantics, and where to look for related operations, which is sufficient for a create tool with no output schema. Gaps are minor: no statement of the success response or the interaction between net/layer values and validation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully enriches the parameters by defining the coordinate units (mil = 0.001 inch), the axis orientation (+X right, +Y up), and that widths/diameters share the same unit — none of which is stated in the schema where coordinates are only labelled 'Start X coordinate'.

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

Purpose4/5

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

States a specific verb and resource — 'Create a single track segment (line) between two points' — on a given layer and net. The word 'single' implicitly differentiates it from the sibling pcb_create_polyline_track, but that sibling is never named, so the distinction relies on inference.

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

Usage Guidelines3/5

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

Provides useful how-to context (read the origin offset with pcb_canvas_origin, convert coordinates with pcb_convert_coordinates), which is real usage guidance for the coordinate model. However, it never states when to use this versus pcb_create_polyline_track, and gives no preconditions or exclusions.

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

pcb_create_viaA

Create a via at the specified position. Warning (upstream EDA bug, pro-api-sdk issue #32): if an internal plane (PLANE layer) has already been generated, a via on a different net created afterwards does NOT get its anti-pad cut. Rebuilding pours does not fix it; DRC reports "Plane Zone to Via". Regenerate the internal plane after placing vias. This is a fabrication risk, so do not ship until that DRC error is clear. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
netYesNet name
viaTypeNoVia type (e.g. "Through", "BlindBuried")
diameterYesVia pad diameter
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
holeDiameterYesHole diameter

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare the basic mutation profile (readOnly=false, destructive=false, non-idempotent). The description adds far more: a known upstream bug (pro-api-sdk #32) causing missing anti-pads on non-matching nets, an unfixable-by-rebuild failure mode, a named DRC symptom, and an explicit fabrication risk warning. This is exactly the kind of behavior structured fields cannot convey.

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

Conciseness4/5

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

The core action is front-loaded, followed by the critical warning, then coordinate semantics. Every sentence carries information, though the bug-warning block is dense and could be trimmed slightly without losing meaning.

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

Completeness5/5

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

For a mutating creation tool with full annotation coverage, 100% schema coverage, and no output schema, the description supplies everything an agent needs: units, coordinate system, cross-referenced helper tools, and a critical safety caveat. Nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the terse schema labels by defining units (mil, 1 mil = 0.001 inch), the coordinate frame (canvas coordinates relative to origin), axis orientation (+X right, +Y up), and that lengths share the same unit. It does not clarify viaType options or the net/instance relationship.

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

Purpose4/5

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

States a specific verb+resource ("Create a via") that is unambiguously distinct from sibling creators like pcb_create_track, pcb_create_pad, and pcb_create_pour. It does not explicitly name or contrast 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.

Usage Guidelines4/5

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

Gives strong workflow context: regenerate the internal plane after placing vias, and do not ship until the DRC error clears. It also routes the agent to pcb_canvas_origin and pcb_convert_coordinates for related tasks, though it never states when to prefer this tool over a general primitive creator.

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

pcb_delete_primitivesA
Destructive

Delete one or more PCB primitives by type and IDs. Irreversible via this API: there is no undo call. The whole document is snapshotted to the local backup repo first; the response includes the backup SHA for recovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesPrimitive ID(s) to delete
typeYesPrimitive type to delete
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, so the description goes further and adds genuinely new behavioral context: there is no undo path, the whole document is snapshotted to the local backup repo beforehand, and the response carries the backup SHA for recovery. That is exactly the recovery/risk information an agent needs before a destructive call.

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

Conciseness5/5

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

Three tight sentences: the action first, then the irreversibility constraint, then the mitigation. No filler, and the most decision-relevant information (no undo, but a backup exists) is front-loaded.

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

Completeness4/5

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

For a destructive tool with no output schema, the description covers the essential risk profile, the safety net, and what the response returns (backup SHA). It stops short of clarifying behavior on nonexistent IDs or multi-document/instance edge cases, but nothing critical for a correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (ids, type, document, instance_id) are already documented, including the enum for type and the instance_id auto-selection rule. The description only restates 'by type and IDs' and adds no format or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description gives a specific verb (Delete), resource (PCB primitives), and scope (one or more, by type and IDs), which cleanly separates it from read/modify siblings like pcb_modify_primitive and pcb_get_primitives_by_id. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

It discloses the key operating condition (irreversible, no undo) but never states when to reach for this tool versus alternatives such as pcb_modify_primitive or the sch_delete_* siblings, nor any preconditions beyond what the schema already carries. Usage is implied by the verb rather than explicitly framed.

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

pcb_exportA
Read-onlyIdempotent

Export the PCB design in various formats. Returns { fileName, data (Base64), size }.

BEFORE generating any fabrication output (gerber, odbplus, drill, pick_and_place): run pcb_run_drc (and sch_run_drc) and resolve all violations. Clearance DRC alone is not sufficient — this fork exists partly because API-drawn tracks passed clearance DRC while being electrically dead to their SMD pads; only a No-Connection/connectivity check surfaced it. Include connectivity checks in the DRC run before shipping.

Formats: dsn (for FreeRouting), gerber (manufacturing), bom (bill of materials), pick_and_place (assembly), 3d (STEP/OBJ), pdf, netlist, dxf, altium, pads, odbplus (ODB++ archive with stackup+nets), ipc_d_356 (netlist test format), flying_probe, test_point, autoroute_json, autolayout_json. Use fileType for sub-formats: "xlsx"/"csv" (bom, pick_and_place, test_point), "step"/"obj" (3d).

WARNING: response is Base64 in the MCP reply — for large outputs (gerber zips, 3d STEP) prefer pcb_export_to_file which writes straight to disk.

Most formats accept extra options forwarded as-is to the underlying EasyEDA getXxxFile call. Common ones (unit values are the literal strings "mm" / "inch" / "mil"): gerber: { unit: "mm" | "inch", colorSilkscreen, digitalFormat: {integerNumber, decimalNumber}, other: {metallicDrillingInformation, nonMetallicDrillingInformation, drillTable, flyingProbeTestingFile}, layers: [{layerId, isMirror}], objects: [...] } odbplus: { unit: "inch", otherData: {metallizedDrilledHoles, nonMetallizedDrilledHoles, drillTable, flyingProbeTestFile}, layers: [{layerId, mirror}], objects: [{objectName}] } pick_and_place:{ unit: "mm" | "mil" } 3d: { element: [...], modelMode: "Outfit" | "Parts", autoGenerateModels } bom: { template, filterOptions, statistics, property, columns } dxf: { layers: [{layerId, mirror}], objects: [...] } Omit options to get sensible defaults. For gerber and odbplus, omitting layers exports all enabled copper (Top, Bottom, and any Inner1..InnerN that are enabled) plus the standard silk/mask/paste/outline aux layers — unlike EasyEDA's raw default which silently drops inner copper even on 4L+ boards.

CAUTION: options keys cannot override the top-level document/instance_id routing fields — those always take precedence to prevent accidental cross-document export.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesExport format
optionsNoFormat-specific options passed through to the underlying EasyEDA call. See tool description for shape per format.
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
fileNameNoOutput file name
fileTypeNoSub-format (e.g. "xlsx"/"csv" for bom, "step"/"obj" for 3d)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly/idempotent/non-destructive), but the description adds substantial behavior beyond them: the exact return shape, the Base64-in-reply caveat, the fact that omitted `layers` exports all enabled copper including inner layers (contrasting EasyEDA's raw default), and the CAUTION that options keys cannot override routing fields.

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

Conciseness4/5

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

Long, but front-loaded with purpose and return shape, then organized into clear labeled sections (formats, WARNING, per-format options, CAUTION). The per-format option reference is dense but justified because the schema cannot express it; slightly heavy, keeping it from a 5.

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

Completeness5/5

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

No output schema exists, yet the description states the return shape ({ fileName, data, size }). For a 16-format export tool with a free-form options object, it covers defaults, sub-formats, the disk-write alternative, and the DRC prerequisite — 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.

Parameters5/5

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

The schema documents the top-level params but leaves `options` as an empty free-form object (additionalProperties only), so the description carries the burden of documenting per-format option shapes (gerber, odbplus, pick_and_place, 3d, bom, dxf), unit value literals, and fileType sub-format values. This is meaning well beyond the schema.

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

Purpose5/5

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

Opens with a specific verb+resource ("Export the PCB design") and immediately scopes the output formats. It also implicitly distinguishes itself from the sibling pcb_export_to_file by noting that this one returns Base64 in the reply while the sibling writes to disk.

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

Usage Guidelines5/5

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

Explicitly states prerequisites before fabrication output (run pcb_run_drc and sch_run_drc, resolve all violations, include connectivity checks) and names the alternative (pcb_export_to_file) with the condition that selects it (large gerber/3d outputs). Format-by-format guidance is given inline, so the agent knows which value to pick for which goal.

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

pcb_export_to_fileA

Export the PCB design in various formats directly to a local file path — preferred over pcb_export when the output is large (gerber/odbplus zips, 3d STEP, pdf), since it avoids shipping the bytes back through the MCP response as Base64.

BEFORE generating any fabrication output: run pcb_run_drc (and sch_run_drc) and resolve all violations. Clearance DRC alone is not sufficient — include connectivity/No-Connection checks; see pcb_export for why.

Returns { saved: path, size, originalName, format }.

Formats: same as pcb_export. See pcb_export for option shapes.

Most formats accept extra options forwarded as-is to the underlying EasyEDA getXxxFile call. Common ones (unit values are the literal strings "mm" / "inch" / "mil"): gerber: { unit: "mm" | "inch", colorSilkscreen, digitalFormat: {integerNumber, decimalNumber}, other: {metallicDrillingInformation, nonMetallicDrillingInformation, drillTable, flyingProbeTestingFile}, layers: [{layerId, isMirror}], objects: [...] } odbplus: { unit: "inch", otherData: {metallizedDrilledHoles, nonMetallizedDrilledHoles, drillTable, flyingProbeTestFile}, layers: [{layerId, mirror}], objects: [{objectName}] } pick_and_place:{ unit: "mm" | "mil" } 3d: { element: [...], modelMode: "Outfit" | "Parts", autoGenerateModels } bom: { template, filterOptions, statistics, property, columns } dxf: { layers: [{layerId, mirror}], objects: [...] } Omit options to get sensible defaults. For gerber and odbplus, omitting layers exports all enabled copper (Top, Bottom, and any Inner1..InnerN that are enabled) plus the standard silk/mask/paste/outline aux layers — unlike EasyEDA's raw default which silently drops inner copper even on 4L+ boards.

CAUTION: options keys cannot override the top-level document/instance_id routing fields — those always take precedence to prevent accidental cross-document export.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesExport format
optionsNoFormat-specific options passed through to the underlying EasyEDA call.
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
filePathYesAbsolute path to write the exported file to
fileTypeNoSub-format (e.g. "xlsx"/"csv" for bom, "step"/"obj" for 3d)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare only the safety profile (readOnly=false, destructive=false, idempotent=false); the description adds substantial behavior beyond them: the Base64-avoidance rationale, the exact return shape {saved, size, originalName, format}, the non-obvious default that omitting `layers` exports all enabled inner copper unlike EasyEDA's raw default, and a caution that options keys cannot override routing fields. No contradiction with annotations.

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

Conciseness4/5

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

Front-loaded with the routing decision and the DRC prerequisite before the format detail, and the return shape is stated compactly. It is long and repeats the 'see pcb_export' pointer twice, but nearly every sentence carries distinct information, so the length is largely earned.

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

Completeness5/5

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

For a 6-param export tool with no output schema and a free-form options bag, the description supplies everything needed: prerequisites, return shape, per-format option contracts, default-selection behavior, and a routing caution. Nothing material is missing for correct invocation.

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

Parameters5/5

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

Schema coverage is 100% for named params, but the most complex parameter (`options`) is an empty additionalProperties object in the schema, so the description is the sole source of its semantics. It documents per-format option shapes for gerber, odbplus, pick_and_place, 3d, bom, and dxf, specifies unit values as literal strings, and states default behavior — far beyond what the schema conveys.

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

Purpose5/5

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

States a specific verb+resource+destination ('Export the PCB design ... directly to a local file path') and explicitly distinguishes itself from the sibling pcb_export by naming the condition that selects it (large outputs). An agent can route between the two tools without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('preferred over pcb_export when the output is large — gerber/odbplus zips, 3d STEP, pdf') and a hard precondition ('BEFORE generating any fabrication output: run pcb_run_drc (and sch_run_drc) and resolve all violations', plus 'Clearance DRC alone is not sufficient'). Alternatives and exclusions are both named.

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

pcb_get_all_netsC
Read-onlyIdempotent

Get all net names in the PCB design

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds no behavioral context beyond that — no mention of scope (all nets vs. filtered), return format, or pagination.

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

Conciseness4/5

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

A single front-loaded sentence with no waste. It is arguably too terse rather than padded, so it earns credit for efficiency but not maximum marks.

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

Completeness3/5

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

For a simple read-only list tool with an output schema absent, the definition is minimally adequate but silent on what the returned net-name list looks like (array of strings? objects?) and whether it is scoped to the target document. A sentence on scope would close the gap.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself explains document UUID auto-switching and instance_id auto-selection in detail. The description contributes nothing about parameters, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource: retrieving all net names from the PCB design. An agent can distinguish this from pcb_get_net_primitives, pcb_get_net_rules, and pcb_get_net_length, though the description never explicitly contrasts with those siblings.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as pcb_get_net_primitives or pcb_get_net_length. The agent must infer usage from the name alone.

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

pcb_get_all_primitivesA
Read-onlyIdempotent

Get all primitives of a specific type on the PCB, with optional filters. Filters by type: component(layer), track/polyline/arc(net,layer), via(net), pad(layer,net), pour/fill(layer,net), region(layer). Component fields: primitiveId, designator, name, layer, x, y, rotation, primitiveLock, addIntoBom. Track fields: primitiveId, net, layer, startX, startY, endX, endY, lineWidth. Via fields: primitiveId, net, x, y, holeDiameter, diameter, viaType. Pad fields: primitiveId, net, layer, padNumber, x, y.

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoFilter by net name
typeYesPrimitive type to query
layerNoFilter by layer (e.g. "TopLayer", "BottomLayer")
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveLockNoFilter by lock status (true=locked only, false=unlocked only)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive, and closed-world traits, so the safety profile is set. The description adds return-shape context absent any output schema by enumerating the fields returned for component, track, via, and pad primitives, which is genuine value. It stops short of covering polyline/arc/pour/fill/region fields and says nothing about ordering or result size.

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

Conciseness4/5

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

Front-loads the one-line purpose before expanding into the type/filter matrix and field lists. The dense field enumeration is justified by the absence of an output schema, though listing fields for only some primitive types leaves the block slightly lopsided rather than wasteful.

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

Completeness4/5

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

For a 9-param query tool with no output schema but full annotation coverage, the description supplies the filter-by-type semantics and partial return-field detail an agent needs. Remaining gaps (fields for the non-enumerated primitive types, pagination/truncation behavior) are modest against what the schema and annotations already provide.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), but the description goes beyond the schema by mapping which filters are meaningful per primitive type (component→layer, track→net/layer, via→net, etc.), adding real selection guidance. The per-type field lists further clarify what 'fields' projection can target.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('all primitives of a specific type on the PCB') with the scoping qualifier that it is type-driven with optional filters. This implicitly distinguishes it from point-based (pcb_get_primitive_at_point), region-based (pcb_get_primitives_in_region), id-based, and net-based siblings, but it never names an alternative to make the routing explicit.

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

Usage Guidelines3/5

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

Usage is implied via the type/filter mapping (e.g., via filters by net, pad by layer/net), which helps the agent pick the right call. However, there is no explicit when-to-use/when-not guidance and no mention of the sibling query tools it competes with, so selection still requires inference.

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

pcb_get_component_pinsA
Read-onlyIdempotent

Get all pins/pads of a specific component by its primitive ID. Pin fields: primitiveId, padNumber, net, layer, x, y. Note (upstream EDA bug, pro-api-sdk issue #33): for components placed via the API in the current editing session, padNumber can read back null until the PCB document is closed and reopened.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe component primitive ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real value beyond them by disclosing an upstream EDA bug (padNumber reads null for API-placed components until doc reopen), which materially affects how an agent interprets results.

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

Conciseness5/5

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

Three front-loaded sentences with zero filler: purpose first, return shape second, caveat last. The caveat is longer but is the kind of detail that prevents a wrong conclusion, so it earns its space.

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

Completeness4/5

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

With no output schema, the explicit field list is a valuable substitute for return-value documentation, and the SDK bug note covers a real edge case. Only the missing when-to-use/alternative guidance keeps it short of complete for a 6-parameter tool with nested objects.

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

Parameters3/5

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

Schema description coverage is 100%, so document, instance_id, limit, filter and fields are fully documented in the schema. The description only restates the primitiveId input and then lists RETURN fields (primitiveId, padNumber, net, layer, x, y), which are not parameters, so it adds no parameter meaning beyond the schema baseline.

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

Purpose4/5

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

States a specific verb and resource ('Get all pins/pads of a specific component') plus the identifying key ('by its primitive ID'), so an agent knows exactly what is returned. It never names a sibling (e.g. sch_get_component_pins for the schematic side, or pcb_get_primitives_by_id), leaving the PCB-vs-schematic routing to inference from the tool name.

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

Usage Guidelines3/5

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

Usage is only implied: you call it when you have a component primitive ID and want its pads. There is no explicit when-to-use, no when-not-to-use, and no pointer to the schematic or generic-primitive alternatives that appear in the sibling list.

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

pcb_get_design_rulesB
Read-onlyIdempotent

Get the current PCB design rule configuration (clearance, width, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond that — nothing about scope, permissions, or return shape — so it neither strengthens nor contradicts the structured data.

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

Conciseness5/5

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

A single front-loaded sentence with the verb and resource first and a parenthetical example set that earns its place. No waste.

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

Completeness4/5

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

For a simple read-only tool with full schema coverage and no output schema, this is close to sufficient. The only mild gap is that "(clearance, width, etc.)" is vague about what the returned rule configuration actually contains, but no safety or routing information an agent needs is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the document and instance_id parameters are already fully documented in the schema. The description adds no syntax, format, or selection meaning for either parameter, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

States a clear verb+resource ("Get the current PCB design rule configuration") and illustrates the content with examples (clearance, width). It does not, however, differentiate itself from the nearby siblings pcb_get_net_rules or pcb_manage_rule_config, so an agent cannot tell which rules tool to reach for 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.

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no named alternative despite multiple overlapping siblings (pcb_get_net_rules for net-specific rules, pcb_manage_* for modification). The description offers implied usage only via its content examples.

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

pcb_get_net_lengthB
Read-onlyIdempotent

Get the total routed length of a specific net

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesThe net name
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the full safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the behavioral burden is light. The description contributes only the word 'routed,' which distinguishes from logical/manhattan length, but adds nothing about units, layer scope, or whether unrouted connections count.

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

Conciseness4/5

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

A single front-loaded sentence with zero waste and no filler. It is appropriately sized for the operation, though it is terse enough that a small clarifying clause (e.g., units) could have been added without bloat.

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

Completeness3/5

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

For a simple read tool with full schema coverage and annotations carrying the safety profile, only purpose needs stating, and it is stated. Remaining gaps are minor but real: no indication of units or whether the figure spans all copper layers versus a specific one.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter (net, document, instance_id) is well documented in the schema itself, including how to obtain the document UUID and when instance_id is required. The description adds no parameter-level meaning, so the baseline of 3 applies.

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

Purpose4/5

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

Names a specific verb (Get) and resource (total routed length of a net), which clearly distinguishes it from generic net readers like pcb_get_all_nets or pcb_get_net_primitives by indicating the returned metric. It does not, however, explicitly contrast itself with those siblings.

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

Usage Guidelines3/5

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

Usage is implied: an agent can infer it should call this when a net's routed length is needed. There is no explicit when-to-use guidance, no exclusions, and no pointer to alternatives such as pcb_get_net_rules or pcb_get_net_primitives.

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

pcb_get_net_primitivesB
Read-onlyIdempotent

Get all primitives (tracks, pads, vias, etc.) belonging to a specific net

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesThe net name to query
limitNoTruncate result array to at most N items
typesNoFilter by primitive types (e.g. ["Line", "Via", "Pad"])
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds no behavioral context beyond that (no note on result size, truncation via limit, or document auto-switching behavior, all of which live in the schema). Consistent with annotations but adds little.

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

Conciseness5/5

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

A single well-formed sentence with the scope qualifier front-loaded. Nothing padded, nothing wasted.

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

Completeness3/5

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

For a 7-parameter read tool with a nested filter object and no output schema, the description is minimally adequate. The rich schema and annotations cover the mechanical details, but the description could have warned about response size or pointed to sibling retrieval modes, which it does not.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented, and the description's only contribution is the example list of primitive types (tracks, pads, vias), which loosely maps to the 'types' filter. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb (Get) and resource (primitives) and scopes it to 'belonging to a specific net', which cleanly separates it from siblings like pcb_get_all_primitives, pcb_get_primitives_in_region, and pcb_get_primitives_by_id. It gives the reader enough to know what comes back, 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.

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of the sibling tools that retrieve primitives by other criteria. The agent must infer from the scope phrase alone that this is the net-scoped variant of the family.

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

pcb_get_net_rulesC
Read-onlyIdempotent

Get net-specific design rules

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered by structured data. The description adds nothing beyond that: no scope of rules returned, no indication of whether rules come from the active document or the netlist, no relationship to the manage_* rule tools.

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

Conciseness4/5

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

A single four-word sentence with no filler and the action front-loaded. It is efficient, though it borders on under-specification rather than optimal conciseness.

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

Completeness2/5

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

For a rules-retrieval tool surrounded by several near-identical rule siblings and with no output schema, the description does not say what the returned rules look like or how they relate to design rules versus net classes. The agent is left to guess at the tool's exact role.

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

Parameters3/5

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

Schema description coverage is 100%, so the document and instance_id parameters are fully documented in the schema, including UUID sourcing and multi-instance behavior. The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ("Get net-specific design rules"), so an agent knows it retrieves per-net rule data. However, it does not distinguish itself from the close siblings pcb_get_design_rules and pcb_manage_net_rules, leaving ambiguity about 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.

Usage Guidelines2/5

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

There is no guidance on when to use this instead of pcb_get_design_rules (global rules) or pcb_manage_net_rules (rule mutation). The agent must infer the distinction from the name alone, with no stated 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_get_primitive_at_pointA
Read-onlyIdempotent

Get the primitive at a specific point on the PCB. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely useful behavioral context on the coordinate system and units, but says nothing about what happens when no primitive exists at the point, which primitive wins if several overlap, or what the call returns (no 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.

Conciseness4/5

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

Three tight sentences, purpose front-loaded, followed by the unit/orientation contract and then related-tool pointers. No filler, though the coordinate-convention block is somewhat dense relative to the core operation.

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

Completeness3/5

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

The coordinate and unit semantics are fully covered, and the document/instance_id parameters are documented in the schema. What is missing is the return contract: with no output schema, the description should say what is returned (and what happens on a miss), which is the main remaining gap for a point-query tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description goes beyond the schema's bare 'X coordinate'/'Y coordinate' by specifying units (mil, 1 mil = 0.001 inch) and axis orientation (+X rightward, +Y upward). This resolves a real ambiguity an agent would otherwise guess at.

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

Purpose4/5

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

States a specific verb (Get) and resource (primitive) with a precise spatial scope (at a specific point on the PCB), which inherently separates it from pcb_get_all_primitives, pcb_get_primitives_by_id, and pcb_get_primitives_in_region. It does not, however, explicitly name or contrast any sibling, so an agent must 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.

Usage Guidelines3/5

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

Usage is implied by the coordinate explanation: you call this when you have a PCB canvas point. The only routing guidance given is for coordinate handling (pcb_canvas_origin, pcb_convert_coordinates), not for choosing this tool over the other primitive-retrieval siblings.

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

pcb_get_primitives_by_idB
Read-onlyIdempotent

Get one or more PCB primitives by their type and primitive ID(s)

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesPrimitive type
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdsYesSingle primitive ID or array of IDs

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare this as a read-only, idempotent, non-destructive operation. The description adds no behavioral context beyond the basic retrieval action and batch cardinality ('one or more'), and does not mention response size, filtering behavior, or document/instance targeting.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. It states the action, resource, and retrieval key directly.

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

Completeness4/5

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

The schema is rich and fully described, and annotations cover the safety profile, so the terse description is largely sufficient for invoking the tool. It does not explain return shape, but the tool name and 'Get ... primitives' phrasing make the retrieval outcome reasonably clear, and no output schema is provided.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all seven parameters, including type, primitiveIds, document, limit, fields, filter, and instance_id. The description only references type and primitive ID(s) at a high level and adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('PCB primitives') and narrows scope to retrieval by type and primitive ID(s). It is clear enough to distinguish from retrieval-by-region or retrieval-at-point siblings, though it does not explicitly name any alternative.

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

Usage Guidelines3/5

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

Usage is implied by 'by their type and primitive ID(s)': the agent should use this when it already knows the primitive type and ID(s). However, there is no explicit when-to-use guidance, no exclusions, and no named alternatives such as pcb_get_all_primitives or pcb_get_primitives_in_region.

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

pcb_get_primitives_in_regionA
Read-onlyIdempotent

Get all primitives within a rectangular region on the PCB. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesTop boundary Y
leftYesLeft boundary X
limitNoTruncate result array to at most N items
rightYesRight boundary X
bottomYesBottom boundary Y
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
leftToRightNotrue=must be fully inside, false=intersecting also counts

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the coordinate frame (mil, relative to canvas origin, +X right / +Y up), but says nothing about what counts as a 'primitive' in the result, truncation behavior via limit, or response size, which are real behavioral concerns for this tool.

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

Conciseness5/5

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

Three tight sentences: purpose first, then the coordinate semantics that most affect correct invocation, then the cross-references. No filler or restatement of the tool name.

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

Completeness4/5

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

For a 10-parameter, no-output-schema tool, the description covers the coordinate model and related tools well, and the schema's fields/filter/limit descriptions carry the projection and truncation warnings. It stops short of defining the returned primitive set or the return shape, which the absent output schema leaves partially to inference.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the unit (mil, 1 mil = 0.001 inch) and the coordinate frame/orientation for left/right/top/bottom, which the schema only labels as 'Left boundary X' etc. That materially reduces ambiguity about how to supply the boundary values.

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

Purpose5/5

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

States a specific verb (get) and resource (primitives) with an explicit scope qualifier ('within a rectangular region'), which is exactly what separates it from pcb_get_all_primitives and pcb_get_primitive_at_point. An agent can pick the right 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.

Usage Guidelines3/5

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

Usage is implied by the region scope, and it helpfully points to pcb_canvas_origin and pcb_convert_coordinates for coordinate handling. However, it never states when to prefer this over the sibling queries or any preconditions (e.g. requiring a document/instance context, or cost of wide regions).

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

pcb_get_selectedA
Read-onlyIdempotent

Get currently selected primitives in the PCB editor

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered and the bar is low. The description adds only the mild context that results are state-dependent (they track the live selection), and says nothing about empty-selection behavior or result size.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the core noun phrase 'currently selected primitives' arrives immediately. Nothing in it is redundant for a tool of this shape.

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

Completeness3/5

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

With five parameters, nested filter objects and no output schema, the definition leaves gaps: what counts as a 'primitive', what happens when nothing is selected, and how the returned array is shaped are all unstated. Annotations cover the safety side, but the retrieval contract is thin.

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

Parameters3/5

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

Schema description coverage is 100% – document, instance_id, limit, fields and filter are all documented in the schema, including the strong warning to always supply 'fields'. The description contributes nothing beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('currently selected primitives in the PCB editor'), so the retrieval semantics are clear. It implicitly separates itself from pcb_get_all_primitives and pcb_get_primitives_in_region by the word 'selected', but it never names those siblings or makes the contrast explicit.

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

Usage Guidelines3/5

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

The phrase 'currently selected' implies the prerequisite (something must be selected in the editor), but the description never states that, nor does it point to alternatives like pcb_clear_selection or the region/point-based getters. Usage is only weakly implied.

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

pcb_highlight_netB
Idempotent

Highlight a specific net in the PCB editor for visual inspection

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesNet name to highlight
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description only needs to add context. It adds nothing: there is no statement about whether the highlight replaces an existing one, whether it persists across operations, or how it relates to selection state. readOnlyHint=false is also left unexplained for an ostensibly visual operation.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the action and its scope arrive immediately. Nothing is wasted, though brevity here comes at the cost of the missing guidance noted elsewhere.

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

Completeness3/5

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

For a simple non-destructive PCB operation with a fully documented schema and clear annotations, the description is nearly sufficient. The gap is the unresolved overlap with pcb_select_net, which the agent must resolve to invoke the right tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents net, document, and instance_id with routing hints (list_instances, editor_get_open_tabs). The description adds no syntax or semantic detail beyond this, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Highlight a specific net") plus a scoping qualifier ("in the PCB editor for visual inspection"), so the agent knows what it does. However, it never distinguishes itself from the near-identical sibling pcb_select_net, leaving the agent to guess which of the two produces the intended visual effect.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives, even though pcb_select_net and pcb_clear_selection sit right next to it in the tool list. The phrase "for visual inspection" implies a purpose but does not tell the agent when to prefer highlight over select.

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

pcb_importB
Destructive

Import routing or layout result files into the PCB (Base64-encoded). Formats: autoroute_json (JSON autoroute), autolayout_json (JSON autolayout), autoroute_ses (FreeRouting SES).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesBase64-encoded file content
formatYesImport format
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
fileNameNoFile name
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the mutation/non-idempotent profile is covered structurally. The description adds only that payloads are Base64-encoded and which formats exist — it never says what the import overwrites on the board, even though that is precisely the destructive behavior an agent should know about.

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

Conciseness4/5

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

Two short sentences, front-loaded with the core action and scope; the second sentence is a compact format legend. Nothing is padded, though the format list partly duplicates the schema enum.

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

Completeness3/5

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

A destructive, non-idempotent 5-parameter import with no output schema and 100% documented params is structurally well covered, but the description omits the one thing it alone can supply: how it differs from pcb_import_changes and project_import_file, and what state the target document ends up in.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; document, instance_id, data and fileName are fully documented in the schema. The description only marginally expands the format enum by glossing each value (FreeRouting SES, JSON autoroute/autolayout), which is small added value over the enum itself.

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

Purpose4/5

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

Specific verb+resource: importing routing/layout result files into the PCB, with the accepted file types enumerated. This distinguishes it from pcb_export, but not from the near-named siblings pcb_import_changes or project_import_file, so an agent still has to guess which import tool applies.

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

Usage Guidelines3/5

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

Format names (autoroute_json, autolayout_json, autoroute_ses) imply the use case — you have an external autoroute/autolayout result to load — but there is no explicit when-to-use, no prerequisite statement, and no routing to the sibling import tools. 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_import_changesA
Destructive

Import changes from schematic into the PCB (sync schematic to PCB). Warning (upstream EDA bug, pro-api-sdk issue #33): pads of components newly placed by this call can read back with a null pad number until the PCB document is reloaded, and DRC may report an unstructured "Netlist Error". Close and reopen the PCB document (or reload via editor_open_document) before reading pads of freshly placed components.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidNoSchematic UUID (uses associated schematic if not provided)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes well beyond that: it discloses a specific upstream bug (pads reading back null pad number), an unstructured DRC 'Netlist Error', and a concrete remediation (reload via editor_open_document). This is exactly the kind of behavioral context annotations cannot convey.

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

Conciseness4/5

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

Front-loads the purpose in the first sentence, then delivers the warning with issue reference and fix. It is somewhat dense due to the quoted error string, but every sentence earns its place given the severity of the disclosed bug.

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

Completeness4/5

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

For a destructive sync operation with full schema coverage and no output schema, the description covers the critical operational risk and remediation path. It omits what the sync actually mutates (component/net addition vs. deletion), a minor gap for a destructive tool.

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

Parameters3/5

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

Schema description coverage is 100%, with each of the three parameters documented inline (uuid, document, instance_id) including how to obtain UUIDs. The description adds no parameter-level detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource with directionality: 'Import changes from schematic into the PCB (sync schematic to PCB).' This clearly signals the schematic-to-PCB direction, though it never names the reverse-direction sibling sch_import_changes, so an agent distinguishing the two must infer from the parenthetical.

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

Usage Guidelines3/5

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

The description implies when to use it (to sync schematic changes into the PCB) but gives no explicit when-not guidance and does not name sch_import_changes as the opposite-direction alternative or pcb_import as a related tool. Usage is inferable but not spelled out.

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

pcb_manage_diff_pairsA
Destructive

Manage differential pair definitions. Actions:

  • get_all: get all differential pairs

  • create: create diff pair (name, positiveNet, negativeNet)

  • delete: delete diff pair (name)

  • rename: rename diff pair (originalName, newName)

  • modify_nets: modify positive/negative net (name, positiveNet and/or negativeNet)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDifferential pair name
actionYesAction to perform
newNameNoNew name (for rename)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
negativeNetNoNegative signal net
positiveNetNoPositive signal net
originalNameNoCurrent name (for rename)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description adds the per-action breakdown but does not disclose that delete/rename are irreversible, whether modify_nets disrupts existing routing, or any confirmation/auth requirement — modest value on top of annotations.

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

Conciseness4/5

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

Purpose is front-loaded in one sentence, followed by a tight bulleted action list. Every line carries information and there is no padding, though the format is a fairly standard enumeration.

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

Completeness4/5

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

For a multi-action tool with no output schema, the description covers the action set and parameter mapping well. It omits what get_all returns and any error/failure semantics, but the schema carries the document/instance_id requirements, leaving only a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by mapping parameters to the specific action that consumes them (create→name/positiveNet/negativeNet, rename→originalName/newName, etc.), which the flat schema does not express. This mapping is genuine added meaning.

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

Purpose5/5

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

States a specific verb+resource ('Manage differential pair definitions') and enumerates all five actions with their target fields, so an agent knows exactly what this tool covers. The resource (differential pairs) is distinct from siblings like pcb_manage_net_classes or pcb_manage_equal_length_groups.

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

Usage Guidelines3/5

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

The action list implies when each mode applies, but there is no explicit guidance on when to choose this tool over the other pcb_manage_* tools, nor any prerequisites (e.g. that nets must already exist). Usage is inferable but not stated.

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

pcb_manage_equal_length_groupsB
Destructive

Manage equal-length net groups. Actions:

  • get_all: get all equal-length groups

  • create: create group (name, nets: string[]; color optional)

  • delete: delete group (name)

  • rename: rename group (originalName, newName)

  • add_net: add net(s) to group (name, net: string|string[])

  • remove_net: remove net(s) from group (name, net: string|string[])

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoNet name(s) (for add_net, remove_net)
nameNoGroup name
netsNoNet names array (for create)
colorNoColor config (for create)
actionYesAction to perform
newNameNoNew name (for rename)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
originalNameNoCurrent name (for rename)

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered structurally. The description adds no behavioral context beyond restating action names — it never says what delete destroys (whether nets are removed from the board), whether changes persist, or what a destructive call requires.

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

Conciseness5/5

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

A single front-loaded purpose sentence followed by a compact bulleted action list; every line earns its place with no filler or repetition.

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

Completeness3/5

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

Covers all six actions and their parameter routing, which is adequate for a multi-action tool. But with no output schema and nine parameters, the description never indicates what get_all returns or what success/error responses look like, leaving a real gap for the read action.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter already carries a '(for X)' usage note, so the schema does the heavy lifting. The description's per-action parameter mapping largely duplicates that, adding little new meaning; baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Manage equal-length net groups') and enumerates six concrete actions, so the agent knows exactly what domain it operates on and can distinguish it from siblings like pcb_manage_net_classes or pcb_manage_diff_pairs. It stops short of explicitly contrasting itself with those siblings, 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.

Usage Guidelines3/5

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

The action list implies when each sub-operation applies, and the parenthetical parameter hints (e.g. 'create group (name, nets: string[]; color optional)') give some operational guidance. However there is no explicit when-to-use/when-not-to-use guidance and no routing to alternative tools for related concepts such as net classes or pad-pair groups.

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

pcb_manage_layersA
Destructive

Manage PCB layers. Actions:

  • get_all: get all layers with properties

  • select: set active layer (layer: string)

  • set_visible: show layer(s) (layer optional; setOtherLayerInvisible optional for solo mode)

  • set_invisible: hide layer(s) (layer optional; setOtherLayerVisible optional)

  • lock: lock layer(s) (layer optional)

  • unlock: unlock layer(s) (layer optional)

  • set_copper_count: set copper layers (count: 2,4,6,...,32). WARNING: REDUCING the count permanently discards all copper (tracks, pours, vias' inner connections) on the removed inner layers. No undo, and no backup snapshot is taken. Export the board first (pcb_export_to_file or document_save_to_file) if the layers being removed hold routing.

  • modify: modify layer properties (layer: string, property: {name?, type?, color?, transparency?})

  • add_custom: add a new custom layer

  • remove: remove a custom layer (layer: string). WARNING: deletes the layer AND everything drawn on it. No undo, no backup snapshot. Export first if in doubt.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoCopper layer count (for set_copper_count)
layerNoLayer name(s)
actionYesAction to perform
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
propertyNoProperties to modify (for modify action)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
setOtherLayerVisibleNoShow all other layers (for set_invisible)
setOtherLayerInvisibleNoHide all other layers (for set_visible)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, but the description goes well beyond that: it specifies exactly what is destroyed ('permanently discards all copper (tracks, pours, vias' inner connections) on the removed inner layers') and that there is 'No undo, and no backup snapshot'. That is precisely the kind of consequence detail an agent needs before invoking 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.

Conciseness5/5

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

Front-loaded with purpose followed by a scannable bulleted action list; warnings are placed inline with the actions they affect. No filler sentences, and each action line earns its place.

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

Completeness4/5

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

For a destructive multi-action tool with no output schema, the description covers the destructive consequences thoroughly and explains the parameter-per-action mapping. It only lightly covers return values (only get_all is described as returning 'layers with properties'), leaving other actions' responses implicit.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning by mapping parameters to actions ('layer optional; setOtherLayerInvisible optional for solo mode', 'count: 2,4,6,...,32'), which the flat schema cannot express. It does not cover instance_id/document, but those are already documented in the schema.

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

Purpose5/5

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

States a specific verb+resource ('Manage PCB layers') and then enumerates all ten actions with a one-line purpose for each (get_all, select, set_visible, lock, set_copper_count, etc.). This clearly separates it from siblings like pcb_manage_rule_config or pcb_manage_net_rules without needing to open the schema.

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

Usage Guidelines4/5

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

Gives per-action context and, critically, prerequisite guidance for the risky paths ('Export the board first (pcb_export_to_file or document_save_to_file) if the layers being removed hold routing'). It stops short of explicit when-not/alternative routing (e.g., get_all vs pcb_get_all_primitives), so it is clear context rather than full routing.

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

pcb_manage_net_classesA
Destructive

Manage net classes. Actions:

  • get_all: get all net class definitions

  • create: create net class (netClassName, nets: string[]; color optional)

  • delete: delete net class (netClassName)

  • rename: rename net class (originalName, newName)

  • add_net: add net(s) to class (netClassName, net: string|string[])

  • remove_net: remove net(s) from class (netClassName, net: string|string[])

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoNet name(s) (for add_net, remove_net)
netsNoNet names array (for create)
colorNoColor config (for create)
actionYesAction to perform
newNameNoNew name (for rename)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
netClassNameNoNet class name
originalNameNoCurrent name (for rename)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, covering the safety profile. The description labels the mutating actions (create/delete/rename/add_net/remove_net) versus the read action (get_all), but does not disclose irreversibility of delete/remove, permission needs, or that a single call mixes safe reads with destructive writes.

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

Conciseness5/5

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

The purpose and action header are front-loaded, and each action is a single compact bullet with its required parameters. There is no filler and the structure maps directly onto the enum, making it easy to scan.

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

Completeness4/5

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

For a 9-parameter, multi-action tool with no output schema, the description covers every action and the parameters each requires. It does not describe the shape of results for get_all nor warn about destructive actions, but the document and instance_id scoping are fully documented in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already maps each parameter to its action ('for create', 'for rename', etc.), so the schema does the heavy lifting. The description's per-action parameter lists largely restate that mapping rather than adding new semantics, so the baseline 3 holds.

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

Purpose4/5

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

Uses a specific verb (manage) and resource (net classes), then enumerates the six concrete actions (get_all, create, delete, rename, add_net, remove_net), so an agent knows exactly what operations are available. It is clearly distinct from siblings like pcb_manage_net_rules, but it never names an alternative to differentiate itself explicitly.

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

Usage Guidelines3/5

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

The action list implies when each sub-operation applies, and per-action parameter hints guide invocation. However, there is no explicit when-to-use guidance, no when-not, and no reference to sibling tools such as pcb_manage_net_rules or pcb_get_design_rules, 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.

pcb_manage_net_rulesA
Destructive

Manage net-specific design rules. Actions:

  • overwrite_net: overwrite net rules (netRules: array of net rule objects)

  • get_net_by_net: get net-by-net clearance rules

  • overwrite_net_by_net: overwrite net-by-net rules (netByNetRules: object)

  • get_region: get region-specific rules

  • overwrite_region: overwrite region rules (regionRules: array of region rule objects) Warning (upstream EDA bug, pro-api-sdk issue #34): overwritten rules read back correctly but do NOT affect pour reflow until the PCB document is closed and reopened. Reopen the document before rebuilding pours.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
netRulesNoNet rules array (for overwrite_net)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
regionRulesNoRegion rules array (for overwrite_region)
netByNetRulesNoNet-by-net rules (for overwrite_net_by_net)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the mutation risk is already flagged. The description goes beyond that with a genuinely useful operational caveat: overwritten rules do not affect pour reflow until the PCB document is closed and reopened. That is exactly the kind of non-obvious behavior an agent cannot get from structured fields.

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

Conciseness4/5

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

Front-loaded purpose sentence followed by a scannable action list and a clearly separated warning. No filler; the action/parameter mapping is tight. Minor redundancy with schema descriptions costs nothing structural.

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

Completeness4/5

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

For a six-parameter action-dispatch tool with nested objects and no output schema, the definition covers the action space, payload shapes, document/instance targeting hints, and the pour-reflow caveat. It doesn't describe what the get_* actions return, a minor gap given no output schema exists.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already tags each payload parameter with its action (e.g., 'Net rules array (for overwrite_net)'). The description repeats that same action-to-parameter mapping rather than adding new semantics, so it earns the baseline 3.

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

Purpose4/5

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

States a clear verb+resource ('Manage net-specific design rules') and enumerates the five actions with their payload shapes. It does not, however, distinguish itself from near-siblings like pcb_get_net_rules, pcb_get_design_rules, or pcb_manage_rule_config, which overlap in the read space.

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

Usage Guidelines3/5

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

The action list implies when each sub-operation applies, and the warning gives a prerequisite for the overwrite flows. But there is no explicit when-to-use vs. the sibling rule tools (e.g., pcb_get_net_rules, pcb_manage_rule_config), so routing among overlapping tools 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_manage_pad_pair_groupsA
Destructive

Manage pad pair groups for length-matching. Actions:

  • create: create group (name, padPairs: [[padId1, padId2], ...])

  • delete: delete group (name)

  • rename: rename group (originalName, newName)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPad pair group name
actionYesAction to perform
newNameNoNew name (for rename)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
padPairsNoPad pair tuples (for create)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
originalNameNoCurrent name (for rename)

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered. The description adds the action set (create/delete/rename) but says nothing extra about reversibility, side effects on the board, or permissions, so it meets the lower annotated bar without exceeding it.

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

Conciseness5/5

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

Purpose is front-loaded in the first clause, followed by a tight bulleted action breakdown with zero filler. Every line earns its place and the action list is easy to scan.

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

Completeness4/5

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

For a mutation tool with full schema coverage and annotations carrying the safety profile, the description covers all three operations and their parameter bindings. No output schema exists, so return values need not be explained; only error/edge-case behavior is left unstated.

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

Parameters4/5

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

Schema coverage is 100%, which sets a baseline of 3, but the description adds real value by mapping parameters to actions (create->name/padPairs, delete->name, rename->originalName/newName), clarifying the conditional relevance the flat schema does not express. It stops short of explaining the padPairs tuple format beyond the schema's own constraints.

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

Purpose4/5

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

States a specific verb+resource ('Manage pad pair groups') and scopes it with 'for length-matching', then enumerates the three actions. It is reasonably distinguishable from most siblings, though it never explicitly differentiates itself from close relatives like pcb_manage_equal_length_groups or pcb_manage_diff_pairs.

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

Usage Guidelines3/5

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

Usage is implied by 'for length-matching' and the action list, but there is no explicit when-to-use or when-not-to-use guidance, and no routing to or away from the similar pcb_manage_* sibling tools. An agent must infer 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.

pcb_manage_rule_configA
Destructive

Manage DRC rule configurations. Actions:

  • get_current_name: get current active config name

  • get_by_name: get config by name (configurationName)

  • get_all: get all configs (includeSystem optional)

  • save: save config (ruleConfiguration, configurationName; allowOverwrite optional)

  • rename: rename config (originalName, newName)

  • delete: delete config (configurationName)

  • get_default_name: get default config name

  • set_default: set as default (configurationName) Warning (upstream EDA bug, pro-api-sdk issue #34): saved rule changes read back correctly but do NOT affect pour reflow until the PCB document is closed and reopened. Reopen the document before rebuilding pours.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
newNameNoNew name (for rename)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
originalNameNoCurrent name (for rename)
includeSystemNoInclude system configs (for get_all)
allowOverwriteNoAllow overwrite (for save)
configurationNameNoConfig name
ruleConfigurationNoRule config object (for save)

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-idempotent, so the safety profile is covered. The description adds real value beyond them by disclosing an upstream EDA bug (pro-api-sdk #34) where saved rule changes read back correctly but do not affect pour reflow until document reopen — a behavioral caveat an agent could not get from structured fields.

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

Conciseness4/5

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

The action list is compact and front-loaded, one line per action with its parameters in parentheses. The final bug warning is long but earns its place because it changes how the agent should sequence save/reflow work. No filler sentences.

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

Completeness3/5

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

For a nine-parameter multi-mode tool with a nested, structurally undocumented ruleConfiguration object and no output schema, the definition covers action semantics and the reflow caveat but says nothing about what the get_* actions return or what shape a rule configuration must take for save. That gap matters most for the save action.

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

Parameters3/5

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

Schema description coverage is 100%, so all nine parameters (including the action enum) are already documented in the schema, largely duplicating the description's '(configurationName)', '(for rename)', etc. The per-action grouping adds modest organizational value, but the nested ruleConfiguration object is described only as 'Rule config object' with an empty properties map, so the description does not compensate for that opacity.

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

Purpose4/5

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

States a specific verb+resource (managing DRC rule configurations) and enumerates all eight actions with their inputs, which is far more informative than a generic 'manage' label. It does not, however, distinguish itself from nearby siblings like pcb_get_design_rules or pcb_manage_net_rules, leaving an agent to infer that 'rule configuration' is a stored config set rather than design/net rules.

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

Usage Guidelines3/5

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

The action-to-parameter mapping implicitly tells the agent how to invoke each mode, and the reopen warning implies a post-save workflow. But there is no explicit when-to-use guidance, no statement of when to prefer this over pcb_manage_net_rules or pcb_get_design_rules, and no prerequisites for destructive actions.

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

pcb_modify_primitiveA
Idempotent

Modify properties of a PCB primitive. Property keys vary by type:

  • via: net, x, y, holeDiameter, diameter, viaType

  • polyline: net, layer, lineWidth

  • arc: net, layer, startX, startY, endX, endY, arcAngle, lineWidth

  • pad: x, y, rotation, net, padNumber, layer

  • pour: net, layer, pourFillMethod, preserveSilos, pourName, pourPriority, lineWidth

  • fill: layer, net, fillMode, lineWidth

  • region: layer, ruleType, regionName, lineWidth All types support: primitiveLock Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesPrimitive type to modify
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
propertyYesProperties to modify (see description for valid keys per type)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe primitive ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the agent knows this is an idempotent mutation. The description adds no further behavioral detail such as auth requirements, error behavior on invalid keys, or what happens to unmentioned properties, which leaves some 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.

Conciseness4/5

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

Front-loads the purpose, then gives a tight per-type key list, then the unit/coordinate conventions. The bulleted structure is scannable and nearly every line earns its place; only the trailing tool cross-references are slightly reducible.

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

Completeness4/5

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

For an idempotent mutation with no output schema, the description covers the critical unknowns: the property keys per type and the coordinate/unit system. It omits return-value semantics and how partial updates behave, but annotations plus the type-key map make it complete enough to invoke safely.

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

Parameters5/5

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

Although schema coverage is nominally 100%, the 'property' parameter is an open object with additionalProperties:{} and empty properties, so the schema does not document valid keys at all. The description compensates fully by enumerating the valid property keys per primitive type plus the universally supported 'primitiveLock', which is essential to call the tool correctly.

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

Purpose4/5

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

States a specific verb+resource ('Modify properties of a PCB primitive') and enumerates the exact primitive types it covers, so an agent can distinguish it from the create_* siblings. It doesn't explicitly differentiate itself from pcb_modify_track, which overlaps with the 'polyline' type it lists, leaving a small ambiguity.

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

Usage Guidelines3/5

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

Provides useful operating context (units in mil, canvas coordinate conventions, pointers to pcb_canvas_origin and pcb_convert_coordinates) but never states when to use this tool versus alternatives like pcb_modify_track or pcb_delete_primitives. Usage 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_modify_trackA
Idempotent

Modify properties of an existing track segment (line). Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoNew net name
endXNoNew end X
endYNoNew end Y
layerNoLayer name (e.g. "TopLayer", "BottomLayer", "Inner1".."Inner30", "Multi") or numeric EPCB_LayerId (1=Top, 2=Bottom, 12=Multi). Names are converted to the numeric id EasyEDA requires.
startXNoNew start X
startYNoNew start Y
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineWidthNoNew track width
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe track primitive ID

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the coordinate-space semantics (mil units, +X rightward, +Y upward, origin-relative), which is genuine behavioral context, but it says nothing about failure modes when primitiveId is missing or whether modifications are partial.

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

Conciseness5/5

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

Two front-loaded sentences: the action first, then the coordinate conventions and the follow-up tools. Every clause earns its place with no filler.

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

Completeness4/5

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

For a 10-parameter mutation tool with no output schema but full schema coverage and annotations, the description supplies the missing global context (coordinate system, units, origin, conversion helpers). Only edge behavior on invalid primitiveId or partial updates is unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the units and sign conventions for startX/startY/endX/endY and lineWidth, plus pointers to the origin and conversion tools. That materially helps interpret the geometry parameters.

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

Purpose4/5

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

States a specific verb and resource ('Modify properties of an existing track segment'), which clearly distinguishes it from pcb_create_track and pcb_modify_primitive. It does not explicitly name the sibling tools it is not, but the track-segment scope makes the boundary readable.

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

Usage Guidelines3/5

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

There is no explicit when-to-use / when-not-to-use statement versus siblings like pcb_modify_primitive or pcb_create_track. It does implicitly route the agent to pcb_canvas_origin and pcb_convert_coordinates for coordinate handling, which is useful usage guidance but not selection guidance.

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

pcb_move_componentA
Idempotent

Move and/or rotate a component. Can also change its layer (flip), lock status, designator, etc. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X coordinate
yNoNew Y coordinate
layerNoTarget layer: "TopLayer"/1 or "BottomLayer"/2
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
rotationNoNew rotation angle in degrees
designatorNoNew designator (e.g. "R1", "U2")
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe component primitive ID
primitiveLockNoWhether to lock the component

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (writable, idempotent, non-destructive). The description adds meaningful behavioral context beyond them: the coordinate frame, axis orientation, and mil units, plus the fact that a move can also flip layers. It omits what happens on failure or which unspecified fields remain untouched, so not a 5.

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

Conciseness4/5

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

Front-loads the core action in the first sentence and keeps each subsequent sentence purposeful (capabilities, units, related tools). The trailing tool-reference sentence is slightly tangential but still useful for correct invocation.

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

Completeness4/5

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

For a 9-parameter mutation tool with no output schema and adequate annotations, the description supplies the missing coordinate/unit semantics and cross-references helper tools. Remaining gaps (return behavior, auto-document-switch consequences) are partially handled by the schema, so it is largely complete.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description earns above baseline by explaining the coordinate system semantics (+X rightward, +Y upward, mil = 0.001 inch) that the schema's terse 'New X coordinate' lines don't convey.

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

Purpose4/5

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

States a specific verb+resource ('Move and/or rotate a component') and enumerates additional capabilities (layer flip, lock, designator). It is clear what the tool does, but it never names or distinguishes itself from the overlapping sibling pcb_modify_primitive, so the agent must 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.

Usage Guidelines4/5

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

Gives concrete guidance to use pcb_canvas_origin for origin offsets and pcb_convert_coordinates when converting coordinate systems, which is genuinely actionable. It does not state when this tool is preferable to pcb_modify_primitive, so it stops short of explicit alternative routing.

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

pcb_navigate_toA
Idempotent

Navigate the PCB editor viewport to specific coordinates. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate to navigate to
yYesY coordinate to navigate to
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (idempotentHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuine context beyond them: the coordinate frame convention (+X rightward, +Y upward, relative to canvas origin) and the mil unit system, which materially affects correct invocation.

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

Conciseness5/5

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

Three sentences, zero waste: purpose first, then the coordinate convention, then the routing to related tools. Front-loaded and every sentence earns its place.

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

Completeness4/5

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

No output schema exists, but this is a viewport navigation action with no meaningful return value, so that is not a gap. Units, coordinate frame, and related tools are covered; the document auto-switch and multi-instance selection behavior is left entirely to the schema, which is acceptable but slightly limits completeness.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description earns above baseline by specifying that x/y are in mil relative to the canvas origin and that widths/diameters use the same unit — meaning the schema's terse 'X coordinate to navigate to' does not already convey.

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

Purpose4/5

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

States a specific verb (navigate) and resource (PCB editor viewport) plus the target (specific coordinates), so the agent knows exactly what happens. It does not, however, distinguish itself from siblings like pcb_navigate_to_region or pcb_zoom_to_board, which an agent choosing among viewport tools would want.

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

Usage Guidelines3/5

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

The description points to pcb_canvas_origin and pcb_convert_coordinates, but only as supporting tools for coordinate handling — not as alternatives for a different task. There is no statement of when to use this versus pcb_navigate_to_region or pcb_zoom_to_board, so usage 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_navigate_to_regionA
Idempotent

Navigate and zoom the PCB editor viewport to fit a specific region. Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesTop boundary Y
leftYesLeft boundary X
rightYesRight boundary X
bottomYesBottom boundary Y
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds coordinate-frame behavior but says nothing about side effects on the viewport, whether a document must be open, or what happens on auto-switch — a modest addition over the annotations.

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

Conciseness4/5

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

Front-loaded with the purpose, then coordinate semantics, then related tools — a logical order. The sentence about widths/diameters being in mil is filler for a tool with no length parameters, a small waste of space.

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

Completeness4/5

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

With no output schema, the description need not explain return values, and it adequately covers the coordinate system and companion tools. It could go further on instance/document auto-switch behavior, but the schema handles those parameters.

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

Parameters4/5

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

Schema coverage is 100%, but the schema descriptions are minimal (e.g. 'Top boundary Y'). The description compensates by specifying units (mil), the canvas coordinate frame relative to origin, and axis directions (+X rightward, +Y upward), which materially aids correct invocation.

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

Purpose4/5

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

States a specific verb pair (navigate and zoom) and resource (PCB editor viewport) with a clear scope (fit a specific region). This implicitly distinguishes it from pcb_zoom_to_board, but it never names the siblings it is not, so an agent must 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.

Usage Guidelines3/5

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

It routes the agent to related tools for coordinate work (pcb_canvas_origin, pcb_convert_coordinates), which is helpful context. However, it gives no explicit when-to-use-this-vs-pcb_zoom_to_board or pcb_navigate_to guidance, leaving the selection to inference.

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

pcb_run_drcA
Read-onlyIdempotent

Run Design Rule Check (DRC) on the PCB. Returns { passed, errors? }. Some EDA Pro builds report only a pass/fail boolean at runtime (upstream pro-api-sdk issue #27); in that case "errors" is absent and a note says per-violation detail is unavailable. Run this (with connectivity checks) before any fabrication export.

ParametersJSON Schema
NameRequiredDescriptionDefault
uiNoWhether to show DRC results in UI
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
strictNoWhether to run strict DRC checks
verboseNoIf true, returns detailed violation list
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond that: the return shape { passed, errors? } and the build-dependent caveat that some EDA Pro builds report only a boolean (upstream issue #27), so "errors" may be absent. It stops short of describing cost, latency, or truncation behavior.

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

Conciseness4/5

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

Three sentences, front-loaded with the action and return shape, then the caveat, then the usage rule. The parenthetical issue reference is slightly verbose but earns its place by explaining the missing-field case.

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

Completeness4/5

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

With no output schema, the description correctly carries the burden of describing the return value and its conditional variability, and the parameter surface is fully covered by the schema. The main remaining gap is that document/instance_id targeting requirements (multi-instance selection) are left entirely to the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all eight parameters (document, instance_id, ui, strict, verbose, limit, fields, filter) are already documented in the schema. The description adds no parameter-level detail beyond the informal "with connectivity checks" aside, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Run Design Rule Check (DRC) on the PCB"), which is enough to separate it from sch_run_drc and document_validate by domain. It never names a sibling explicitly, so an agent must infer the PCB-vs-schematic split, which keeps it 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.

Usage Guidelines4/5

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

Gives a concrete trigger condition: run before any fabrication export, and pairs it with connectivity checks. That is clear usage context, but it offers no exclusions or explicit alternatives (e.g. when pcb_get_design_rules is the better call).

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

pcb_saveA
Idempotent

Save the PCB document selected by the "document" parameter (the editor switches to it first, then saves the active document).

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the write/safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the bar is lower. The description still adds a non-obvious behavioral fact beyond the annotations: the editor switches to the target document first and then saves the active document, meaning it mutates editor state, not just disk content.

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

Conciseness4/5

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

A single well-formed sentence with the target and the switch-then-save behavior front-loaded; nothing is padded. The parenthetical earns its place by explaining the mechanism rather than restating the name.

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

Completeness4/5

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

For a 2-param save tool with full schema coverage and safety annotations, the description covers the essential behavioral subtlety (document switching). It omits any return/success semantics, but with no output schema that omission is minor.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already defines both 'document' (UUID plus auto-switch behavior and UUID sources) and 'instance_id' (when required, auto-selection). The description reiterates the document-selection and active-document semantics but adds no new parameter detail, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (save) and resource (the PCB document selected by the 'document' parameter), and the parenthetical clarifies the exact target is the active document. It is clearly distinguishable from the sibling sch_save by resource, though it does not explicitly name that sibling as the alternative.

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

Usage Guidelines3/5

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

Usage is implied — you call it to persist the selected PCB document — but there is no explicit when-to-use guidance, no mention of prerequisites (e.g. dirty/unsaved state), and no reference to pcb_export_to_file or other persistence siblings as alternatives for different needs.

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

pcb_select_netB
Idempotent

Select all primitives of a specific net in the PCB editor

ParametersJSON Schema
NameRequiredDescriptionDefault
netYesNet name to select
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already disclose the safety profile (destructiveHint=false, idempotentHint=true, readOnlyHint=false), so the agent knows this mutates editor state safely and repeatably. The description adds that it selects *all* primitives of the net, but says nothing about how it interacts with the existing selection (replace vs. append) or the document auto-switch behavior.

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

Conciseness5/5

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

A single front-loaded sentence with the verb and scope stated immediately. No wasted words, nothing to trim.

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

Completeness3/5

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

With no output schema and annotations covering safety, the description is serviceable for a simple selection tool, but it omits what happens to any prior selection and how it relates to sibling selection/highlight tools, leaving real gaps for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents net, document (including its auto-switch behavior and UUID sourcing) and instance_id. The description contributes no additional parameter meaning beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (select), resource (all primitives of a specific net), and scope (PCB editor), so the agent knows exactly what happens. It does not, however, differentiate from the closely related sibling pcb_highlight_net, which an agent would need to distinguish in order to choose correctly.

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

Usage Guidelines2/5

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

There is no when-to-use, when-not-to-use, or alternative guidance. The very similar sibling pcb_highlight_net — and read-only siblings like pcb_get_net_primitives — are not mentioned, so the agent gets no help deciding between selection, highlighting, and querying.

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

pcb_zoom_to_boardB
Idempotent

Zoom the viewport to fit the entire board outline

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as non-read-only but idempotent and non-destructive, which is consistent with a viewport change. The description adds the useful detail that it fits the 'entire board outline' (as opposed to a selection or region), which is genuine behavioral context. No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the action and its scope are stated in one breath.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a param-light, non-destructive viewport tool with full schema coverage and annotations covering safety, the description is essentially complete. Only minor context, such as whether it needs an active document, is left implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both document and instance_id are fully documented in the schema, including auto-switch and multi-instance semantics. The description adds nothing about parameters; baseline 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (zoom) plus resource (viewport) and target scope (entire board outline). An agent immediately knows what it does. It does not, however, distinguish itself from related viewport tools like pcb_navigate_to or pcb_navigate_to_region.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance and no alternative named. The description is purely declarative, leaving the agent to infer that this is the 'fit board' action rather than a region or coordinate navigation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_export_fileA

Export the entire current project as a .epro file (ZIP archive) saved directly to a local path. The .epro file contains: project.json (manifest with board/schematic/PCB associations), SHEET/ (schematics), PCB/ (layouts), SYMBOL/ (component symbols), FOOTPRINT/ (footprints), INSTANCE/ (per-instance attribute overrides), and more. All internal files are human-readable newline-delimited JSON arrays.

FAST-BATCH WORKFLOW: for making many changes at once, it is much faster to export the document or project (document_save_to_file / project_export_file), edit the raw source on disk, then re-upload (document_load_from_file / project_import_file) than to issue many small per-primitive MCP calls. The document source is newline-delimited JSON arrays; .epro files are ZIP archives of the same. Every destructive upload is auto-backed-up to a local git repo first — the response includes a backup SHA you can use to find the prior state if the edit goes wrong. Upload tools accept validate='off'|'warn'|'strict' (default 'strict') which runs the Zod schema on the new source — see document_validate for standalone validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute path to save the .epro file to
fileTypeNoFile format (default: epro)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the mutation/safety profile is partly covered structurally; no contradiction (export reads the project and writes a file, consistent with readOnly=false). The description adds useful output context — a ZIP of human-readable newline-delimited JSON arrays — but it mostly describes the backup/validate behavior of the *upload* tools rather than this tool's own response, overwrite behavior, 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and archive-contents sentences are front-loaded and earn their place. However, the long FAST-BATCH WORKFLOW paragraph is largely about the save/upload/validate siblings, so it is tangential padding relative to this tool's specific job.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does explain the artifact produced (file structure and internal format) and the surrounding workflow, so the agent understands what it gets. It omits the response shape and overwrite semantics for the target filePath, keeping it short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so filePath, fileType, and instance_id are already documented in the schema. The description adds no syntax, format, or default nuances beyond that, which is the correct baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Export the entire current project as a .epro file (ZIP archive) saved directly to a local path') and enumerates the archive contents (project.json, SHEET/, PCB/, etc.). This clearly distinguishes it from PCB-only export siblings like pcb_export_to_file and from its counterpart project_import_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The FAST-BATCH WORKFLOW paragraph tells the agent exactly when this tool is preferable (many changes at once vs. per-primitive MCP calls) and names the complementary tools (document_save_to_file, project_import_file, document_load_from_file, document_validate). It lacks an explicit 'do not use when...' exclusion, but the routing condition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_get_structureA
Read-onlyIdempotent

Get the current project structure: boards (with their schematics/PCBs), standalone schematics with pages, standalone PCBs, and panels. Also shows which document is currently focused.

ParametersJSON Schema
NameRequiredDescriptionDefault
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. With no output schema, the description compensates by disclosing the shape of the return value (boards, schematics, PCBs, panels, focused document) — useful behavioral context beyond the annotations. It stops short of noting size limits or whether it reflects unsaved edits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core resource and its scope are front-loaded before the secondary detail about the focused document. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter query tool with annotations covering the safety profile, the description gives enough of the return shape to be actionable without an output schema. It could be slightly more complete on whether the snapshot includes unsaved state, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single optional parameter with 100% schema description coverage, so the schema already explains instance_id, its format and the auto-select behavior. The description adds nothing about the parameter, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (current project structure), then enumerates the exact contents returned: boards with schematics/PCBs, standalone schematics with pages, standalone PCBs, panels. This is clearly distinguishable from siblings like editor_get_open_tabs or list_instances, which cover different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent infers it should call this when it needs an overview of the project hierarchy. There is no explicit when-to-use statement, no mention of alternatives such as editor_get_open_tabs or editor_get_current_document, and no stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_import_fileA
Destructive

Import a project file (.epro) from a local path into EasyEDA Pro. Can import into an existing project (replacing its contents) or create a new project. A new project is saved to the same team/workspace as the project open in the target window (on the desktop client, the local projects folder); open any project there first. Supports EasyEDA Pro, Altium, KiCad, EAGLE, PADS, and LTspice formats. When importing into an existing project (existingProjectUuid set), a backup of the prior project state is taken automatically and committed to a local git-tracked repo — the returned backup.sha references the pre-import state.

FAST-BATCH WORKFLOW: for making many changes at once, it is much faster to export the document or project (document_save_to_file / project_export_file), edit the raw source on disk, then re-upload (document_load_from_file / project_import_file) than to issue many small per-primitive MCP calls. The document source is newline-delimited JSON arrays; .epro files are ZIP archives of the same. Every destructive upload is auto-backed-up to a local git repo first — the response includes a backup SHA you can use to find the prior state if the edit goes wrong. Upload tools accept validate='off'|'warn'|'strict' (default 'strict') which runs the Zod schema on the new source — see document_validate for standalone validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute path to the .epro file to import
fileTypeNoSource format (default: EasyEDA Pro)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
newProjectNameNoDisplay name for a new project. If omitted, EasyEDA takes it from the file.
existingProjectUuidNoUUID of existing project to import into. If omitted, creates a new project.
newProjectOwnerTeamUuidNoTeam uuid to own a new project. If omitted, the open project's team is used.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the destructive semantics concretely (replace existing project contents), the automatic git-tracked backup with its returned backup.sha, and the validate='off'|'warn'|'strict' (default 'strict') schema-checking behavior. These are exactly the mutation-safety details the destructiveHint annotation cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and modes, then workflow guidance, so the agent gets the essentials first. It is somewhat long and repeats the backup/git-repo point in both the first paragraph and the FAST-BATCH paragraph, which is minor redundancy rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, six-parameter import tool with no output schema, the description covers target selection, formats supported, backup/return-value behavior, and validation modes. Nothing an agent needs before invoking it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already documented and the baseline is 3. The description adds semantic value beyond the schema by tying existingProjectUuid to the automatic backup behavior and explaining how new-project ownership/target is chosen, though it is not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Import a project file (.epro) from a local path into EasyEDA Pro') and immediately disambiguates the two behavioral modes (replace existing project contents vs. create new). It also names the related tools (document_save_to_file / project_export_file, document_load_from_file) so the agent can place it in the workflow without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the fast-batch workflow and the condition that selects it ('for making many changes at once ... much faster ... than many small per-primitive MCP calls'), which routes the agent away from per-primitive tools. It also notes the prerequisite of having a project open in the target window. It does not, however, give explicit conditions for choosing existing-project import vs. new-project creation beyond describing the two modes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_create_componentA

Create a schematic component from a library device reference. Use lib_search_device or lib_get_device_by_lcsc first to get the component object. IMPORTANT: The component object must include uuid, symbolUuid, footprintUuid, AND libraryUuid — passing only {deviceUuid, libraryUuid} will fail with a validation error. Pass the full object returned by lib_get_device_by_lcsc with libraryUuid added (from lib_get_system_library_uuid).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate for placement (X axis points rightward — higher values = further right)
yYesY coordinate for placement (Y axis points upward — higher values = higher on screen)
mirrorNoWhether to mirror the component
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
rotationNoRotation angle in degrees
componentYesFull component object including uuid, symbolUuid, footprintUuid, and libraryUuid. Get the base object from lib_get_device_by_lcsc or lib_search_device, then add libraryUuid from lib_get_system_library_uuid. Passing only {deviceUuid, libraryUuid} will fail.
addIntoBomNoWhether to include in BOM (default true)
addIntoPcbNoWhether to include in PCB (default true)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
subPartNameNoSub-part name for multi-part components

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, not destructive, not idempotent), so the description correctly doesn't restate them. It adds genuine behavioral value by disclosing a specific failure mode: passing only {deviceUuid, libraryUuid} triggers a validation error, and it describes the exact field set required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then prerequisites, then the IMPORTANT warning about the critical failure case. It is appropriately sized, though the component-object requirement is repeated between the description and the schema description, which is mildly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with no output schema, the description covers the highest-risk requirement (the component object shape and its validation failure). It does not describe success behavior or the effect of addIntoPcb/addIntoBom, but the critical invocation path is documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all ten parameters, including the component object's required fields and the libraryUuid caveat. The description largely repeats what the schema's component parameter description already states, adding little meaning beyond it, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Create a schematic component from a library device reference.' It clearly distinguishes this from siblings like sch_modify_component, sch_delete_component, and sch_get_component, and an agent can identify the action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the prerequisite tools explicitly ('Use lib_search_device or lib_get_device_by_lcsc first') and routes the agent to lib_get_system_library_uuid for the required libraryUuid. It gives a clear workflow but does not state when NOT to use this tool (e.g., vs. modifying an existing component).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_create_net_flagA

Create one or more Power/Ground/AnalogGround/ProtectGround net flags in the schematic. Pass individual parameters for a single flag, or use "batch" array for multiple flags in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate (for single creation)
yNoY coordinate (for single creation)
netNoNet name (for single creation)
batchNoArray of net flags to create in one call (max 10 — each takes ~1.5s). When provided, the individual parameters above are ignored.
mirrorNoWhether to mirror
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
rotationNoRotation angle in degrees
componentNoLibrary device reference override
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
identificationNoNet flag type (for single creation)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation is a write (readOnlyHint=false), non-idempotent, and non-destructive, so the safety profile is covered. The description only adds the batch capability, without noting that the batch path ignores the individual parameters (that caveat lives in the schema), so added behavioral value is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, and no wasted words. The single-vs-batch distinction is stated compactly and clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with full annotation coverage and a 100% documented schema, the description covers the key modes an agent needs. The only meaningful omission is distinguishing this tool from sch_create_net_port, but the schema and annotations carry the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 10 parameters, including the batch-vs-single semantics and the 'individual parameters are ignored' rule. The description reinforces the single/batch distinction but adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Create) and resource (net flags), and enumerates the four supported flag types (Power/Ground/AnalogGround/ProtectGround), which matches the enum. It does not, however, differentiate itself from the sibling sch_create_net_port, leaving ambiguity between the two net-related creation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains the two invocation modes — individual parameters for a single flag, or the 'batch' array for multiple — which is genuine usage guidance. But it offers no when-to-use/when-not-to-use context relative to siblings like sch_create_net_port, so routing still requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_create_net_portA

Create one or more IN/OUT/BI directional net ports in the schematic. Pass individual parameters for a single port, or use "batch" array for multiple ports in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate (for single creation)
yNoY coordinate (for single creation)
netNoNet name (for single creation)
batchNoArray of net ports to create in one call (max 10 — each takes ~1.5s). When provided, the individual parameters above are ignored.
mirrorNoWhether to mirror
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
rotationNoRotation angle in degrees
componentNoLibrary device reference override
directionNoPort direction (for single creation)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive, non-idempotent, closed-world operation, so the safety profile is covered. The description adds only the single-vs-batch creation mode; it omits permission needs, failure/rollback behavior, and the batch size/latency constraints (max 10, ~1.5s each) that live only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core action front-loaded and the mode-selection rule immediately after. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, nested-object mutation tool with no output schema, the description covers the what and the two input modes but says nothing about what is returned (created port identifiers/coordinates) or about side effects such as auto-switching to the target document. Adequate but with clear gaps for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the nested batch item schema is already documented. The description's statement that individual params are used for single creation while batch overrides them largely restates what the schema's batch description already says, so it adds little beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create ... net ports in the schematic') plus the direction variants IN/OUT/BI. It is clearly distinct from sibling creators like sch_create_wire or sch_create_net_flag, but it never names or contrasts 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one useful routing rule: individual parameters for a single port, the 'batch' array for multiple ports in one call. It says nothing about when this tool is preferable to sch_create_net_flag/sch_create_wire, nor any prerequisites beyond the document UUID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_create_wireC

Create a wire in the schematic defined by a series of coordinate points

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoNet name to assign to the wire
lineYesWire path coordinates
colorNoWire color (null for default)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineTypeNoLine type: 0=Solid, 1=Dashed, 2=Dotted, 3=DotDashed
lineWidthNoWire width (null for default)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, which tells the agent this is a non-destructive but non-idempotent write (repeat calls create duplicate wires). The description adds no behavioral context of its own — no side effects, unit/coordinate conventions, or document-switching implications beyond what the schema already documents. With the safety profile covered by annotations, the description contributes nothing extra.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and resource lead. It is appropriately sized, though maximally terse for a 7-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter write tool with no output schema, the description is thin: it omits net assignment intent, the multi-instance requirement (instance_id), and the auto-switch behavior of document. The rich schema and safety annotations compensate partially, leaving it minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every field (net, line, color, document, lineType, lineWidth, instance_id) is documented in the schema itself. The description's 'series of coordinate points' loosely maps to the line parameter but adds no syntax or format detail. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (create), resource (wire), and scope (in the schematic), clearly separating it from sch_modify_wire and sch_delete_wire. It also pins the input dimension ('defined by a series of coordinate points'). It stops short of naming siblings 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of the obvious alternatives sch_modify_wire or sch_delete_wire. The agent must infer routing purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_delete_componentA
Destructive

Delete one or more schematic components by their primitive IDs. Irreversible via this API: there is no undo call. The whole document is snapshotted to the local backup repo first; the response includes the backup SHA for recovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesSingle primitive ID or array of primitive IDs to delete
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, yet the description adds real, non-redundant behavior: no undo call, whole-document snapshot to a local backup repo, and the backup SHA returned for recovery. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and key parameter, then the two most decision-relevant facts (irreversibility, backup SHA). No padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete with no output schema, the description supplies the safety-critical details an agent needs (irreversible, but a recoverable backup SHA is returned). 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are documented in the schema itself. The description only restates the primitive-ID scope and adds 'one or more', so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (delete schematic components) and the keying parameter (primitive IDs), and 'one or more' matches the ids anyOf schema. 'Schematic components' implicitly separates it from pcb_delete_primitives and sch_delete_wire, so an agent can route without schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope is clear from 'schematic components', but the description never explicitly names when to use it over siblings like sch_delete_wire or pcb_delete_primitives, nor any preconditions. 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.

sch_delete_wireA
Destructive

Delete one or more wires by their primitive IDs. Irreversible via this API: there is no undo call. The whole document is snapshotted to the local backup repo first; the response includes the backup SHA for recovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesSingle primitive ID or array of primitive IDs to delete
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes well beyond them: it states there is no undo call, that the whole document is snapshotted to a local backup repo first, and that the response carries a backup SHA for recovery. This is exactly the recovery/safety context an agent needs before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and immediately followed by the irreversibility warning and recovery path. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with full schema coverage and safety annotations, the description supplies the remaining gaps: irreversibility, automatic backup, and recovery handle. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents ids, document (including auto-switch behavior), and instance_id. The description adds only 'by their primitive IDs' and the response SHA, which is baseline-level value over structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (wires) plus the addressing mechanism (primitive IDs) and cardinality (one or more). An agent can distinguish this from sch_modify_wire and sch_create_wire without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by their primitive IDs' implies IDs must be obtained first (e.g. via sch_get_all_wires), but no explicit when-to-use guidance or alternative routing (e.g. modify vs delete) is given. 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.

sch_export_bomA
Read-onlyIdempotent

Export the schematic-side BOM as parsed rows (one object per BOM line, keyed by column header). The schematic BOM is the source of truth for supplier metadata — recommended for verifying BOM integrity after batch edits (e.g. confirm Supplier Part / LCSC numbers survived a sch_modify_component run). Columns follow the EasyEDA BOM template, e.g. "Designator", "Quantity", "Manufacturer Part", "Supplier Part". Supports filter/fields/limit on the rows (e.g. filter: {"Designator": "R*"}). For a PCB-side BOM file (xlsx/csv, base64), use pcb_export with format:"bom" instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
templateNoBOM template name (defaults to the project default template)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false). The description adds real behavioral context beyond that: the schematic BOM is the source of truth for supplier metadata, the return is structured parsed rows, and it names the concrete failure mode it detects (lost Supplier Part / LCSC numbers). It does not discuss pagination/truncation behavior, hence not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it returns, then source-of-truth rationale, then supported options, then the disambiguation to pcb_export. Four tight sentences, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the return shape (rows keyed by column header) and naming the column vocabulary. For a read-only export with fully documented 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description goes modestly beyond by explaining what the columns actually are (EasyEDA BOM template fields such as Designator, Quantity, Manufacturer Part, Supplier Part) and giving a working filter example, which grounds the filter/fields/limit parameters in the BOM domain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (export the schematic-side BOM as parsed rows) plus the exact row shape ('one object per BOM line, keyed by column header'). It also draws the boundary against the sibling pcb_export, so an agent can pick 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (verifying BOM integrity after batch edits such as sch_modify_component) and names the alternative for the other case (pcb_export with format:"bom" for PCB-side BOM files). Both the when and the when-not are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_all_componentsA
Read-onlyIdempotent

Get all components in the schematic with their properties, positions, rotations, designators, etc. To identify what a component is, check: designator (e.g. "R1", "U3"), name (part name/number), manufacturer, manufacturerId (manufacturer part number), supplier, supplierId (supplier part number, e.g. JLCPCB/LCSC number), and footprint. All fields: primitiveId, componentType, designator, name, x, y, rotation, mirror, addIntoBom, addIntoPcb, footprint, manufacturer, manufacturerId, supplier, supplierId, net, otherProperty. otherProperty contains user-defined custom attributes — contents vary per component. Template expressions like ={Manufacturer Part} are automatically resolved to their actual values.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
refreshNoIf true, bypass the netlist cache and force a fresh recompute. Use after editing the schematic directly in the EasyEDA UI (edits made through these tools invalidate the cache automatically).
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
skipNetlistNoIf true, skip netlist resolution. Component pin-net names and ={...} template expressions are NOT resolved, but the call returns immediately. Use this on large projects where netlist retrieval is slow.
componentTypeNoFilter by component type (e.g. "part", "netflag", "netport")
allSchematicPagesNoIf true, get components from all schematic pages instead of just the current page

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: that otherProperty varies per component and that ={...} template expressions are auto-resolved to real values, which affects how results must be read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then layered detail. The 'To identify what a component is' and 'All fields' lists are long but not wasteful, since there is no output schema to convey the return fields. Structure is sound with only mild verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly assumes the burden of describing return fields (designator, name, footprint, supplier, net, otherProperty) and template resolution, which makes it usable. Minor gaps remain around result size/pagination behavior, though limit and fields are covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are already documented in the schema, and the description adds little param-level meaning (no elaboration on limit, filter, allSchematicPages, or componentType). Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (all components in the schematic) and enumerates the returned properties. The scope word 'all' plus the schematic context clearly separates it from the singular sibling sch_get_component and from pcb_get_all_primitives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit statement of when to use this versus sch_get_component or sch_get_netlist, and no exclusions. The 'get all' framing implies bulk retrieval and the schema carries practical guidance (fields projection, refresh, skipNetlist), but the description itself leaves the agent to infer when this is the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_all_wiresA
Read-onlyIdempotent

Get all wires in the schematic, optionally filtered by net name

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoFilter by net name or array of net names
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing behavioral beyond that (no notes on default limits, result size, or auto-switching documents), so it is only minimum-viable on this dimension.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource named first and the optional filter second; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full annotations, rich per-parameter schema descriptions and no output schema, the definition is nearly sufficient. It could note default result truncation or how wires are identified, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents net, limit, fields, filter, document and instance_id in detail. The description's net-filter mention merely restates one parameter without adding format or semantics, which matches the baseline 3 for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get all wires in the schematic') and the 'all' scope implicitly contrasts with the singular sibling sch_get_wire. It does not explicitly name or route to that alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'optionally filtered by net name' hints at when the tool is appropriate (bulk retrieval, with optional net narrowing), but there is no explicit guidance on when to prefer this over sch_get_wire or how it relates to sch_get_netlist / sch_get_connectivity. 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.

sch_get_componentC
Read-onlyIdempotent

Get one or more schematic components by primitive ID(s)

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoIf true, bypass the netlist cache and force a fresh recompute. Use after editing the schematic directly in the EasyEDA UI (edits made through these tools invalidate the cache automatically).
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
skipNetlistNoIf true, skip netlist resolution. ={...} template expressions are NOT resolved, but the call returns immediately. Use this on large projects where netlist retrieval is slow.
primitiveIdsYesSingle primitive ID or array of primitive IDs

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so safety is fully covered. The description adds nothing behavioral beyond that: it does not mention cache bypass, netlist resolution cost, or multi-instance targeting, all of which live only in the schema param text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no padding, and the key concept (components by primitive ID) leads. It is efficient, though arguably terse to the point of under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with rich schema annotations and full parameter coverage, the essentials are present. However there is no output schema and the description never characterizes the returned component object, nor does it warn about the instance_id requirement when multiple EasyEDA instances are connected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (refresh, document, instance_id, skipNetlist, primitiveIds) is already documented in the schema. The description only restates that IDs may be single or plural, adding no format, ordering, or behavioral detail beyond the anyOf already declared.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (schematic components) with the lookup key (primitive ID(s)). This distinguishes it from sch_get_all_components and sch_get_primitive_type, but the description never names those siblings, so the differentiation must be inferred from 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.

Usage Guidelines2/5

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. It does not tell the agent where to obtain primitive IDs, when to prefer sch_get_all_components instead, or when sch_get_component_pins is the right call. Usage is only implied by the presence of the primitiveIds parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_component_pinsA
Read-onlyIdempotent

Get all pins of a schematic component by its primitive ID. Pin fields: primitiveId, pinNumber, name, net, x, y, rotation. Each pin includes a net field with the net name it is connected to (empty string if unconnected). Pins connected to $-prefixed nets (like $R11_1) are on unnamed nets that still carry real signals — use sch_get_connectivity with that net name to see what else is connected.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
refreshNoIf true, bypass the netlist cache and force a fresh recompute. Use after editing the schematic directly in the EasyEDA UI (edits made through these tools invalidate the cache automatically).
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe component primitive ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: the net field's semantics, the empty-string convention for unconnected pins, and the meaning of $-prefixed unnamed nets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then progressively adds output fields and the edge-case explanation. Every sentence carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description usefully documents the returned pin shape (primitiveId, pinNumber, name, net, x, y, rotation) and the tricky unconnected/unnamed-net cases. Nothing essential for calling and interpreting the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented in the schema; baseline is 3. The description only restates that lookup is by primitive ID and enumerates output pin fields rather than clarifying parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get all pins of a schematic component') and pins the scope to schematic via the sibling PCB analog pcb_get_component_pins. An agent can distinguish it from sch_get_component and the PCB variant without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains a concrete follow-up workflow: pins on $-prefixed nets represent real signals reachable via sch_get_connectivity with that net name. That is clear contextual guidance, though it doesn't state when to prefer this tool over sch_get_component or sch_get_all_components.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_connectivityA
Read-onlyIdempotent

Get compact connectivity data: which nets connect which component pins, with resolved part names. Much smaller than sch_get_netlist — use this for connectivity questions. Returns nets (net → pin connections like "U3.2(GND)") and components (designator → part + pin assignments). Auto-generated net names (starting with $) are hidden from the nets section but still appear in component pin assignments. IMPORTANT: $-prefixed nets (like $R11_1, $U3_7) represent real electrical connections — they are unnamed nets where the designer didn't assign a net label. When investigating a component's full circuit context, you MUST look at $-prefixed nets in its pin assignments and trace them to see what else is connected. These often carry critical signals (reset lines, boot pins, enable pins) that would otherwise be invisible. Use the depth parameter (default 2) to automatically trace through $-prefixed nets and discover indirect connections — so by default, you already see one hop through unnamed nets (pull-ups, series resistors, boot/reset circuitry). Pass depth=1 to see only direct connections, or 3–5 to chase longer chains. The response includes a note field reminding you of the depth used.

ParametersJSON Schema
NameRequiredDescriptionDefault
netsNoOnly include these nets and components touching them (e.g. ["GND", "VBUS"])
depthNoHow many hops to trace through $-prefixed (unnamed) nets from the specified designators. depth=1 shows only direct connections. depth=2 (default) follows unnamed nets one hop out — finds buttons/pull-ups/regulators connected through series resistors. Higher values chase longer chains. Only used with designators parameter.
refreshNoIf true, bypass the netlist cache and force a fresh recompute. Use after editing the schematic directly in the EasyEDA UI (edits made through these tools invalidate the cache automatically).
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
designatorsNoOnly include these components and nets touching them (e.g. ["U3", "U8"])
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe-read profile, and the description adds real behavioral context beyond them: netlist caching and when refresh is needed, the hiding of $-prefixed net names, the depth default and its indirect-discovery behavior, and the note field in the response. This is genuinely useful disclosure for correct interpretation of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the sch_get_netlist comparison are front-loaded, and the depth guidance is actionable. It is on the long side and revisits $-prefixed nets in two places, which is mildly redundant, but most sentences carry distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return structure (nets and components sections, pin notation like "U3.2(GND)") and the note field. Combined with the caching and net-naming caveats, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, including the depth semantics and the nets/designators filters. The description largely restates depth behavior rather than adding syntax or interpretation the schema lacks, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get connectivity data: nets → component pins) and explicitly contrasts itself with the sibling sch_get_netlist, so an agent can route between them without opening either schema. Scope and output shape are named concretely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use this for connectivity questions and that it is much smaller than sch_get_netlist, names the alternative tool, and gives when-to-use guidance for depth (1 vs 2 vs 3–5) and refresh (after editing in the UI). Both primary decision points are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_netlistA
Read-onlyIdempotent

Get the raw schematic netlist in the specified format. WARNING: The JLCEDA format response is very large (100KB+). Prefer sch_get_connectivity for connectivity questions — it returns the same net/pin data in a much more compact format with resolved part names. Only use this tool when you need a specific netlist export format (Allegro, PADS, etc.) or the full raw netlist data.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoNetlist format type
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds real behavioral context not in them: the JLCEDA response can exceed 100KB. It does not, however, disclose truncation/pagination behavior despite a 'limit' parameter existing, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action, then the warning, then the routing rule. Every sentence earns its place and there is no repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter read tool with no output schema and full schema coverage, the description covers the essential decision (which netlist tool) and the output-size hazard. It is close to complete, though it could say more about what the raw netlist payload contains versus the compact connectivity response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, which sets the baseline at 3. The description's mention of formats (Allegro, PADS) only echoes the enum values in the schema rather than adding new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the raw schematic netlist') plus the format-scoping ('in the specified format'), and explicitly names the sibling sch_get_connectivity as the thing it is not. An agent can distinguish it from all other sch_* 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not (connectivity questions), a named alternative (sch_get_connectivity) with the reason it is preferred, and the precise condition that selects this tool instead (need for a specific export format such as Allegro/PADS or the full raw netlist). 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.

sch_get_primitiveB
Read-onlyIdempotent

Get a schematic primitive by its ID with all properties

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe primitive ID
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The phrase 'with all properties' adds a small amount of context about the retrieval depth, but the description says nothing about behavior on a missing/invalid ID or about instance-switching side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the key qualifier ('with all properties') sits at the end where it is easy to parse. It is perhaps a touch terse for a tool with three parameters, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter whose parameters are fully documented in the schema and whose annotations carry the safety profile, the description is nearly sufficient; 'with all properties' partially compensates for the absent output schema by indicating the return payload. Only error/edge-case behavior is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the document and instance_id parameters thoroughly documented in the schema itself. The description adds no additional meaning beyond 'by its ID', so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a schematic primitive by its ID') plus a scope qualifier ('with all properties'). It is clearly distinguishable from sibling reads like sch_get_primitive_type or sch_get_primitive_bbox because it returns the full object, though it never names 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to reach for this tool versus sch_get_primitive_type, sch_get_primitive_bbox, or the pcb_* variants. The agent must infer usage entirely from the name and schema, and there is no mention of prerequisites such as needing a valid primitive ID or a target document.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_primitive_bboxB
Read-onlyIdempotent

Get the bounding box of one or more schematic primitives

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdsYesArray of primitive IDs

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the batching fact ('one or more'), and omits return characteristics such as coordinate space, units, or behavior for invalid primitive IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that front-loads the verb and resource with zero filler. Nothing unnecessary is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should ideally indicate what a bounding box result looks like (fields, units, frame of reference), especially since schematic coordinates are non-obvious. It confirms what is returned but not its shape, which is a real gap for a geometry-returning tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so document, instance_id and primitiveIds are all documented in the schema (including guidance to get UUIDs from list_instances/editor_get_open_tabs). The phrase 'one or more' loosely confirms the array semantics but adds nothing the schema does not already say; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('bounding box of schematic primitives'), making it distinguishable from sch_get_primitive and sch_get_primitive_type at a glance. It stops short of explicitly naming those siblings or explaining how the bbox result differs from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as sch_get_primitive or pcb_get_primitives_in_region. The agent must infer the use case 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.

sch_get_primitive_typeB
Read-onlyIdempotent

Get the type of a schematic primitive by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe primitive ID
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety and repeatability profile is fully covered. The description adds no behavioral context beyond what the schema and annotations provide, but it does not contradict them either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is arguably too terse given the sibling surface, but structurally it is clean and well-formed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only primitive lookup with 100% schema coverage and a full annotation safety profile, the description is adequate; no output schema exists but a type lookup needs little return-value explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema. The description only echoes 'by its ID', adding no syntax or format detail beyond the structured fields, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('type of a schematic primitive') scoped by ID, which clearly separates it from siblings like sch_get_primitive or sch_get_primitive_bbox. It does not explicitly name an alternative, but the returned attribute makes its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus sch_get_primitive or sch_get_primitive_bbox, no prerequisites, and no exclusions. The usage context is only implied by the phrase 'by its ID'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_selectedC
Read-onlyIdempotent

Get all currently selected primitives in the schematic editor

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds essentially no behavioral context beyond that: it does not say the result is a live snapshot of editor state, that it can be empty, or what shape the returned primitives take.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the key scope ('currently selected') front-loaded and zero filler. It is appropriately sized for a simple read tool, though it is arguably too terse to be maximally helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query whose annotations cover safety and whose schema fully documents all five parameters, the description is adequate but thin. It omits the relationship to sch_get_selected_ids and any hint about the return payload, which is the main remaining gap given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (document, instance_id, limit, fields, filter) is already documented in the schema, including the auto-switch behavior of document and the instance_id requirement. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('get all currently selected primitives') plus the scope ('in the schematic editor'), which cleanly separates it from pcb_get_selected. However, it does not distinguish itself from the very close sibling sch_get_selected_ids, leaving the agent to guess which one returns what.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no mention of the near-duplicate sibling sch_get_selected_ids, and no statement of what happens when nothing is selected. Usage is only weakly implied by the word 'currently'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_selected_idsA
Read-onlyIdempotent

Get primitive IDs of all currently selected primitives in the schematic editor

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds only the state-dependency on an existing selection and says nothing about return shape or what happens when nothing 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the resource and scope front-loaded; no filler or redundant restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple parameterless read tool with annotations covering safety and a fully documented schema, the description is nearly sufficient. The only gap is that it does not say the return is a list of ID strings or how an empty selection is reported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (document, instance_id) are fully documented in the schema, including how to obtain UUIDs and instance selection rules. The description adds nothing beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (primitive IDs of currently selected primitives) with the scope 'schematic editor'. It is distinguishable from siblings like sch_get_selected, which returns full selection data rather than just IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrasing implies a read of the current selection, but there is no explicit guidance on when to use this instead of sch_get_selected or sch_get_primitive, nor any prerequisite (e.g. a selection must exist). Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_get_wireC
Read-onlyIdempotent

Get one or more wires by primitive ID(s)

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdsYesSingle primitive ID or array of primitive IDs

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is fully covered elsewhere. The description adds nothing on top of that: it does not say what happens if an ID is missing, whether results are ordered, or how multi-ID lookup behaves, so it merely restates 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with zero filler, and the resource plus lookup key are front-loaded. It is terse to the point of under-specification, but nothing is wasted or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read tool with full schema coverage and a complete annotation set, so the thin description is close to sufficient. Still missing are the multi-ID result shape and any failure behavior, which matter slightly for a batch lookup even though the schema carries the parameter burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents document, instance_id and the single-or-array primitiveIds, so the baseline is 3. The description's 'one or more ... ID(s)' echoes the anyOf structure without adding format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get ... wires') plus the lookup key ('by primitive ID(s)'), which distinguishes it from the bulk sibling sch_get_all_wires. It stops short of naming that sibling or scoping what 'wire' covers, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance. The description never mentions the obvious alternative sch_get_all_wires (for listing every wire) or sch_get_primitive (for a generic primitive fetch), so the agent must infer the selection rule from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_import_changesC
Destructive

Import changes from PCB back into the schematic

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the agent knows this is a mutating, non-idempotent operation. The description adds only the direction of change but does not explain what gets destroyed, whether schematic elements are overwritten, or any side effects, adding little beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It directly conveys the operation without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent tool that modifies the schematic, the description is insufficient. It omits when the tool should be used, what happens to existing schematic data, and any relationship to the complementary pcb_import_changes tool, leaving critical context gaps despite the annotations covering only the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both the required 'document' and optional 'instance_id' parameters. The description does not mention parameters at all, which is acceptable given the schema's completeness, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('import') and resource ('changes from PCB back into the schematic'), clearly indicating the direction of synchronization. It does not explicitly differentiate from the sibling tool pcb_import_changes or other import tools, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like pcb_import_changes or project_import_file. There are no prerequisites or exclusions mentioned, leaving the agent to infer usage solely from the name and direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_modify_componentA
Idempotent

Modify properties of a schematic component (position, rotation, designator, etc.). Metadata is preserved automatically (bug-1 fix, this fork only): fields you do not pass (supplierId, otherProperty, manufacturer, manufacturerId, supplier, uniqueId) are snapshotted before the write and merged back, so a position-only edit no longer wipes the BOM row. Passing an explicit value (including null) still applies it. Stock EasyEDA does NOT do this — its modify() re-serialises from the property argument alone. LIMITATION: the "document" parameter cannot move a component between schematic pages. Passing a different page's UUID switches the editor but the underlying call fails (undefined.getState_ComponentType); cross-page moves still require a manual UI Cut, switch page, Paste.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X coordinate
yNoNew Y coordinate
nameNoNew component name
mirrorNoWhether to mirror
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
rotationNoNew rotation angle in degrees
supplierNoSupplier name
uniqueIdNoNew unique ID
addIntoBomNoWhether to include in BOM
addIntoPcbNoWhether to include in PCB
designatorNoNew designator (e.g. "R1", "U2")
supplierIdNoSupplier part number (e.g. LCSC C-number)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe component primitive ID
manufacturerNoManufacturer name
manufacturerIdNoManufacturer part number

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), yet the description adds substantial non-structured context: the snapshot/merge metadata-preservation behavior, exactly which fields (supplierId, otherProperty, manufacturer, etc.) survive a partial edit, the fact that explicit null still applies, and that stock EasyEDA behaves differently. It also discloses a concrete failure mode for cross-page moves with the error string. This is well beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence is front-loaded with the core purpose, then behavior and limitations follow. It is somewhat verbose with fork-specific asides ('bug-1 fix, this fork only', 'Stock EasyEDA does NOT do this'), but each sentence carries decision-relevant information, so it is defensible rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter mutation tool with no output schema and covering annotations, the description supplies the behavioral and limitation context an agent needs (metadata preservation, null semantics, cross-page failure). It does not describe the response shape or error handling beyond the one documented bug, a minor residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description goes further, explaining that omitted fields are preserved while explicitly-passed values (including null) are applied — semantics the schema itself does not convey — and it clarifies the failure mode of the 'document' parameter. This meaningfully exceeds the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Modify properties of a schematic component') and enumerates the kind of properties affected (position, rotation, designator). It is clearly distinguishable from sch_create_component, sch_delete_component, and the wire/net siblings by name and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent can infer 'use this to edit an existing component,' but there is no explicit when-to-use vs sch_swap_supplier_part or sch_create_component, and no prerequisites. The cross-page LIMITATION note is valuable routing information for an edge case, but it does not generalize into broader usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_modify_wireC
Idempotent

Modify properties of an existing wire

ParametersJSON Schema
NameRequiredDescriptionDefault
netNoNew net name
lineNoNew wire path coordinates
colorNoNew wire color (null for default)
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
lineTypeNoLine type: 0=Solid, 1=Dashed, 2=Dotted, 3=DotDashed
lineWidthNoNew wire width (null for default)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe wire primitive ID

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it does not say whether unspecified properties are preserved, whether the change is undoable, or what happens if primitiveId 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted words, but it is under-specified rather than well-structured for an 8-parameter mutation tool. Brevity here reflects missing content, not efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 8 parameters, two required, no output schema, and no annotations explaining return or partial-update semantics, the description is too thin. It never mentions that only the wire's own properties are affected, that the document may be auto-switched, or that omitted fields are left unchanged.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each of the 8 parameters carries its own description (net, line, color, lineType, lineWidth, document, instance_id, primitiveId), so the schema does the heavy lifting. The one-line description adds no syntax, format, or behavioral detail beyond the schema, which is the baseline-3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Modify') and resource ('existing wire'), so the agent knows it edits rather than creates or deletes a wire. It does not explicitly differentiate from siblings such as sch_create_wire or sch_delete_wire, but the verb resolves that reasonably well.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (sch_create_wire, sch_delete_wire), no prerequisites, and no statement of what conditions must hold (e.g. wire must already exist in the target document). 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.

sch_run_drcA
Read-onlyIdempotent

Run Design Rule Check (DRC) on the schematic. Returns { passed, errors? }. Some EDA Pro builds report only a pass/fail boolean at runtime (upstream pro-api-sdk issue #27); in that case "errors" is absent and a note says per-violation detail is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTruncate result array to at most N items
fieldsNoProject results to only these top-level keys. Response includes _availableFields showing all keys. IMPORTANT: Always specify fields when you know what you need — without it, responses include every property and can be extremely large (100KB+), wasting context.
filterNoKeep items matching all conditions (AND). Exact: {key: value}, prefix glob: {key: "R*"}, OR: {key: ["a","b"]}
strictNoWhether to run strict DRC checks
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
userInterfaceNoWhether to show DRC results in UI

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, idempotent, non-destructive read, so the bar is lower, yet the description still adds real value: it discloses the return shape { passed, errors? } and a build-dependent limitation where some EDA Pro builds only report a boolean, citing upstream issue #27. That caveat would otherwise cause an agent to misread a missing errors array as success-with-no-violations. It does not mention execution time or scope of checks performed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and target, followed by the return shape and the one runtime caveat. Every sentence earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly takes on the burden of describing the return value and its degenerate case, while the rich input schema covers parameters and annotations cover safety. Nothing essential to calling the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters, including the strict flag that governs DRC behavior. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Run Design Rule Check (DRC) on the schematic"), and by naming the schematic as the target it distinguishes itself from the sibling pcb_run_drc without either schema being opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to run this versus alternatives such as pcb_run_drc or document_validate, no prerequisites (e.g., a saved document), and no indication of cost or whether the document must be current. Usage can only be inferred from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_saveC
Idempotent

Save the current schematic document

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description's only job is to add context — and it adds none. It does not say whether the save is in-editor only or persists to disk, what the result is, or how failures surface, leaving it a near-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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no waste. It is efficient, though the minimalism is what leaves the other dimensions thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple save with no output schema and annotations covering the safety profile, the description is minimally viable. It still omits what 'save' actually commits to (editor session vs file) and any failure semantics an agent might need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'document' and 'instance_id' are fully documented in the schema (including the auto-switch behavior and multi-instance rule). The description adds nothing and even introduces mild tension by calling it the 'current' document; baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Save ... schematic document'), and the word 'schematic' distinguishes it from the sibling pcb_save. It falls short of a 5 because 'current' conflicts with the schema, which requires a target document UUID rather than implying the already-active document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to save versus file-oriented siblings like document_save_to_file or document_set_source, and no prerequisites or exclusions. The usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_select_primitivesA
Idempotent

Select and highlight primitives in the schematic editor by designators, pins, or nets. Selection is additive — each call adds to the current selection. There is currently no programmatic way to clear the selection; the user must click on empty space in the editor to deselect. Pin format: "U1_1" (designator_pinNumber). Components selects the whole component, pins highlights just the pin, nets highlights the entire wire/net.

ParametersJSON Schema
NameRequiredDescriptionDefault
netsNoNet names to select (e.g. ["GND", "VBUS"])
pinsNoPins to select as designator_pinNumber (e.g. ["U3_1", "U3_2"])
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
componentsNoComponent designators to select (e.g. ["U3", "U13"])
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the critical behavioral trait beyond annotations: selection is additive and each call accumulates, with no programmatic clear path. It also clarifies the distinct effect of each selection category (whole component vs. single pin vs. entire net/wire). With readOnlyHint=false and idempotentHint=true in annotations, the description explains exactly what kind of state change occurs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then behavior, then the pin format note. Three tight sentences with no filler. Slightly dense but each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so the description carries behavior, which it does well for a 5-param selection tool. It omits what happens on an unresolvable designator or whether any acknowledgment is returned, but all call-critical context (document auto-switch is in schema, additive semantics here) is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it gives the pin string format ('U1_1' designator_pinNumber) and explains the semantic difference between components, pins, and nets selection targets. This exceeds the schema, which only documents the string format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Select and highlight primitives in the schematic editor by designators, pins, or nets.' An agent immediately knows this is a schematic selection tool, distinct from the PCB-only selection siblings (pcb_select_net, pcb_highlight_net, pcb_clear_selection).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a strong usage caveat absent from structured fields: selection is additive and there is no programmatic way to clear it, so the user must click empty space. This tells the agent to batch a single call rather than loop. It stops short of naming alternatives (sch_get_selected/sch_get_selected_ids for inspection), so it lacks explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sch_set_netlistC
Destructive

Update the schematic netlist

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoNetlist format type
netlistYesNetlist data string
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — no mention of what data is overwritten, whether the change is reversible, or any side effects on the schematic.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste, but it is so terse for a destructive 4-parameter mutation tool that it reads as under-specification rather than efficient conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema and two required parameters, the description omits any consequence, precondition, or post-condition information. The rich schema partially compensates for parameters but not for behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents netlist, document, instance_id, and the type enum, including the auto-switch behavior and instance selection. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('the schematic netlist'), which clearly distinguishes it from the read counterpart sch_get_netlist. However, it offers no differentiation from other mutation siblings like sch_import_changes, leaving the agent to infer boundaries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives such as sch_import_changes or sch_get_netlist. An agent gets no help deciding 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.

sch_swap_supplier_partA
Destructive

Bulk-swap supplier metadata on schematic components matching a filter. WARNING (field-confirmed): this swaps supplier METADATA only. The canvas symbol and its label stay those of the OLD part. Use this ONLY when the replacement is a true drop-in with identical schematic symbol and PCB footprint (e.g. same 100nF 0603 cap in a different reel). For any part with a different symbol, footprint, or pin count, delete the component and re-add it instead — otherwise the schematic and BOM will disagree with the canvas symbol/label. Uses the same bug-1 metadata guard as sch_modify_component: unspecified fields (otherProperty, uniqueId, position, symbol, etc.) are preserved via a snapshot-and-merge round trip, so a swap that only touches supplierId doesn't wipe the rest of the BOM row. Non-dry-run swaps snapshot first: the active document (or, with allSchematicPages, the whole project) is committed to the local backup repo before any write, and the response includes the backup SHA. Note the multi-page walk is not atomic — if a page fails to open mid-walk the swap aborts with earlier pages already written; use the backup SHA to recover. Typical uses: rotate to a cheaper LCSC alt (match: {supplierId: "C25804"}, replace: {supplierId: "C17414", manufacturerId: "..."}), or bulk-tag a designator prefix (match: {designator: "R*"}, replace: {manufacturer: "YAGEO"}). match: filter fields with the same semantics as read-tool filter — exact string, ["a","b"] OR-array, or "prefix*" glob. Any component field is accepted (designator, supplierId, manufacturerId, manufacturer, ...). Matching runs against RESOLVED values: fields stored as ={...} template expressions are resolved from the netlist before the filter applies, matching what sch_get_all_components shows. If the netlist cannot be fetched, matching falls back to raw stored values. replace: at least one of supplierId, manufacturerId, manufacturer, supplier. dryRun: if true, returns the matches with before/after but does NOT modify (and takes no backup). Recommended for the first pass. allSchematicPages: walk every schematic page instead of only the active one; original page is restored. Returns { dryRun, swappedCount, swapped:[{primitiveId, designator, page, before, after}], backup? }. Always re-run sch_export_bom afterward to confirm BOM integrity.

ParametersJSON Schema
NameRequiredDescriptionDefault
matchYesFilter fields to match components on (exact, OR array, or "prefix*" glob).
dryRunNoIf true, return matches with before/after but do not modify. Recommended for first pass.
refreshNoIf true, bypass the netlist cache when resolving ={...} templates for matching. Use after editing the schematic directly in the EasyEDA UI.
replaceYesSupplier metadata to overwrite on matched components. At least one field required.
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
allSchematicPagesNoWalk all schematic pages (defaults to active page only)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already declaring destructiveHint=true and idempotentHint=false, the description adds critical context they cannot convey: the swap touches metadata only while the canvas symbol/label stay the OLD part, the bug-1 snapshot-and-merge preservation behaviour, the pre-write backup commit with a returned SHA, and the non-atomic multi-page walk that can leave earlier pages written. This is exactly the material an agent needs before invoking 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the critical metadata-only warning before mechanics, and each paragraph carries non-redundant information. It is long for a tool description and has a little overlap between the match-semantics sentence and the earlier filter reference, but the length is justified by the destructive, multi-parameter nature of the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the full lifecycle for a complex, destructive tool: warnings, preservation semantics, backup/recovery via SHA, dry-run workflow, page-walking caveat, and even the return shape ({dryRun, swappedCount, swapped, backup?}) plus a verification follow-up, so 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3, but the description adds real meaning: match accepts exact strings, OR-arrays and 'prefix*' globs against any component field, matching runs against netlist-resolved values with fallback to raw stored values, and replace requires at least one of the four supplier fields. It leaves document, instance_id and refresh entirely to the schema, which keeps it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource and scope: 'Bulk-swap supplier metadata on schematic components matching a filter.' It also explicitly distinguishes itself from sch_modify_component by naming that sibling and sharing its metadata guard, so the agent can tell these apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both when-to-use ('true drop-in with identical schematic symbol and PCB footprint') and when-not-to-use ('For any part with a different symbol, footprint, or pin count, delete the component and re-add it instead'), names the concrete alternative workflow, and recommends dryRun for the first pass with a follow-up sch_export_bom call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

server_infoA
Read-onlyIdempotent

Get MCP server status: daemon version, WebSocket port, connection state, connected instances (each with the version of the .eext it runs), and allowed origins. versionMismatch is true when any connected extension runs a different version from the daemon; fix with a .eext reinstall (bump the version first, EasyEDA ignores same-version reinstalls) and/or bridge_restart.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds meaningful behavioral context beyond them: what versionMismatch means, and the non-obvious constraint that same-version .eext reinstalls are ignored so the version must be bumped first. No return-format/pagination detail, but for a status read this is substantial added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the returned field list before the versionMismatch semantics. Dense but each clause carries distinct information (field inventory, mismatch meaning, remediation). Slightly overstuffed in the second sentence but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe return values itself — and it does, itemizing the status fields. Combined with the versionMismatch explanation and remediation, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the schema is trivially complete and there is nothing for the description to disambiguate; baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('MCP server status') followed by an enumeration of exactly what status is returned: daemon version, WebSocket port, connection state, connected instances, allowed origins. This clearly separates it from diagnostic siblings like list_instances or bridge_restart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly defines the use case (diagnosing version mismatches among connected extensions) and names the remediation path, including the alternative tool bridge_restart. It doesn't state explicit when-not-to-use conditions, but the context is clear 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 103 tool updatesv1.6.5
    • First observedbridge_restart
    • First observeddocument_get_source
    • First observeddocument_load_from_file
    • First observeddocument_save_to_file
    • First observeddocument_set_source
    • First observeddocument_validate
    • First observededitor_get_current_document
    • First observededitor_get_open_tabs
    • First observededitor_open_document
    • First observedlib_device_copy
    • First observedlib_device_delete
    • First observedlib_device_modify
    • First observedlib_footprint_get
    • First observedlib_footprint_open_in_editor
    • First observedlib_footprint_update_document_source
    • First observedlib_get_all_libraries
    • First observedlib_get_device
    • First observedlib_get_device_by_lcsc
    • First observedlib_get_personal_library_uuid
    • First observedlib_get_project_library_uuid
    • First observedlib_get_system_library_uuid
    • First observedlib_search_device
    • First observedlib_symbol_copy
    • First observedlib_symbol_delete
    • First observedlib_symbol_get
    • First observedlib_symbol_open_in_editor
    • First observedlib_symbol_update_document_source
    • First observedlist_instances
    • First observedpcb_canvas_origin
    • First observedpcb_clear_selection
    • First observedpcb_convert_coordinates
    • First observedpcb_create_arc
    • First observedpcb_create_fill
    • First observedpcb_create_pad
    • First observedpcb_create_polyline_track
    • First observedpcb_create_pour
    • First observedpcb_create_region
    • First observedpcb_create_track
    • First observedpcb_create_via
    • First observedpcb_delete_primitives
    • First observedpcb_export
    • First observedpcb_export_to_file
    • First observedpcb_get_all_nets
    • First observedpcb_get_all_primitives
    • First observedpcb_get_component_pins
    • First observedpcb_get_design_rules
    • First observedpcb_get_net_length
    • First observedpcb_get_net_primitives
    • First observedpcb_get_net_rules
    • First observedpcb_get_primitive_at_point
    • First observedpcb_get_primitives_by_id
    • First observedpcb_get_primitives_in_region
    • First observedpcb_get_selected
    • First observedpcb_highlight_net
    • First observedpcb_import
    • First observedpcb_import_changes
    • First observedpcb_manage_diff_pairs
    • First observedpcb_manage_equal_length_groups
    • First observedpcb_manage_layers
    • First observedpcb_manage_net_classes
    • First observedpcb_manage_net_rules
    • First observedpcb_manage_pad_pair_groups
    • First observedpcb_manage_rule_config
    • First observedpcb_modify_primitive
    • First observedpcb_modify_track
    • First observedpcb_move_component
    • First observedpcb_navigate_to
    • First observedpcb_navigate_to_region
    • First observedpcb_run_drc
    • First observedpcb_save
    • First observedpcb_select_net
    • First observedpcb_zoom_to_board
    • First observedproject_export_file
    • First observedproject_get_structure
    • First observedproject_import_file
    • First observedsch_create_component
    • First observedsch_create_net_flag
    • First observedsch_create_net_port
    • First observedsch_create_wire
    • First observedsch_delete_component
    • First observedsch_delete_wire
    • First observedsch_export_bom
    • First observedsch_get_all_components
    • First observedsch_get_all_wires
    • First observedsch_get_component
    • First observedsch_get_component_pins
    • First observedsch_get_connectivity
    • First observedsch_get_netlist
    • First observedsch_get_primitive
    • First observedsch_get_primitive_bbox
    • First observedsch_get_primitive_type
    • First observedsch_get_selected
    • First observedsch_get_selected_ids
    • First observedsch_get_wire
    • First observedsch_import_changes
    • First observedsch_modify_component
    • First observedsch_modify_wire
    • First observedsch_run_drc
    • First observedsch_save
    • First observedsch_select_primitives
    • First observedsch_set_netlist
    • First observedsch_swap_supplier_part
    • First observedserver_info

TDQS

B3.4/5.0

Scored across 103 tools

Disambiguation3/5

The PCB and schematic domains are cleanly separated and most tools have distinct purposes, but there is notable overlap in export tools (pcb_export vs pcb_export_to_file), file-transfer tools (document_set_source vs document_load_from_file vs project_import_file), and multiple primitive read tools (pcb_get_all_primitives vs pcb_get_primitives_by_id vs pcb_get_primitives_in_region vs pcb_get_primitive_at_point). The extremely long descriptions further obscure boundaries.

Naming Consistency4/5

There is a highly consistent domain_prefix_action_noun convention (pcb_create_track, sch_get_component, lib_symbol_copy, document_save_to_file), which makes tools very greppable. Minor deviations are the multi-action manager tools (pcb_manage_rule_config, pcb_manage_layers) that take an action parameter instead of exposing one tool per verb.

Tool Count2/5

103 tools is far too many for a single MCP server; it far exceeds what an agent can reliably reason about or choose among. The surface should be split into sub-servers (PCB, schematic, library, document/IO) or the 8+ pcb_manage_* action-based tools should be consolidated further.

Completeness5/5

Coverage is exceptionally thorough: CRUD for PCB and schematic primitives, full project/document file I/O, library symbol/footprint/device lifecycle, DRC, net-class/diff-pair management, and layout/export for nearly every fabrication format. No obvious gaps for the EDA-automation domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Production-grade MCP server for EasyEDA Pro that enables AI-assisted hardware design review, PCB inspection, BOM sourcing, and manufacturing export through 41 profile-gated tools.
    73
    1,394 npm
    52
    PolyForm Noncommercial 1.0.0
  • A
    license
    B
    quality
    C
    maintenance
    Enables MCP clients to control EasyEDA Pro for schematic and PCB design through natural language, bridging the EasyEDA API without external AI or API keys.
    49
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Enables interaction with EasyEDA Pro by exposing 760 official API methods as MCP tools, along with plugin import and browser console debugging capabilities.
    500
    Apache 2.0