twincat-mcp
Provides TwinCAT 3 documentation lookup against Beckhoff's Infosys site: lists books and pages from the site's own sitemap, offers per-library local full-text indexing (FTS5) with symbol search, returns FB/struct/enum declarations as structured data alongside the page's descriptions, supports code-example search, and can render any page as Markdown, with a web fallback verified against the sitemap so an existing page is never reported as not found.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@twincat-mcpread the live value of MAIN.fbConveyor.bRunning and tell me if it's true"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
twincat-mcp
One MCP server, one Python process, full reach into a Beckhoff TwinCAT 3 setup:
Layer | What the agent can do | Backend |
Runtime (target IPC) | PLC/system state, symbol browse, typed read/write (structs, arrays, TIME/DATE decoded), raw index-group access, polling trace, wait-until, run/stop/reset, RUN↔CONFIG mode, EtherCAT master state, routes | pyads (ADS) |
IPC file system / OS | read/write/list/delete files on the target over ADS (TcUnit results, logs, boot dir), start a process, reboot | ADS System Service (port 10000) |
Engineering (XAE) | attach to the running XAE shell, open/build with file:line errors, PLC login/start/stop, set target, activate configuration, restart TwinCAT, one-shot deploy, System Manager tree read/write (XML), create/edit POUs in place, PLCopen import/export, boot project | TE1000 Automation Interface over COM (pywin32) |
Real-time recorder | continuous capture of online variables while the program runs — PLC-timestamped ADS notifications (cycle or on-change) or polling, hours long, file-backed; live snapshot/stats while recording; scope-style start/stop triggers with pre-trigger; CSV export; pulse/dwell and edge-to-edge latency analysis | pyads notifications |
Test bench | scripted scenarios (writes + expectations + parallel recording), assertions with wait, settle checks, stimulus→response latency, RPC method calls, task timing/load, snapshots for regression | ADS |
Project files (offline) | index .TcPOU/.TcDUT/.TcGVL/.TcIO, code with line numbers, ADS symbol → file:line resolution, regex search, references, call graph, FB interface summary, lint, write-back with LineIds hygiene, TcUnit suite scaffold | XML + regex, no XAE needed |
TcUnit | build → boot → activate → restart → fetch xUnit XML from the target → pass/fail summary | all three |
Experiments | spec (factors × levels, runs, preconditions, stimulus, done condition, measures, metrics, criteria, allowed writes) → background runner with snapshot + capture profile per run, factor restore, abort → metrics with 95 % CIs (t / χ²), Cpk → pass / fail / inconclusive with the n that would settle it → Markdown + HTML report with identity, charts, audit trail and a separately-labelled interpretation; compare two experiments with error bars | recorder + bench + SQLite-free JSONL |
Reference (Infosys) | TwinCAT 3 documentation lookup that cannot be incomplete: books and pages from infosys.beckhoff.com's own sitemap, per-library local index (FTS5), symbol search, FB/struct/enum declarations as data with the page's descriptions, code-example search, any page as Markdown; web fallback verified against the sitemap | urllib + SQLite, no index to ship |
Runs on the engineering PC (Windows, TwinCAT XAE installed) and talks to the IPC through the TwinCAT router. No C# helper, no daemon, no PowerShell, no vector DB.
Why another one
Existing servers each cover a slice; this one was built after reading all of them:
Server | Gap this project closes |
malcolm-mill/beckhoff_mcp (pyads, read-only) | writes, structs/arrays, TIME/DATE decoding, watch/trace, XAE, files on target |
Edge-JB/TwinCAT-XAE-MCP (Node + .NET daemon, XAE only) | needs an MSBuild step and the 64-bit shell; no runtime reads, no TcUnit. Confirmation-token and safety-project ideas kept. |
idomp/twincat-mcp-public (Python + C# | needs MSBuild + Windows PowerShell 5.1 to build the helper. Arm/confirm + persistent-shell + TcUnit flow kept, in pure Python. |
Auda29/twincat-mcp-mono (TypeScript ADS) | three-gate write model kept (mode + runtime + allowlist); XAE/files added. |
offline XML lint/auto-fix. Complementary; run both. | |
semantic search needs Qdrant + embeddings. Here: deterministic symbol-to-source resolution instead. | |
Infosys documentation servers ( | the shipped index is whatever the author crawled: tested one has no Tc2_System at all ( |
Extra: human-in-the-loop via MCP elicitation — when the client supports it (Claude Code does) the destructive tools ask you in the client UI; the token flow is only the fallback.
Related MCP server: tiacommander-mcp
Requirements
Windows 10/11 engineering PC with TwinCAT XAE 3.1.4024+ (XAE Shell, 32-bit
TcXaeShell.DTE.15.0, or 64-bit 4026TcXaeShell.DTE.17.0, or VS 2019/2022/2026 with TwinCAT).Python 3.10+ 64-bit (3.11+ for TOML config). pywin32 and pyads are installed by
pip.An ADS route from this PC to the target (XAE → Choose Target → Add Route).
ads_routeslists what exists.Open the solution in XAE before using
xae_*tools; the server attaches to the running instance (it can launch one, but attaching is faster and visible).
Linux/macOS: only proj_*, tcunit_results(local_path/xml_text) and the safety tools work. Everything else needs the router/COM.
Install
Three ways. All need a 64-bit Python 3.10+ on the engineering PC; nothing else is installed by hand — the
launcher (scripts/launch.py) creates a private venv on first start and reinstalls only when the shipped
sources change.
A. Claude Code plugin (recommended)
The repo is its own plugin marketplace (.claude-plugin/). Inside Claude Code:
/plugin marketplace add Disectron/twincat-mcp-server :: GitHub; or a local clone: /plugin marketplace add C:\tools\twincat-mcp
/plugin install twincat-mcp@twincat-mcpOne step on Claude Code ≥ 2.1.275: /plugin install twincat-mcp --marketplace Disectron/twincat-mcp-server. The plugin brings
the MCP server (named twincat, tools appear as mcp__plugin_twincat-mcp_twincat__<tool>), the twincat-mcp
skill and the 5 prompts. /plugin configure twincat-mcp@twincat-mcp sets the Python executable (default
python), default AmsNetId, start/ceiling safety mode and an optional config TOML; everything project-specific
(solution path, allow/deny lists, HMI root) comes from twincat_mcp.toml in the folder you start claude in.
First start takes about a minute (venv + pip); if that first session reports the server as failed, the venv is
already there — start a new session. The venv lives in ~/.claude/plugins/data/twincat-mcp-twincat-mcp/venv
and survives plugin updates.
B. Claude Desktop bundle
scripts\build-mcpb.cmd produces dist\twincat-mcp-<version>.mcpb (or take the one from a release). Claude
Desktop → Settings → Extensions → drag the file in. The install dialog asks for the solution, AmsNetId and
safety modes. Windows only (the bundle runs cmd /d /c server\launch.cmd, which finds py -3, python or
%LOCALAPPDATA%\Programs\Python). Logs: %APPDATA%\Claude\logs\mcp-server-twincat-mcp.log.
C. By hand (any MCP client, development)
git clone <this repo> C:\tools\twincat-mcp
cd C:\tools\twincat-mcp
scripts\install.cmd :: venv + pip install -e .[dev] + prints effective config
.venv\Scripts\python -m pytest :: 159 tests, all mocked, run anywhere
cd C:\Projects\DrumFilling
claude mcp add twincat -e TCMCP_SOLUTION=%CD%\DrumFilling.sln -e TCMCP_AMS_NET_ID=5.12.34.56.1.1 -e TCMCP_MODE=guarded -e TCMCP_MAX_MODE=full -- C:\tools\twincat-mcp\.venv\Scripts\python.exe -m twincat_mcpor copy .mcp.json.example → .mcp.json in the solution folder. Cursor / Windsurf / Claude Desktop's
claude_desktop_config.json use the same JSON shape.
First prompt in any client: "run tc_doctor". It reports router, local NetId, target state, registered ProgIDs, running shells, project root and the safety mode. Fix what it flags before anything else.
Configuration
Env vars override twincat_mcp.toml (./, ~/.twincat_mcp/config.toml, or TCMCP_CONFIG). See twincat_mcp.toml.example.
Env | Meaning | Default |
| start mode |
|
| ceiling for | = mode |
|
|
|
|
| empty |
| target | local, |
|
| — |
| folder for | solution folder |
|
| 17.0, 15.0, VS 18/17/16 |
|
|
|
| result path on the target |
|
| JSONL audit file; also log reads |
|
| Infosys lookup on/off; |
|
Safety model
op class | examples | readonly | guarded | full |
read | any | ok | ok | ok |
edit |
| — | ok | ok |
write |
| — | allowlist ∧ ¬denylist | ¬denylist |
control |
| — | confirm | ok |
destructive |
| — | confirm | confirm* |
* unless TCMCP_CONFIRM=0.
"Confirm" = elicitation prompt in the client when supported, otherwise tc_request_confirmation(action, target) → single-use token, 180 s TTL, bound to that action, target and the machine the server was connected to when it was issued (re-targeting with ads_connect invalidates it). xae_deploy / tcunit_run refuse when the XAE target and the ADS target differ. The agent can escalate its own mode only up to TCMCP_MAX_MODE, which it cannot change. Every mutating call lands in the audit log (tc_audit_tail).
"Absolute control" setting: TCMCP_MODE=full TCMCP_MAX_MODE=full TCMCP_CONFIRM=0. In that configuration a single mis-aimed tool call can stop the PLC, activate a half-built configuration or reboot the IPC. The server will do exactly what it is told; the only remaining gate is the MCP client's own tool-permission prompt. Keep a denylist for E-stop/safety symbols regardless.
Tools (139) + 5 prompts
Workflows (one call = a whole chain) wf_debug_symbol · wf_fb_profile · wf_release_check · wf_project_overview
Prompts (recipes the agent follows) debug_symbol · fb_validation · deploy_safely · performance_audit · onboard_project
Meta tc_doctor · tc_safety_status · tc_set_mode · tc_request_confirmation · tc_audit_tail
Runtime (ADS) ads_discover · ads_connect · ads_status[port] · ads_list_symbols[flag] · ads_symbol_info · ads_read · ads_read_many · ads_leaves · ads_dump · ads_types · ads_io_read · ads_write · ads_write_many · ads_read_raw · ads_write_raw · ads_watch · ads_wait_until · ads_plc_state · ads_system_mode · ads_ethercat · ads_routes · ads_add_route_to_plc · ads_app_info · ads_task_stats · ads_ping · ads_call_method · ads_export (C#/TS/JSON from the datatype table)
Recorder rec_start · rec_list · rec_status · rec_snapshot · rec_stats · rec_read · rec_stop · rec_export · rec_delete · rec_pulses · rec_latency · rec_compare
Test bench test_expect · test_stable · test_response · test_scenario · snap_save · snap_compare · snap_apply · snap_list
Target OS (System Service) ipc_read_file · ipc_list_dir · ipc_write_file · ipc_delete_file · ipc_start_process · ipc_reboot · ipc_eventlog (Windows targets)
XAE xae_attach · xae_status · xae_open_solution · xae_build · xae_diagnostics · xae_list_commands · xae_command · xae_plc · xae_target · xae_activate_configuration · xae_restart_twincat · xae_deploy · xae_tree_get · xae_tree_consume_xml · xae_tree_set_values · xae_tree_create_child · xae_tree_delete · xae_plc_projects · xae_pou_get · xae_pou_set · xae_pou_create · xae_plcopen_import · xae_plcopen_export · xae_boot_project · xae_dialogs · xae_dialog_resolve · xae_io_disable · xae_links
Project files proj_scan · proj_list · proj_get_code · proj_resolve_symbol · proj_search · proj_references · proj_read_file · proj_set_code · proj_interface · proj_lint · proj_call_graph · proj_variables · proj_vs_runtime · proj_changed · proj_validate_xml
HMI (TE2000 / TcVIS) hmi_scan · hmi_bindings · hmi_vs_runtime
TcUnit tcunit_results · tcunit_run[disable_io] · tcunit_scaffold
Experiments exp_template · exp_validate · exp_save · exp_list · exp_get · exp_runs · exp_run[dry_run] · exp_status · exp_abort · exp_evaluate · exp_report · exp_compare
Capture profiles rec_scan · rec_profile_save · rec_profile_list · rec_profile_get · rec_profile_delete · rec_profile_start · rec_profile_stop
Infosys reference (TwinCAT 3) infosys_books · infosys_index · infosys_search_symbols · infosys_declaration · infosys_search · infosys_search_code · infosys_get_page
Meta also tc_session_report (markdown handover of everything this session changed/produced)
Resources: twincat://config, twincat://safety, twincat://audit/recent. Full one-line-per-tool reference with safety classes: TOOLS.md (generated from the server).
Claude Code loads MCP tool schemas lazily when a server exposes many tools, so the count costs little context until a tool is used. Performance: quick reads and long operations (watch, scenarios, dumps) run on separate ADS workers, so a 60 s watch never stalls an ads_read; recorder queries touch memory/files only; the datatype table and symbol table are cached (TTL 300 s, refresh=true to force).
Connecting Claude Code
Claude Code starts the server itself over stdio — no port, nothing on the network, runs as your Windows user next to the TwinCAT router and the open XAE shell. Plugin install (section A above) is the short path; the manual claude mcp add route, scopes, permissions and troubleshooting are in integrations/claude-code/README.md.
Tool results reach Claude Code as the SDK's indented JSON text plus structured content; Claude Code shows them as collapsible tool-result blocks and the model summarises. For a human-readable handover use tc_session_report (markdown).
Also in the repo: skills/twincat-mcp/SKILL.md (loaded by the plugin; or drop into .claude/skills/), integrations/claude-code/CLAUDE.md.snippet (conventions for every session), integrations/claude-code/.mcp.json template, scripts\register-claude-code.cmd.
What 0.5.0 closes from the gap list
gap | tool | status |
modal dialogs stall COM |
| written against win32gui, untested on hardware |
TwinSAFE guard | every XAE edit refuses | done |
XML structure + LineIds |
| done |
HMI files |
| done |
TcUnit without hardware |
| ITcSmTreeItem.Disabled, untested |
PLC discovery |
| protocol per XAE broadcast search, untested |
variable links |
| instance-tree XML, untested |
event log |
| partial |
MES glue |
| done |
recipes |
| done |
handover |
| done |
Still deliberately absent: Scope/TE13xx, NC, non-EtherCAT fieldbuses, library binary introspection, semantic search, ESI-based box creation.
Reading every variable
The symbol upload alone does not enumerate elements of ARRAY OF STRUCT, nested arrays or deep FB internals. The server also uploads the datatype table (ADSIGRP_SYM_DT_UPLOAD) and uses it everywhere:
> ads_read MAIN.fbFill → the whole FB instance as one nested tree (one ADS read): structs,
arrays of structs, enums by name, TIME/DATE decoded
> ads_leaves MAIN → every scalar under the program with type and byte offset
> ads_leaves MAIN.arrSteps with_values=true
> ads_dump → every variable on the PLC → dump-<ts>.json (tree) + .csv (path,type,value)
> ads_dump pattern=GVL_* → only the GVLs
> ads_types ST_Recipe → members, offsets, sizes; ads_types pattern=E_* → enums
> proj_variables → what the source declares, flattened to the same instance paths
> proj_vs_runtime → declared-but-not-online / online-but-not-declared: proves the target
runs this source after a deploy
> rec_start prefix=MAIN → records every leaf under MAIN, array elements includedIf the datatype upload fails on a target, every tool falls back to the member symbols the runtime publishes (what the other servers rely on) and says so in decoder / datatype_table.
Real-time recording while the program runs
> rec_start prefix=MAIN.fbFill mode=change cycle_ms=1 name=fill-cycle
→ every scalar under MAIN.fbFill, PLC-timestamped on every change
> …run the machine, deploy, whatever…
> rec_status <id> → events, rate, drops, last value of every symbol
> rec_snapshot <id> → the live tail
> rec_stats <id> → per symbol: count, min/max/mean, change count, BOOL edges,
state runs with dwell times
> rec_stop <id>
> rec_pulses <id> MAIN.fbFill.fbFine.bOpen → pulse count, width, period, duty
> rec_latency <id> MAIN.fbFill.fbValve.bOpen == TRUE MAIN.fbFill.rFlow > 0.5
> rec_read <id> t_from_ms=800 t_to_ms=1200 wide=true → what else was true around the event
> rec_export <id> csv_wide → spreadsheetModes: cycle = one sample per symbol per cycle_ms (set it to the task cycle for a complete trace; expensive), change = only when the value changes (cheap, exact edge times), poll = sum-read from the PC (any port, no notifications). Triggers: start_when='MAIN.bStart == TRUE' pre_trigger_ms=500 keeps the half second before the trigger; stop_when, duration_s, max_events end it. Events stream to ~/.twincat_mcp/recordings/<id>.jsonl; stats are incremental, so a two-hour recording costs no RAM. Recordings from earlier sessions stay readable (rec_list, rec_read, rec_pulses, rec_export).
Choosing what to record: capture profiles
rec_start decides the symbol set per call. For batch-after-batch work the set should be decided
once, from a scan of what exists, and replayed. Three ways to choose, all ending in a named profile:
Checklist.
rec_scan prefix=MAIN.fbDispense checklist=batch(orsource=projectoffline) lists every scalar leaf with type, size, a suggested mode (BOOL/INT/enum →change, REAL/TIME →cycle, strings/arrays →poll) and the bytes/s it would cost, grouped byprogram.instance, and writes~/.twincat_mcp/profiles/batch.checklist.csv. Put anxinselect, optionally overridemode/cycle_msper row, thenrec_profile_save name=batch from_checklist=batch.preselect=["*.bDone"]pre-marks patterns.In the source.
{attribute 'tcmcp.record' := 'cycle'}above a declaration selects it; on an FB/STRUCT instance it selects the whole subtree, an inner'off'carves holes,{attribute 'tcmcp.cycle_ms' := '1'}pins the rate.rec_profile_save name=batch from_attributes=truecollects them through the project index — the selection is versioned with the code and survives renames the way nothing in a chat does. TwinCAT ignores unknown attributes.Explicit.
rec_profile_save name=x symbols=[...] mode=auto—autoreads the runtime type.
rec_profile_start batch starts one recording per (mode, cycle) group, named batch/cycle@1,
batch/change@10…, with the profile's start_when / stop_when / pre_trigger_ms (trigger symbols
are added to every group automatically); rec_profile_stop batch ends them together; rec_stats,
rec_export, rec_compare work per recording as before. Sources combine and later ones override
earlier ones, so a checklist can narrow what the attributes selected.
"By standard" there is no default selection: nothing is recorded that was not chosen, and the suggested modes are heuristics shown next to the choice, not applied behind it.
Testing an FB on the live machine
> test_scenario {
"name": "bulk-then-fine",
"record": {"prefix": "MAIN.fbFill", "mode": "change", "cycle_ms": 1},
"steps": [
{"at_ms": 0, "write": {"MAIN.stRecipe.rTargetKg": 25.0, "MAIN.bStart": true}},
{"wait_until": {"symbol": "MAIN.fbFill.eState", "op": "==", "value": 2, "timeout_ms": 3000}},
{"expect": [{"symbol": "MAIN.fbFill.fbValve.bOpen", "op": "==", "value": true}]},
{"wait_until": {"symbol": "MAIN.fbFill.bDone", "op": "==", "value": true, "timeout_ms": 60000}},
{"stable": {"symbol": "MAIN.rNetWeight", "duration_ms": 2000, "tolerance": 0.02}}
],
"final_expect": [{"symbol": "MAIN.rNetWeight", "op": "~=", "value": 25.0, "tolerance": 0.05},
{"symbol": "MAIN.fbFill.bError", "op": "==", "value": false}]
}
→ per-step pass/fail with times, written values restored, recording id for rec_* analysis
> test_response {"MAIN.fbFill.fbValve.bOpenCmd": true} "MAIN.fbFill.rFlow > 0.5"
→ PLC-timestamped latency from the write to the response
> ads_task_stats samples=100 → exec time min/max/mean, load %, cycle overruns while the FB runs
> snap_save before prefix=GVL_Params … change code … snap_compare before live tolerance=0.001
> proj_interface FB_Fill · proj_lint FB_Fill · proj_call_graph MAIN
> tcunit_scaffold FB_Fill → FB_Fill_Tests.TcPOU registered in the .plcproj; then tcunit_runWrites in scenarios go through the same allow/deny lists as ads_write; nothing is written until every symbol in the script has been permitted. Writing to an AT %I* input does nothing useful (the I/O task overwrites it each cycle) — stimulate through unmapped inputs or a simulation GVL.
Experiments: from runs to a report someone can sign
rec_* captures and test_* stimulates; exp_* turns repeated runs into conclusions. The spec is
YAML (or JSON) in <project>/experiments/<name>/spec.yaml — versioned with the code:
name: preact-fill-validation
hypothesis: With lambda=0.95 the preact controller holds |bias| <= 2 g and sigma <= 3 g at 1000 g.
profile: preact-fill # capture profile started for every run
preconditions: [{symbol: MAIN.fbScale.bStable, op: "==", value: true, timeout_ms: 30000}]
factors:
- {name: target_g, symbol: GVL_Recipe.rTarget_g, levels: [500, 1000]}
- {name: lambda, symbol: MAIN.fbDispense.fbPreact.rLambda, levels: [0.95]}
runs_per_level: 5
run:
start: {symbol: MAIN.bStartFill, value: true, reset_value: false, reset_after_ms: 200}
done_when: {symbol: MAIN.fbDispense.ePhase, op: "==", value: IDLE, timeout_ms: 180000}
settle_ms: 2000
measures:
final_weight_g: {kind: last, symbol: MAIN.fbScale.rNet_g}
final_error_g: {kind: expr, expr: final_weight_g - target_g}
cut_latency_ms: {kind: latency, from: {symbol: MAIN.fbDispense.bCut, op: "==", value: true},
to: {symbol: MAIN.fbFlow.rFlow_gps, op: "<", value: 5.0}}
fine_pulses: {kind: pulses, symbol: MAIN.fbFine.bPulse}
metrics:
bias_g: {measure: final_error_g, stat: mean}
sigma_g: {measure: final_error_g, stat: std}
cpk: {measure: final_error_g, stat: cpk, tolerance: 5.0}
criteria:
- {metric: bias_g, op: abs_le, value: 2.0}
- {metric: sigma_g, op: le, value: 3.0}
- {metric: cpk, op: ge, value: 1.33}
writes_allowed: [GVL_Recipe.rTarget_g, MAIN.fbDispense.fbPreact.rLambda, MAIN.bStartFill]exp_template returns a complete one for a dosing machine; exp_validate checks structure, resolves
every symbol on the connected PLC, and asks the server guard whether each write would be allowed;
exp_run dry_run=true prints the plan and writes nothing. exp_run then executes in the background —
per run: preconditions (wait_until) → factor values written → snap_save → capture profile started
→ stimulus → done_when → settle → stop → measures from the PLC-timestamped recording → append to
runs.jsonl. Factor symbols are read first and restored at the end or on exp_abort; two consecutive
failed runs stop the experiment. Resume continues where runs.jsonl stopped.
exp_evaluate is deterministic from runs.jsonl: per level the metrics with 95 % CIs (t for the
mean, χ² for σ, propagated for Cpk) and each criterion as pass / fail / inconclusive — inconclusive
when the limit lies inside the CI, with the run count that would (roughly) settle it. Five fills give
σ a ±40 % standard error; the report says so instead of rounding it away. exp_report writes
report.md + report.html: machine serial, device/TwinCAT version, project + git state, safety mode,
criteria table, metrics per level, charts (primary measure per run with limit lines; per-level mean/CI),
run table with recording ids, the spec as run, the audit log of every write during the experiment,
and an Interpretation section stored separately and labelled "not computed". exp_compare a b
puts two experiments side by side with "separated" where the CIs do not overlap.
Safety: every written symbol must be in writes_allowed and pass the guard — checked before anything
moves and again before every single write, so tc_set_mode readonly is a working kill switch; each
write is pinned to the machine the experiment started on (an ads_connect elsewhere makes the next
write fatal) and audited with symbol, value and run. Writes are scalars only (a struct write would bypass
the member deny-list). A run counts as started only when the machine leaves the done state within
start_timeout_ms; a rejected start is a failed run, not an instant pass. Factor originals are read and
checked for writability before the first run, restored and read back afterwards (or on abort, after any
run.on_abort safe-state writes); an abort interrupts a wait within a second; a timed-out write ends the
experiment because the PLC state is unknown. One experiment per target at a time; starting is
control-class (confirmation in guarded mode). The physical safeguards stay yours.
Looking up Beckhoff documentation
The infosys_* tools exist because the documentation MCP servers available for TwinCAT ship a
pre-built index, and an index is only as complete as the crawl that made it. Against the one tested
here, infosys_search_symbols("ADSREAD") returned nothing, infosys_get_page reported a live
Tc2_System page as not found, and TON ranked BA2 helper functions first. This server does not ship
an index:
What exists comes from
infosys.beckhoff.com/sitemap.xml(every English page URL with itslastmod), cached a week.infosys_booksgroups it by book (tcplclib_tc2_system,tf6100_tc3_opcua,el3xxx…) with page counts; TwinCAT 2 books are dropped (tcplclib<name>without underscore,twincat2/).Tc2_System,Tc2_Standard,Tc2_Utilitiesare TwinCAT 3 libraries and stay.What is indexed is per book, on demand:
infosys_index tcplclib_tc2_systemfetches its pages (≈300, parallel, ~30–60 s), converts each to Markdown with our own HTML walker, classifies the page (FunctionBlock / Function / Struct / Enum / Alias / Interface / GVL / Library / Page), extracts the declaration from theVAR_INPUT/VAR_OUTPUTcode blocks and attaches the description tables, and stores it in SQLite with FTS5. A later run refetches only pages whoselastmodchanged. The firstinfosys_search_symbols/infosys_declarationindexes the default libraries (docs.books) if nothing is indexed yet.infosys_declaration ADSREAD→{kind, inputs:[{name,type,default,description}], outputs, in_out, members, enum_values, return_type, extends, implements, declaration, url}— call it before writing code against a library FB you have not used.infosys_search_code "IDXGRP:=16#F005"finds the example that uses a constant;infosys_search "rising edge"is bm25-ranked full text with excerpts.infosys_get_pagetakes a URL,book/pageid, a bare page id, or a symbol name, fetches live (cached bylastmod) and returns Markdown — for any page the site has, indexed or not. Host-locked to infosys.beckhoff.com; the server is not a general web fetcher.Web fallback: when the local index has no hit,
infosys_searchasks DuckDuckGo forsite:infosys.beckhoff.com <query>, keeps only URLs that are in the sitemap and in TwinCAT 3 books, fetches them for title/excerpt and caches them.backendin the result says which path answered.docs.web_fallback=falseturns it off.
Config ([docs] in the TOML / TCMCP_DOCS*): enabled, books (indexed on first use), exclude_books
(regexes), tc3_only, max_workers (≤16; be polite), max_index_pages, sitemap_ttl_days,
web_fallback, cache_dir. Nothing here touches a PLC; all seven tools are read-only class.
A debugging session
> ads_status → PLC RUN, system RUN, TwinCAT 3.1.4024.x
> ads_read MAIN.fbFill → whole FB instance expanded: eState=3, tSettle=T#500ms, …
> ads_watch [MAIN.fbFill.eState, MAIN.fbFill.fbValve.bOpen] 5000ms 20ms
→ eState 3→4 at 812 ms, bOpen never true
> proj_resolve_symbol MAIN.fbFill.fbValve.bOpen
→ FB_Fill.TcPOU:14 (fbValve : FB_Valve), FB_Valve.TcPOU:5 (bOpen AT %Q*)
> proj_get_code FB_Fill → CASE eState OF … E_FillState.Bulk: fbValve.Open();
> proj_search "fbValve\.Open" → only one call site; the state that reaches Bulk is never entered
> xae_pou_set … / proj_set_code … → fix
> xae_build → 0 errors, 1 warning (file:line)
> xae_deploy → asks for confirmation, then save/build/activate/restart
> ads_wait_until MAIN.fbFill.bDone == TRUE 30000Verify-on-hardware list
Ordered first-day script with expected outputs and what to paste back per failure: docs/HARDWARE_DAY.md.
The XAE and System-Service paths are written against Beckhoff's Infosys documentation and tested against fake COM/ADS objects; this repo was built on Linux, so the following have not been executed against a real XAE shell or IPC yet. Check them in this order on the engineering PC, with a non-production target:
tc_doctor→ router ok, ProgIDs registered, running shell listed.xae_attach→ correct instance/solution;xae_statusshowstarget_net_id.xae_build→error_sourceshould beWindows.ErrorListorDTE2.ToolWindows; if it saysOutputPanethe late-binding fallback is in use (still works, less precise).xae_pou_geton a POU →declaration/implementationpopulated (late-boundDeclarationText; Beckhoff's own PowerShell examples use it this way).xae_plc login→ if "no working DTE command", runxae_list_commands PLCand put the right name intoPLC_LOGIN_COMMANDSinxae_backend.py. On the 64-bit 4026 shell thePLC.*commands are reported missing by other projects;ads_plc_statecovers run/stop/reset without the shell.ipc_read_file C:\TwinCAT\3.1\TwinCAT.xml→ file access (FOPEN/FREAD/FCLOSE).ipc_list_dir C:\TwinCAT\3.1\Boot\*→ FFILEFIND struct layout (4-byte handle + WIN32_FIND_DATAA) is the least certain piece here.ads_ethercat→ index groups 0x3/0x100 (master state) and 0x6 (slave count) on the master's ADS port.ipc_start_processwithnotepad.exe, thenipc_rebooton a test box.tcunit_runend-to-end.rec_start mode=changeon a few booleans, toggle them,rec_stats→ edge timestamps plausible against the task cycle.ads_task_stats,ads_app_info→TwinCAT_SystemInfoVarListmembers resolve by name (they are not in the uploaded symbol table).ads_call_methodon a method marked{attribute 'TcRpcEnable'}→ check theinstance#methodhandle name and the packed parameter layout against the result.ads_types ST_<something>thenads_readof anARRAY OF STRUCTvariable → datatype-table parsing (AdsDatatypeEntryincl. the optional GUID/attribute/enum tails) against a real table; compare offsets with the TMC. On failure the server falls back to published members and reportsdecoder: nonefor arrays of structs.exp_run <name> max_runs=1on a harmless spec → the stimulus write, the start acknowledgement, the done condition and the restore appear intc_audit_tailasexp_writerows; thenexp_abortduring a run → factor restored, no recording left inrec_list.infosys_get_page ADSREADandinfosys_index tcplclib_tc2_system→ the HTML walker was written against the page shape reported through a Markdown converter, not the raw HTML (this repo was built on a host that cannot reach infosys.beckhoff.com). Check: title = symbol name,kindsin the index result mostly FunctionBlock/Function/Struct,infosys_declaration ADSREADlists NETID…TMOUT with descriptions. If titles come back as "Beckhoff Information System" or kinds are allPage, the H1/<pre>selectors ininfosys.py::_MdWalkerneed the real markup — one page's HTML pasted back is enough.scripts\launch.cmd(used by the.mcpb) → Python discovery orderTCMCP_PYTHON→py -3→python→%LOCALAPPDATA%\Programs\Python\Python3*; the Microsoft-Storepython.exestub fails the version probe and is skipped. Run it once by hand with--no-runand watch stderr.
Anything that fails: the tool error text contains the ADS/HRESULT code; paste it back and the fix is usually one constant.
Changelog
0.6.0 — experiments (12 tools): YAML spec, background runner with snapshot/profile per run and factor restore, measures from recordings (last/latency/pulses/settle/dwell/edges/expr…), metrics with t/χ² CIs and Cpk, pass/fail/inconclusive verdicts with n-to-settle, Markdown+HTML report with identity/charts/audit/interpretation, compare. Capture profiles (7 tools): rec_scan of runtime or source with cost estimates and a markable checklist, {attribute 'tcmcp.record'} pragmas collected through proj_variables (pragmas now parsed and inherited down instance trees), named profiles replayed as one recording per mode group. infosys_* reference lookup (7 tools): sitemap-driven book list, per-library local index with FTS5, symbol search, declarations as data, code-example search, live page → Markdown, sitemap-verified web fallback, TwinCAT 2 filtered out; scripts/gen_tools_md.py. Packaging: Claude Code plugin + marketplace in .claude-plugin/ (/plugin install twincat-mcp@twincat-mcp, userConfig for Python/AmsNetId/modes), Claude Desktop .mcpb bundle (packaging/mcpb/build.py, manifest 0.3, tool list generated from the server, passes mcpb validate), self-bootstrapping launcher scripts/launch.py (+ launch.cmd) that creates the venv on first start and reinstalls only when the shipped sources change; skill moved to skills/twincat-mcp/; HTTP mode bearer-token gate for claude.ai remote connectors. Plugin path verified end-to-end on Linux (install → venv → tc_doctor via mcp__plugin_twincat-mcp_twincat__tc_doctor); launch.cmd Python discovery is untested on Windows.
0.5.0 — dialog watchdog, TwinSAFE guard, XML validation/fixes + LineIds regeneration, TE2000/TcVIS HMI binding index with runtime/source cross-check, I/O disable, variable links, UDP discovery, Windows event log, C#/TypeScript/JSON exporters, snapshot apply, session report, naming_prefixes config.
0.4.0 — composite workflows (wf_debug_symbol, wf_fb_profile, wf_release_check, wf_project_overview), MCP prompts as workflow recipes, rec_compare, proj_changed (git), proj_scan incremental, ads_io_read (process image), compact symbol listing, size-guarded ads_read, separate ADS workers for quick vs long calls, Claude Code integration kit (integrations/claude-code/).
0.3.0 — datatype-table upload and parsing: full nested decode of any variable in one read (ads_read), ads_leaves, ads_dump (every variable on the PLC → JSON + CSV), ads_types; recorder prefixes expand through the table (arrays of structs included); proj_variables (source-declared variables flattened to instance paths) and proj_vs_runtime (source vs online cross-check).
0.2.0 — real-time recorder (rec_*), test bench (test_*, snap_*), runtime diagnostics (ads_app_info, ads_task_stats, ads_ping), ADS RPC (ads_call_method), static checks (proj_interface, proj_lint, proj_call_graph), tcunit_scaffold. Review fixes: ROT enumeration (EnumRunning), vsBuildState constant, raw writes limited to PLC ports with symbol-overlap deny checks, tokens bound to the connected machine, ads_connect re-targeting gated, destructive DTE commands classified, project write-back byte-exact (BOM/EOL preserved) and duplicate-name aware, cooperative cancellation of long ADS loops, blocking calls moved off the event loop.
0.1.0 — initial release.
Not covered (deliberately)
Scope/TE13xx recording, TE1200 static analysis, NC axis commissioning, Safety (TISC) editing, library repository management, semantic code search, OPC UA. The tree XML tools (xae_tree_get / xae_tree_consume_xml) reach most of the rest of the System Manager generically.
Development
python -m pytest # 159 tests (safety matrix, type codec, project parser, fake ADS incl. notifications/RPC, fake COM, recorder, bench, lint, MCP e2e incl. elicitation, packaging)
python packaging/mcpb/build.py # dist/twincat-mcp-<version>.mcpb; npx @anthropic-ai/mcpb validate runs if Node is present
claude plugin validate . # plugin + marketplace manifests
python -m twincat_mcp --print-config
python -m twincat_mcp --http 8765 # streamable-http on loopback; --token / TCMCP_HTTP_TOKEN adds a bearer gate for tunnelsMIT.
Available Tools
139 toolsads_add_route_to_plcCDestructive
Create the PLC-side route back to this PC (UDP discovery protocol, needs the target's Windows/TC-BSD credentials). Control-class.
| Name | Required | Description | Default |
|---|---|---|---|
| plc_ip | Yes | ||
| hostname | No | ||
| route_name | No | ||
| local_net_id | No | ||
| plc_password | No | 1 | |
| plc_username | No | Administrator | |
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=true, so the safety profile is covered. The description adds useful context by naming the UDP discovery protocol and stating that credentials are required. It does not explain reversibility, side effects, or what the confirm_token parameter is for, leaving meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise and front-loads the action and target. The trailing fragment 'Control-class.' is terse but cryptic, slightly weakening an otherwise efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a destructive mutation with 7 parameters and zero schema descriptions, yet the description omits parameter-level meaning, confirmation flow, and side effects. It does mention protocol and credential requirements, but this is not enough for the agent to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 7 parameters, so the description must compensate but largely does not. 'Needs the target's Windows/TC-BSD credentials' loosely hints at plc_username and plc_password, but plc_ip, hostname, route_name, local_net_id, and confirm_token are not explained at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('PLC-side route back to this PC'), which distinguishes it from sibling route-listing tools such as ads_routes. However, it does not explicitly name any alternative tool or clarify when this creation tool should be preferred over discovery or listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions a prerequisite ('needs the target's Windows/TC-BSD credentials') and the protocol involved, which gives some usage context. But it gives no explicit when-to-use guidance, no when-not-to-use conditions, and no alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_app_infoBRead-only
PLC application info (TwinCAT_SystemInfoVarList._AppInfo): project/app name, online change count, boot data loaded, task count, logged-in flag, app timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the field inventory, which is useful, but says nothing about connection/auth requirements or whether it is safe to poll repeatedly. Adequate with annotations, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the resource definition front-loaded and the field list appended parenthetically. It earns its place, though the internal TwinCAT type name is borderline clutter for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema present, the description needn't explain return formatting, and it does supply the semantic meaning of the payload fields. The only real gap is the lack of connection/precondition context for a PLC-targeted read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The empty schema leaves nothing to disambiguate, and the description correctly adds no parameter guidance that would be redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (PLC application info, anchored to TwinCAT_SystemInfoVarList._AppInfo) and enumerates the fields it covers, so an agent knows exactly what it returns. It does not differentiate itself from adjacent siblings such as ads_status or ads_task_stats, which overlap on task count and state, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no stated prerequisites (e.g. an active ADS connection via ads_connect), and no named alternative among the many ads_* siblings. The agent must infer invocation context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_call_methodADestructive
Invoke an FB method on the running PLC via ADS RPC. The method must carry {attribute 'TcRpcEnable'}. inputs: [{type:'LREAL', value: 12.5}, …] in VAR_INPUT order (use base types: INT not E_Enum); outputs: ['BOOL', …] in VAR_OUTPUT order. Write-class.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | No | ||
| method | Yes | ||
| outputs | No | ||
| instance | Yes | ||
| return_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false and destructiveHint=true; the description is consistent ('Write-class') and adds substance the annotations cannot: the TcRpcEnable prerequisite and the ordering/type constraints for arguments. It still does not describe failure modes on the PLC side or whether a partial write can occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Terse and front-loaded: the purpose comes first, then the prerequisite, then the argument contract. The telegraphic fragments ('Write-class.', parenthetical type note) are dense but each carries information; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the essential calling contract plus the RPC-enable prerequisite. Missing pieces are secondary: how to address the FB instance, error behavior, and side effects of a destructive write-class call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It does well on two of the five parameters (exact shapes for inputs as {type,value} and outputs as type-name strings, with VAR_INPUT/VAR_OUTPUT ordering and a base-type warning), but says nothing about instance, method, or return_type, which are the required/optional identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: invoking an FB method on a running PLC over ADS RPC, which is distinct from the symbol-level ads_read/ads_write siblings. It does not explicitly name a sibling it competes with, so an agent must infer that this is the only method-invocation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real precondition (the method must carry {attribute 'TcRpcEnable'}) and labels the operation 'Write-class', which steers the agent toward mutating-use context. It stops short of stating when to prefer this over ads_write/ads_write_many or what to do if the attribute is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_connectADestructive
(Re)connect to a target. ams_net_id like '5.12.34.56.1.1', 'local' for this PC, None = keep current; port 851 = PLC runtime 1. Re-targeting to a NetId other than the configured one is control-class (it changes which machine every later write hits).
| Name | Required | Description | Default |
|---|---|---|---|
| ams_port | No | ||
| ams_net_id | No | ||
| ip_address | No | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description adds genuinely new context beyond them: re-targeting is 'control-class' because it changes which machine every later write hits. That side-effect disclosure is real value. It omits that re-targeting likely requires the confirm_token the schema exposes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the action and followed by the highest-value caveat. No filler; a slight tightening of the parenthetical would be the only improvement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but for a destructive, non-idempotent control operation the description should say whether a confirmation/confirm_token is required and what happens on failure. That gap is meaningful for a 4-parameter mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It ably explains ams_net_id formats ('5.12.34.56.1.1', 'local', None) and the 851 port meaning, but leaves ip_address and confirm_token completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
(Re)connect to a target' states the verb and resource clearly and could not be confused with read-oriented siblings like ads_read or ads_status. It does not, however, differentiate itself from ads_discover or ads_add_route_to_plc, which also concern target/routing topology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to call it (reconnect, optionally re-target) and gives useful defaults ('None = keep current'), but never states when NOT to use it or names an alternative tool for changing targets. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_discoverARead-only
Broadcast search for TwinCAT targets on the local network (UDP 48899): NetId, host name, TwinCAT version, IP — the same thing XAE's 'Broadcast Search' does.
| Name | Required | Description | Default |
|---|---|---|---|
| broadcast | No | 255.255.255.255 | |
| timeout_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the operation is a UDP broadcast on port 48899 scoped to the local network, meaning it cannot reach remote subnets and may block for the timeout window. It does not mention behavior on zero results or timeout exhaustion, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and the transport, followed by the returned fields and an intuitive analog. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Low-complexity tool with only two optional parameters and an output schema, so return-value explanation is unnecessary. The remaining gap is the lack of any workflow framing (that discovery precedes connect/route-added operations) and timeout semantics, but for a discovery tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates only partially: 'local network' loosely gestures at the broadcast address parameter, but neither the broadcast target handling (default 255.255.255.255) nor the timeout_s semantics or units are explained. For two undocumented parameters the description should carry this load, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (broadcast search for TwinCAT targets), states the transport (UDP 48899), and enumerates the payload fields returned (NetId, host name, TwinCAT version, IP). This clearly separates it from connection-oriented siblings like ads_connect/ads_ping and from the XAE-side xae_target tool, without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The XAE 'Broadcast Search' analogy implies this is the discovery step performed before connecting (e.g. ahead of ads_connect or ads_add_route_to_plc), but usage is only implied. There is no explicit statement of when to prefer this over e.g. ads_status or a direct-IP connection, nor any prerequisite/exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_dumpARead-only
Read EVERY variable on the PLC (all top-level symbols, fully expanded through the datatype table — structs, FB instances, arrays of structs) in one pass and write a nested JSON tree plus a flat CSV (path,type,value). pattern limits the roots ('MAIN.', 'GVL_'); system/library symbols excluded unless include_system. Returns counts, file paths and a 50-leaf preview; use proj_read_file / rec-style tooling on the files for detail.
| Name | Required | Description | Default |
|---|---|---|---|
| out_dir | No | ||
| pattern | No | ||
| max_leaves | No | ||
| max_total_mb | No | ||
| include_system | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile for the PLC side, the description adds the meaningful behavioral detail that this operation also writes files to disk and returns counts, file paths, and a 50-leaf preview rather than the full data. It does not explain what out_dir defaults to, whether existing files are overwritten, or what max_leaves / max_total_mb do when hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then constraints, then return shape and hand-off to sibling tooling. Dense but every sentence carries information; the parenthetical expansions are the only slightly heavy part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk-dump tool that also writes files, the description covers scope, filtering, exclusions, and return shape well, and an output schema exists so return values need not be detailed. However, with 0% param coverage and no statement about write destination defaults or cap behavior, the agent cannot fully predict the side effects of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all five parameters. It explains pattern with syntax examples and include_system with its default behavior, but out_dir, max_leaves, and max_total_mb — two of which look like truncation/safety caps an agent should reason about — are entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read EVERY variable on the PLC'), the exact scope (top-level symbols fully expanded through the datatype table including structs, FB instances, arrays of structs), and the two artifacts produced (nested JSON tree plus flat CSV). This clearly separates it from siblings like ads_read, ads_read_many, and ads_list_symbols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete scoping conditions ('pattern limits the roots (MAIN.*, GVL_*)', 'system/library symbols excluded unless include_system') and routes the agent to direct alternatives for detail ('use proj_read_file / rec-style tooling on the files'). It doesn't explicitly contrast against ads_read_many or state when a bulk dump is preferable to a targeted read, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_ethercatARead-only
EtherCAT master state (INIT/PREOP/SAFEOP/OP) and slave count via the master's ADS port (default 65535 for the first master; see Device → ADS tab in XAE).
| Name | Required | Description | Default |
|---|---|---|---|
| master_port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful return-content context (master state and slave count) and the default port, but it omits behavioral details such as connection prerequisites, error conditions, or what happens when no master is found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence: purpose first, then parenthetical port details. Every fragment earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with an output schema, the description provides the necessary purpose, return fields, and parameter default. It is nearly complete, though it could mention that the ADS connection must already exist and clarify its relationship to general ADS status tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter meaning. It does this well by stating the default port (65535 for the first master) and pointing to the Device → ADS tab in XAE, which is meaningful guidance beyond the bare 'Master Port' schema title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (EtherCAT master) and the exact information returned (state values INIT/PREOP/SAFEOP/OP and slave count). It is clear enough to distinguish from generic ADS tools, but it does not explicitly contrast with siblings like ads_status or ads_plc_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided. The description explains the default ADS port and where to find it in XAE, but it does not say when an agent should call this tool versus ads_status, ads_discover, or other diagnostic siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_exportBRead-only
Generate code from the runtime: fmt=csharp (explicit-offset structs + enums for Beckhoff.TwinCAT.Ads ReadAny/WriteAny), typescript (interfaces), json (type descriptions), or csharp_symbols (const symbol paths under prefix). types = struct/enum names; prefix = take the types of every symbol under it.
| Name | Required | Description | Default |
|---|---|---|---|
| fmt | No | csharp | |
| types | No | ||
| prefix | No | ||
| out_path | No | ||
| namespace | No | Transflo.Plc |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about what the generated csharp output is for (Beckhoff.TwinCAT.Ads ReadAny/WriteAny), but says nothing about the out_path parameter, which implies filesystem write behavior not reflected in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first clause, then compresses format semantics into a dense but readable single passage. No filler sentences, though the run-on format list is slightly hard to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a 5-parameter tool with 0% schema coverage, leaving out_path and namespace undocumented leaves the definition short of what an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the full parameter burden. It richly documents fmt (all four values), types, and prefix, but leaves out_path and namespace completely unexplained — two of five parameters remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate code from the runtime') and immediately enumerates the four output formats, making it clearly distinguishable from siblings like ads_types, ads_list_symbols, and rec_export. An agent can tell what this produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what each fmt produces but never says when to choose this tool over alternatives such as ads_read, ads_types, or xae_plcopen_export, nor what preconditions (e.g. a live ADS connection) apply. Guidance is entirely format-selection, not usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_io_readARead-only
Raw process image of the PLC: area 'I' (%IB inputs) or 'Q' (%QB outputs) at a byte offset — what the task actually sees/wrote, independent of symbol names (link checks).
| Name | Required | Description | Default |
|---|---|---|---|
| area | Yes | ||
| port | No | ||
| size | No | ||
| offset | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context: this reads the raw process image as the task actually sees/wrote it, bypassing symbols. It does not mention port/size behavior or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the resource front-loaded and area/offset semantics attached efficiently via punctuation. No filler, though the em-dash clause packs several ideas together at the cost of some scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a 4-parameter tool with 0% schema coverage, the description leaves port and size unexplained and offers no guidance on selecting this tool over the many sibling read variants.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It usefully explains 'area' (I=%IB inputs, Q=%QB outputs) and 'offset' (byte offset), functioning as an implicit enum. It adds nothing for 'port' (default 851) or 'size', leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (raw process image of the PLC), the areas I/Q with their %IB/%QB mapping, and the byte-offset addressing. It distinguishes itself from symbol-based reads via 'independent of symbol names,' though it does not differentiate from the close sibling ads_read_raw.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(link checks)' hints at the intended use case but there is no explicit when-to-use/when-not guidance or named alternative versus ads_read, ads_read_raw, or ads_read_many. 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.
ads_leavesBRead-only
Enumerate every scalar leaf under a symbol with byte offsets (datatype table): 'MAIN' → all program variables, 'MAIN.arrSteps' → arrSteps[1].nId … With values=true each leaf is decoded from one read of the whole symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| max_leaves | No | ||
| with_values | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that – leaves carry byte offsets, and with values=true the values come from a single whole-symbol read – but says nothing about limits, truncation from max_leaves, or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action and followed by a concrete example. The example and the with_values note both earn their place; only the trailing ellipsis-style formatting is slightly loose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be described. Still, for a read-only enumeration tool with 0% schema coverage, the missing explanation of max_leaves and the absence of any when-to-use routing against sibling read tools leave the definition short of fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It partly does: it shows the accepted 'name' syntax and explains the effect of with_values=true. However, max_leaves (default 5000) is never mentioned, so one of three parameters is entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Enumerate') and resource ('every scalar leaf under a symbol'), and gives concrete examples of the symbol syntax ('MAIN', 'MAIN.arrSteps' → arrSteps[1].nId) that pin down exactly what is returned. It is clear what the tool does, though it never explicitly distinguishes itself from leaf-reading siblings like ads_read or ads_symbol_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the syntax examples and the byte-offset detail hint at when leaf enumeration is appropriate, but there is no explicit 'use this when you need X instead of ads_read/ads_symbol_info'. An agent must infer the alternative from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_list_symbolsBRead-only
Browse the runtime symbol table. pattern is fnmatch ('MAIN.', 'valve'; bare text is wrapped in ''). type_filter substring-matches the type ('ST_', 'BOOL', 'FB_'). flag filters by symbol flag: PERSISTENT, READONLY, STATIC, ATTRIBUTES … compact=true returns 'name : type' strings only (one fifth of the tokens).
| Name | Required | Description | Default |
|---|---|---|---|
| flag | No | ||
| limit | No | ||
| offset | No | ||
| compact | No | ||
| pattern | No | * | |
| refresh | No | ||
| type_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that compact mode returns a token-reduced format (one fifth of the tokens), which is useful behavioral context beyond annotations. However, refresh parameter behavior and pagination are not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-structured, front-loading the purpose then covering parameters with concrete examples. Every sentence adds value. Slightly terse but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, 0% schema coverage, and no output schema, the description covers the key parameters well but omits limit, offset, and refresh semantics. An agent might not know default pagination behavior or what refresh does. Adequate but incomplete for a 7-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains pattern (fnmatch with examples and bare-text wrapping), type_filter (substring match with examples), flag (accepted values), and compact (format and token savings). This meaningfully clarifies the most important parameters, though limit, offset, and refresh are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Browse the runtime symbol table.' Clear what it does. It doesn't explicitly differentiate from siblings like ads_symbol_info or ads_discover, but the tool name and description are distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or mention of alternatives. An agent must infer that this is for enumerating symbols vs ads_symbol_info which likely gets details for one symbol. No exclusions or routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_pingCRead-only
ADS round-trip time statistics to the target (router/route/network health).
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that this measures round-trip time and relates to router/route/network health, but says nothing about blocking behavior, timeouts, how count affects duration, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no padding, front-loaded on the tool's subject. Slightly awkward phrasing ('statistics to the target') costs it the top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and annotations cover safety. Still missing are parameter meaning (port/count) and any usage guidance, which are needed for correct invocation even on a simple two-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never explains the two parameters. It implies repeated measurement (count) and a target port, but neither is stated or given format/semantics, so it fails to compensate for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (ADS target) and the measurement (round-trip time statistics), plus the diagnostic domain (router/route/network health). However, it uses no explicit verb and reads more like a description of the output than of an action, so it is only vaguely distinguishable from siblings like ads_status or ads_routes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical hints at a diagnostic use case, but there is no explicit when-to-use, when-not-to-use, or named alternative among the many ads_* siblings. The agent is left to infer that this is a connectivity/latency probe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_plc_stateADestructive
PLC runtime control via ADS: run | stop | reset. 'reset' is a cold reset (all non-persistent data lost). Control-class: confirmation in guarded mode.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description adds real beyond-annotation context: 'reset' is a cold reset that loses all non-persistent data, and 'Control-class: confirmation in guarded mode' signals the confirm_token requirement. This is meaningful disclosure of what gets destroyed and what authorization is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the tool's function and immediately followed by the critical destructive-action caveat. The pipe-list action notation is efficient; there is essentially no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the destructive semantics are covered. The gap is the confirm_token workflow: the agent is told confirmation exists in guarded mode but not how to obtain or use the token (e.g., via the sibling tc_request_confirmation), leaving invocation incomplete for write operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning; it does partially compensate by enumerating the accepted action values (run | stop | reset), which the schema omits. However confirm_token is only obliquely referenced via "confirmation in guarded mode" and its format/obtaining procedure is unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("PLC runtime control via ADS") and enumerates the concrete actions run | stop | reset, so the agent knows exactly the domain of effect. It does not explicitly differentiate itself from adjacent siblings like ads_system_mode or xae_restart_twincat, leaving some disambiguation to be inferred from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case (runtime state control) and adds the important prerequisite that confirmation is required in guarded mode, but it never states when to prefer this over ads_system_mode or tc_set_mode, nor any exclusions. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_readARead-only
Read one symbol with type-aware decoding. Structs/FB instances/arrays of structs decode into a nested tree (datatype table); TIME/DATE/DT/TOD get readable text; enums get names. Trees larger than max_chars are summarised (member names + sizes) — use ads_leaves or ads_dump for the full content.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| max_chars | No | ||
| max_members | No | ||
| expand_struct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description goes beyond that by disclosing decoding behavior: structs/FBs become a nested datatype table, TIME/DATE get readable text, enums get names, and oversized trees are truncated to member names plus sizes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the core behavior front-loaded, followed by decode specifics and the truncation escape hatch. No filler, though the output-format detail is arguably more than needed given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return-value rendering is well explained (and an output schema exists anyway), and safety is covered by annotations. However, with three of four parameters undocumented at 0% schema coverage, the definition is not complete enough for an agent to tune the call confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet only max_chars is given meaning (the truncation threshold). max_members, expand_struct, and the name format are entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one symbol') with a distinguishing qualifier ('type-aware decoding'). The 'one symbol' phrasing implicitly separates it from ads_read_many, and 'type-aware' implies a difference from ads_read_raw, though neither sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: when the decoded tree exceeds max_chars it is summarised, so use ads_leaves or ads_dump instead. This is clear conditional guidance, but it does not cover when to prefer ads_read over ads_read_raw or ads_read_many.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_read_manyBRead-only
Read several symbols in one ADS sum-command. Returns {name: value | {error}}.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real context beyond that — a single batched round trip and per-name error results rather than an all-or-nothing failure — but says nothing about connection requirements or limits on batch size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and mechanism, no filler. The return-shape notation '{name: value | {error}}' is terse to the point of being slightly cryptic, and it partly restates what the output schema already defines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained (the description does so anyway). What is missing for correct invocation is the symbol-name format and the connection precondition implied by sibling ads_connect; for a one-parameter batch read that leaves a visible gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter ('names') with 0% schema description coverage, so the description must compensate. It conveys that the array holds symbols and roughly what comes back, but never clarifies the expected symbol path format (e.g. 'MAIN.bVar'), which is the main thing an agent would get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read several symbols) plus the mechanism (one ADS sum-command), which distinguishes it from the singular ads_read without needing the schema. It does not, however, name the sibling it replaces the way a 5-level description would.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batching intent is implied by 'several symbols in one' command, so an agent can infer this is the multi-read variant of ads_read. But there is no explicit when-to-use statement, no mention of ads_read_raw or ads_io_read as alternatives, and no prerequisites (e.g. an active ads_connect) despite ads_connect being a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_read_rawCRead-only
Raw ADS read by index group/offset on any port (hex + little-endian uint).
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| size | Yes | ||
| ams_net_id | No | ||
| index_group | Yes | ||
| index_offset | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that reads are raw, address-based, usable on any port, and mentions hex/little-endian uint output, but it does not clarify that parenthetical or disclose connection requirements or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding. The parenthetical is terse but cryptic, slightly reducing clarity rather than adding useful structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although output schema exists and annotations cover safety, the description is too thin for a five-parameter raw-read tool. It omits meaning for size and ams_net_id and gives no sibling comparison or usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It names index_group, index_offset, and port, but says nothing about required size or optional ams_net_id, leaving two of five parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Raw ADS read' by index group/offset on any port. This implicitly distinguishes it from higher-level reads like ads_read, but it never names or explicitly contrasts with any sibling tool, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no alternatives, and no exclusions. An agent learns what the tool does, but not when to choose it over ads_read, ads_read_many, or ads_io_read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_routesBRead-only
Local static ADS routes (parsed from StaticRoutes.xml on this PC).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description contributes the useful detail that results are parsed from a local config file rather than queried live from the PLC, which explains why results are static. It says nothing about staleness, refresh behavior, or result volume, so it adds moderate value only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, and the most important qualifier ('local static') is front-loaded. It is arguably too terse — no verb and no leading description of intent — which keeps it just below top marks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an existing output schema, and annotations covering the safety profile, the description is close to sufficient. It still leaves open how this relates to ads_add_route_to_plc and ads_discover (static file view vs. live routing table) and whether the file is re-parsed on each call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain and the baseline is 4. The description correctly implies the tool needs no arguments by scoping itself to 'this PC'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (local static ADS routes) and discloses its provenance (StaticRoutes.xml on this PC), which distinguishes it from the write-oriented sibling ads_add_route_to_plc. It lacks an explicit verb (list/get/read), but the noun phrase is unambiguous enough that an agent knows what it retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: no statement of when to call this versus ads_add_route_to_plc, ads_discover, or ads_status, and no preconditions (e.g., whether the ADS connection must be live or whether 'static' excludes dynamically discovered routes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_statusARead-only
Composite status: connection, PLC runtime state, TwinCAT system mode (RUN/CONFIG), device name/version. With port=N returns only the ADS state of that port (852 PLC2, 500 NC, 10000 system service, 65535 EtherCAT master 1).
| Name | Required | Description | Default |
|---|---|---|---|
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: what the composite contains and how the single-port mode differs, including a mapping of well-known port numbers to their services.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the composite behavior, then the port override with concrete examples. No filler, and each clause adds usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is unnecessary, and annotations cover the read-only nature. The description covers the composite/single-port duality and port semantics adequately, though it omits guidance on when to prefer this over the dedicated sibling status tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% on the single port parameter, so the description must compensate, and it largely does: default null yields the composite, a supplied port yields only that port's ADS state, and example values (852 PLC2, 500 NC, 10000 system service, 65535 EtherCAT master 1) clarify intended input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (composite ADS status) and enumerates the fields returned (connection, PLC runtime state, TwinCAT system mode, device name/version). It does not, however, differentiate itself from siblings like ads_plc_state or ads_system_mode despite naming overlapping data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call with no port for the composite, call with port=N for a single-port ADS state. There is no explicit when-not guidance and no named alternative among the many status siblings (ads_plc_state, ads_system_mode, ads_ping), leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_symbol_infoBRead-only
Type, size, index group/offset, flags (READONLY, PERSISTENT …) and comment of one symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and destructiveHint=false already establish this as a safe read, so the description's burden is lower. It adds the field-level content (flags like READONLY, PERSISTENT), which is useful context, but says nothing about needing an active ADS connection or behavior on unknown symbols.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the resource and returned fields front-loaded; nothing is wasted. It reads as a fragment rather than a sentence, but that costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations cover the safety profile. What is missing is the connection prerequisite and the required format of the symbol identifier, both of which an agent needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'name' parameter is undocumented. 'of one symbol' implies the argument identifies a single symbol rather than a pattern, which adds marginal meaning, but no symbol-path syntax (e.g. qualified path) is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (one symbol) and enumerates the exact metadata returned (type, size, index group/offset, flags, comment), which separates it from ads_list_symbols (listing) and ads_read (values). It lacks an explicit verb, but the noun-phrase form is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the many alternatives in this large sibling set (ads_list_symbols, ads_leaves, ads_types, ads_read). The agent must infer that this is for a single symbol's metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_system_modeADestructive
Switch TwinCAT on the target between 'run' and 'config' mode (restarts the runtime, I/O goes down). Destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 safety profile is covered. The description adds real value beyond that: it names the exact consequence (runtime restarts and I/O drops), which is essential operation context for a disruptive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core action, then immediately qualifies it with the destructive consequences. No filler, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and annotations cover the safety hints. But with 0% parameter coverage and an unexplained confirm_token tied to a destructive-mode switch, plus no routing guidance among many mode-related siblings, the definition is only minimally complete for such a high-risk operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter burden. It names the two 'action' values ('run' and 'config'), which is useful mapping, but it never explains the confirm_token parameter or the confirmation flow it implies, leaving a required interaction step undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Switch') and resource ('TwinCAT on the target') plus the two states it toggles between, so the agent knows exactly what the tool does. It does not, however, differentiate itself from close siblings like tc_set_mode or ads_plc_state, leaving ambiguity about which mode-switcher to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It warns of the side effect (runtime restart, I/O down) and declares itself 'Destructive-class,' which implies caution, but it never says when to use this versus the sibling alternatives such as tc_set_mode, ads_plc_state, or xae_restart_twincat, nor any prerequisite or ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_task_statsBRead-only
PLC task timing (TwinCAT_SystemInfoVarList._TaskInfo[n]): cycle time, last/min/max/mean
execution time over samples, load %, cycle-time-exceeded counter delta — the FB's cost
on the real-time task.
| Name | Required | Description | Default |
|---|---|---|---|
| samples | No | ||
| task_index | No | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful context beyond that — the underlying SystemInfoVarList source and that timing is averaged over `samples` — but says nothing about how sampling blocks, cost of the read, or any permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the resource and source path, followed by the metric list. Every clause is informative, though the em-dash tail slightly overloads one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and read-only annotations cover safety. However, with 0% schema coverage the three parameters are not fully described, which is a real gap for an agent trying to tune sampling behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, yet it only mentions `samples` (execution time over `samples`) and hints at `task_index` via the [n] notation. `interval_ms` is never explained, leaving a third of the parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (PLC task timing) and enumerates exactly what it returns: cycle time, last/min/max/mean execution time, load %, and exceeded-counter delta. The parenthetical source path and the 'FB's cost on the real-time task' framing make the intent concrete, though it does not name or contrast a sibling profiling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: measuring a function block's real-time cost suggests a profiling context, but there is no when-to-use, when-not, or alternative (e.g. wf_fb_profile, rec_stats) named. An agent must infer the scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_typesBRead-only
Runtime datatype table: describe one type (members with offsets/sizes, array bounds, enum literals, attributes) or list types matching a pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pattern | No | ||
| type_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds some behavioral value by enumerating the data returned (offsets, sizes, bounds, enum literals, attributes), but says nothing about scope limits, connection requirements, or behavior when a type/pattern matches nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the resource and then the two operating modes. Nothing is padded, though the parenthetical detail list pushes it toward a run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the read-only annotations cover safety. Still, with three undocumented parameters (limit, pattern, type_name all at 0% schema coverage), the description should say more about parameter meaning and defaulting to be fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It effectively disambiguates type_name (single type) from pattern (matching list), but leaves 'limit' entirely unexplained and gives no syntax for pattern (glob vs. regex) or expected type-name format, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('Runtime datatype table') and two distinct operations (describe one type vs. list types matching a pattern), plus what a description contains (members with offsets/sizes, array bounds, enum literals, attributes). It is clear enough to distinguish from symbol/read siblings, though it never names an alternative such as ads_symbol_info or ads_list_symbols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two modes ('describe one type' vs 'list types matching a pattern') imply which parameter to use, giving implicit usage guidance. There is no explicit when-to-use/when-not-to-use statement and no routing to a sibling tool, so an agent must infer the selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_wait_untilBRead-only
Block until symbol value (==, !=, >, >=, <, <=) or timeout. Returns met/elapsed.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| name | Yes | ||
| value | Yes | ||
| timeout_ms | No | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds genuinely useful context beyond that: it will BLOCK until the condition is met or the timeout expires, and returns met/elapsed. However it omits operational details like polling behavior/interval and the risk of long blocking up to timeout_ms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the primary action front-loaded and zero filler. It is efficiently sized, though for a tool with five undocumented parameters the brevity edges toward under-specification rather than clean conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The three required params (name, op, value) are all covered, an output schema exists so return-value detail is not required, and annotations cover safety. The two optional params (timeout_ms default 10000, interval_ms default 50) are left undocumented, leaving a real gap against 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full param burden and must compensate. It does meaningfully document the `op` argument by enumerating the six comparison operators the schema leaves as a bare string, and it clarifies name/value roles. But timeout_ms and interval_ms (their defaults and units) are never addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (block/wait) and resource (symbol compared against a value via an operator) with the timeout escape condition. An agent can grasp the core action, but the description never distinguishes it from near-siblings like ads_watch or ads_read, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the mechanism but gives no when-to-use guidance, no prerequisites, and no named alternative (ads_watch is the obvious competing polling tool). The agent must infer the usage scenario purely from the blocking semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_watchARead-only
Sample symbols for duration_ms every interval_ms (polling trace). change_only keeps only rows where a value changed. Caps: 60 s, ≥10 ms, 5000 rows. Use for timing questions: 'does bDone pulse?', 'how long is the valve open?'.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | ||
| change_only | No | ||
| duration_ms | No | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive, so the safety profile is covered; the description adds real behavioral content beyond them: the change_only filtering semantics and hard caps (60 s, ≥10 ms, 5000 rows). It does not say whether the call blocks for the full duration_ms, which is the main remaining unknown for a polling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the sampling mechanism, then the filter flag, then the caps, then the use cases. Nothing is redundant and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure needn't be explained; the description complements it with caps and filter semantics. Blocking behavior and error/limit-exceeded handling are the only notable gaps for an agent deciding to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load — and it does: change_only is defined, duration_ms and interval_ms get constraints, and names is implied by 'Sample symbols'. Units come from the schema's *_ms naming, and default values (2000 ms, 50 ms, change_only=true) are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and mechanism: 'Sample symbols for duration_ms every interval_ms (polling trace)', which cleanly separates it from single-shot siblings like ads_read and ads_read_many. The two quoted timing questions ('does bDone pulse?', 'how long is the valve open?') further pin down its role, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it — timing/pulse-width questions rather than point-in-time value reads. It stops short of stating when NOT to use it or naming alternatives such as ads_read or ads_wait_until for a single value or a one-shot wait.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_writeBDestructive
Write a symbol on the running PLC. Accepts JSON scalars, lists for arrays, and literals like 'T#1s500ms', 'D#2026-10-15', '16#FF'. Returns before/after. Gated: readonly=never; guarded=write_allowlist; full=denylist only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 meaningful context: 'Returns before/after' and the gating rule ('readonly=never; guarded=write_allowlist; full=denylist only') tell the agent how writes are permitted in each mode. It stops short of warning about irreversibility or confirming a write actually took effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action, then the value formats, then the gating rule. No wasted words, though the accepted-literal list could be more tightly framed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description still notes 'Returns before/after'. For a destructive single-write tool with 0% param coverage, it covers value formats and permission gating adequately but leaves the name parameter and cross-tool routing unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It does explain the value parameter's accepted forms (scalars, lists, literals like 'T#1s500ms', 'D#2026-10-15', '16#FF'), which is genuinely additive, but the required 'name' parameter (the symbol identifier) is never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Write a symbol on the running PLC') with the target context ('running'). It is clearly a single-symbol write, which implicitly separates it from ads_write_many and ads_write_raw, but it never names those siblings so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use/when-not guidance and no routing to alternatives such as ads_write_many for multiple symbols or ads_read to check current values. The 'Gated' clause describes permission modes rather than selection context, so usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_write_manyADestructive
Write several symbols sequentially ({name: value}). Each one is gated and audited; stops at the first refusal.
| Name | Required | Description | Default |
|---|---|---|---|
| values | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description goes beyond them by disclosing that each write is individually gated, audited, and that the batch aborts at the first refusal — meaningful behavioral context for a destructive batch operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the batching, format, and failure policy all front-loaded. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and the description adequately covers format, gating, auditing, and abort semantics for a batch writer. Only the relationship to sibling write tools remains unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents a single free-form object at 0% coverage. The description compensates partially by specifying the '{name: value}' shape, but adds no detail on value typing, size limits, or ordering guarantees beyond 'sequentially'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Write several symbols') and the format ('{name: value}'), which naturally distinguishes it from the singular ads_write and the raw variants. It doesn't explicitly name the sibling it supersedes, but 'several' clearly scopes it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies batch write usage and notes fail-fast behavior, but never states when to prefer this over ads_write, ads_write_raw, or ads_read_many, nor any prerequisites. Usage must be inferred from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_write_rawADestructive
Raw ADS write by index group/offset — PLC runtime ports (851-859) only. Every symbol whose memory overlaps the written range is checked against the write allow/deny lists; the raw target itself is 'raw://'.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| hex_data | Yes | ||
| ams_net_id | No | ||
| index_group | Yes | ||
| index_offset | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and readOnly=false, but the description adds non-obvious behavior: every symbol whose memory overlaps the written range is validated against write allow/deny lists, and the raw target is named as 'raw:<port>/<igrp hex>/<ioffs hex>'. That safety-check disclosure is genuinely useful context beyond the annotations, though auth requirements and post-write state are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core action and port restriction front-loaded and no filler. The trailing 'raw:<port>/<igrp hex>/<ioffs hex>' fragment is a bit dense and could be clearer, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the destructive/allow-deny context is present. Still, for a raw memory-write tool with 0% schema coverage, the description omits the hex_data format, the ams_net_id parameter's purpose, and what happens when an overlapping symbol is denied, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must carry the load. It does clarify what index_group/index_offset mean (encoded as igrp/ioffs hex in the target string) and bounds the port parameter to 851-859, but it says nothing about hex_data's expected format or the role of ams_net_id, leaving the two most easily misused parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: a raw ADS write addressed by index group/offset, with the scope restricted to PLC runtime ports 851-859. It implicitly separates itself from the symbol-based ads_write/ads_write_many by emphasizing 'raw' and index-group addressing, but never names a sibling, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'PLC runtime ports (851-859) only' is a real domain constraint that tells the agent when the tool applies. However, there is no explicit guidance on when to pick ads_write_raw over ads_write, ads_write_many, or ads_read_raw, so usage is only implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_abortAIdempotent
Stop a running experiment after the current step; recordings are closed, factor values restored.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| reason | No | requested |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (write, idempotent, non-destructive), and the description usefully adds the side effects the agent could not otherwise know: recordings are closed and factor values are restored. It does not confirm the idempotent behavior or describe auth requirements, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb first and the two side effects appended; 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the annotations plus the side-effect sentence cover safety and effect. However, the complete absence of parameter documentation leaves a real gap for a mutation tool that takes an argument.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description carries the full burden, yet it mentions neither 'name' nor 'reason'. The agent gets no help on what to pass, and the 'reason' default of 'requested' is never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Stop a running experiment') plus the effect, which cleanly separates it from exp_run, exp_status, and exp_list in the sibling set. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after the current step' gives an implied condition of use, but no alternative tool is named and there is no explicit when-to-use or when-not-to-use guidance relative to exp_run or exp_status. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_compareBRead-only
Two experiments with the same levels side by side: metric deltas and whether their 95 % CIs separate (the before/after question with error bars).
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | ||
| b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read (readOnlyHint=true, destructiveHint=false). The description adds genuine behavioral context by disclosing what is computed (metric deltas, CI separation), but says nothing about what happens when the two experiments do not share levels or how results are scoped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core operation and no filler. The parenthetical is slightly dense but still earns its place by clarifying the comparison's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained here. However, with 0% parameter coverage the definition leaves the two required inputs and the 'same levels' precondition undefined, which is a real gap for an agent trying to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the two parameters are opaque single letters ('a', 'b'). The description lets the agent infer they are experiments, but adds no format, identifier convention, or ordering semantics, so the agent must guess what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (side-by-side comparison of two experiments) and the concrete output (metric deltas and whether 95% CIs separate). It is reasonably distinguishable from exp_evaluate/exp_report by describing the two-experiment, error-bar framing, though it never names a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Two experiments with the same levels' and the parenthetical 'before/after question', which hints at when it applies, but there is no explicit guidance on when to prefer this over exp_evaluate, exp_runs, or the analogous rec_compare/snap_compare.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_evaluateBRead-only
Metrics per level with 95 % CIs and the criteria verdicts (pass / fail / inconclusive with the run count that would settle it). Deterministic from runs.jsonl; rerunnable by anyone.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real value beyond that by disclosing that results are deterministic from runs.jsonl and that any user can rerun it, which tells an agent the output is stable and reproducible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the behavioral constraint (determinism, rerunnability) is front-loaded. The only weakness is that the opening sentence leads with outputs instead of the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained. However, the unexplained 'name' parameter and the total absence of usage routing leave gaps for a tool sitting in a dense family of exp_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter 'name' has 0% schema description coverage and is never mentioned in the description. An agent cannot tell whether 'name' is the experiment name, a file, or something else, so the description fails to compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description details what the tool returns (metrics per level, CIs, verdicts) rather than stating the action, leaving the verb to be inferred from the name 'exp_evaluate'. It does not distinguish this from siblings like exp_report or exp_compare, which likely also surface experiment results. The purpose lands as vague rather than a clear verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus exp_report, exp_compare, or exp_runs, nor any prerequisites (e.g., whether an experiment must have been run first). The only contextual hint is 'rerunnable by anyone', which touches idempotence but not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_getBRead-only
Spec, status and run summary of one experiment.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds only the content returned (spec/status/run summary); it says nothing about error behavior or whether the experiment must exist, which is acceptable given annotations but not generous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded noun phrase with zero filler; appropriately sized for a trivial getter, though the fragmentary style borders on under-specification rather than true economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the read-only annotations cover the safety profile. Still missing is any disambiguation from exp_list/exp_status/exp_runs and any hint about the 'name' parameter, leaving the definition minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the single 'name' parameter has no description. The tool description never clarifies whether 'name' is an experiment name, an ID, or a path, so it fails to compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase names the resource (one experiment) and enumerates the returned content (spec, status, run summary), and 'one experiment' is enough to distinguish it from exp_list. However it lacks an explicit verb and makes no reference to overlapping siblings such as exp_status or exp_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus exp_list, exp_status, or exp_runs, even though those siblings clearly overlap. The agent must infer selection criteria on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_listCRead-only
Experiments on disk with run counts, state and whether a report exists.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds only that it reads from disk and what metadata is attached, but since an output schema exists, these details are redundant and it says nothing about pagination, ordering, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single noun-phrase fragment is very short and contains no fluff, but it lacks a subject and verb, making it less clear than a well-formed sentence. It is not front-loaded with an action verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple read-only list with no parameters and a full output schema, the description still falls short by not stating the list action or any usage context. An agent could misread it as returning a single experiment rather than a collection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics for the description to clarify. Baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (experiments on disk) and the data included (run counts, state, report existence), but it is a noun phrase that never states the list action. An agent must infer 'list' from the tool name rather than the description, and no sibling differentiation is provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention when to call exp_list versus exp_get, exp_runs, or other experiment-related siblings, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_reportAIdempotent
Write <experiments_dir>//report.md and report.html: identity (machine, TwinCAT version, project, git state, safety mode), criteria table, metrics per level, charts (primary measure per run; per-level mean/CI), run table, the spec, the audit log of writes during the run, and the interpretation — stored separately and labelled as not computed. interpretation= saves a new one (author=agent|operator|). firmware_check=true runs proj_vs_runtime first.
| Name | Required | Description | Default |
|---|---|---|---|
| fmt | No | both | |
| name | Yes | ||
| author | No | agent | |
| firmware_check | No | ||
| interpretation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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), and the description goes beyond them by disclosing the two files written, that 'interpretation= saves a new one' with an author attribution scheme, and that firmware_check triggers proj_vs_runtime as a side effect. The audit-log content also signals that writes are tracked. Missing only details like overwrite behavior for existing reports.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The verb and target paths are front-loaded, which is good, but the body is a long run-on list that conflates artifact sections with parameter behavior. Every clause carries information, yet the density could be structured more readably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the substantive behavior an agent needs: what files are produced, that the interpretation is stored separately and labelled as not computed, and the firmware_check side effect. The unexplained fmt parameter and the lack of explicit alternative-tool routing are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains interpretation (saves a new one; author=agent|operator|<name>), author, and firmware_check, but never mentions what fmt='both' controls and only implies that name is the experiment directory. Two of five parameters remain unexplained, so it adds real but incomplete value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Write <experiments_dir>/<name>/report.md and report.html', so the agent knows it produces report artifacts for a named experiment. It enumerates the artifact contents (identity, criteria table, metrics, charts, run table, spec, audit log, interpretation), which further distinguishes it from siblings like exp_evaluate or exp_compare that analyze rather than render. It stops short of explicitly naming a sibling contrast, so a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: after a run, this is the tool that emits the report. The description does give conditional behavior ('firmware_check=true runs proj_vs_runtime first'), which hints at when the extra check matters, but there is no explicit guidance on when to prefer exp_report over exp_evaluate, exp_compare, or exp_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_runADestructive
Run an experiment in the background: per level × repetition → preconditions → factor values written → snapshot → capture profile started → stimulus → start acknowledged (done_when must go false) → done_when → settle → stop → measures → runs.jsonl. Factor values are read first and restored at the end or on abort (read back and checked). Every write is re-checked against the server guard, pinned to the machine the experiment started on, and audited with symbol and value; a refusal, a target change or a timed-out write stops the experiment. dry_run resolves every symbol, coerces condition values (enum names → ints) and prints the plan without writing. Starting is control-class: in guarded mode it asks once (elicitation / confirm_token); in full mode it does not. Only one experiment may run at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| resume | No | ||
| dry_run | No | ||
| max_runs | No | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructive=true and readOnly=false; the description adds substantial behavioral context beyond that: factor values are read first and restored on abort (read back and checked), every write is re-checked against a server guard, pinned to the starting machine, and audited with symbol/value, and a refusal/target change/timed-out write aborts the experiment. It also discloses the control-class confirmation flow (elicitation/confirm_token) and the single-experiment concurrency limit. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense but structured poorly: the opening sentence is a long arrow-delimited pipeline that is hard to parse and not obviously the highest-value content for selection. The behavioral safety details are valuable but buried mid-paragraph. Every sentence does carry meaning, so it is not padded, just densely and unfront-loadedly written.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not needed. For a complex, destructive background runner the description covers the pipeline, safety/audit behavior, abort conditions, dry_run semantics, and confirmation flow. The main gap is undocumented parameters (resume, max_runs, name), which slightly under-serves correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must carry the burden. It explains dry_run well (resolves symbols, coerces enum names to ints, prints plan without writing) and clarifies confirm_token's role in guarded mode. But name, resume, and max_runs get no explanation at all, leaving three of five parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource ('Run an experiment in the background') and then specifies the exact execution pipeline (preconditions → factor values → snapshot → stimulus → ... → runs.jsonl). This distinguishes it from siblings like exp_validate, exp_status, exp_runs and exp_abort, which clearly handle other phases. The core purpose is unambiguous, though the pipeline detail crowds the framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the described dry_run resolution/planning mode and the note that 'Only one experiment may run at a time,' plus the guarded-vs-full mode confirmation behavior. However, it never explicitly states when to prefer this over exp_validate or exp_save, nor routes the agent to exp_abort/exp_status for follow-up. Adequate but not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_runsDRead-only
Run records: level, status, measures, recording ids, duration, error.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| last_n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that: no pagination behavior for last_n, no defaulting semantics, no scoping or ordering. It contributes essentially nothing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Terse to the point of under-specification: a single sentence fragment with no verb. It is short but not because every element earned its place – it omits the core action while listing fields that the existing output schema already covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, yet the description spends its only line enumerating them. For a required-name query tool with weak usage and parameter coverage, the description is inadequate on the dimensions that matter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention either parameter. The 'name' (required) identifier and 'last_n' (default 100) window are entirely unexplained in prose; the listed tokens are output fields, not parameters, so they provide no compensating meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Run records: level, status, measures, recording ids, duration, error' essentially restates the tool name and enumerates fields rather than stating what the tool does. There is no verb or action ('list', 'retrieve runs for an experiment'), and no differentiation from siblings like exp_list or exp_get. It reads as a tautological field list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no alternatives named despite many exp_* siblings (exp_list, exp_get, exp_run, exp_status). An agent must guess whether this lists, reads, or aggregates runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_saveBIdempotent
Save an experiment spec (YAML or JSON) under <experiments_dir>//spec.yaml. Runs already recorded for that name are kept; resume picks up where they stopped.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| replace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish the safety profile (not read-only, idempotent, not destructive), and the description adds real value beyond them: recorded runs for that name are preserved and resume continues from where they stopped. This behavior about existing data is not derivable from the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no padding, and the core action plus destination path are front-loaded. The resume clause is the only slightly tangential addition, but it is useful behavioral context rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the key persistence/resume behavior is covered. However, the unexplained `replace` parameter and the absence of any usage routing leave gaps for a spec-writing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the parameter burden. It clarifies that spec may be YAML or JSON, but says nothing about the `replace` boolean (default true) — whether it replaces the spec, the runs, or the directory, leaving a mutation-relevant flag undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Save) and resource (experiment spec in YAML or JSON) plus the exact destination path <experiments_dir>/<name>/spec.yaml. It is clearly distinguishable from read/run siblings, though it does not name an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the save/resume framing but there is no explicit when-to-use vs alternatives guidance (e.g. vs exp_template, exp_validate, or exp_run). The resume note hints at context but the agent must infer the selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_statusARead-only
Live state of a running experiment: planned/done/failed, current level, ETA, last error, live recording ids. For an experiment from an earlier session, the persisted status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. Beyond that, the description discloses the live-versus-persisted behavior depending on session age, which is non-obvious context an agent could not get from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, and the primary behaviour (live state of a running experiment) is front-loaded before the earlier-session caveat. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only status tool with annotations covering safety and an output schema covering return shape, the description supplies the remaining essentials: what state is reported and how older experiments behave. Only the parameter's identity is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only parameter is a bare 'name' string with no explanation in either schema or description. With a single parameter the ambiguity is limited, but the description contributes nothing about what name identifies (experiment vs run), so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (experiment) and what is returned: the live state of a running experiment, enumerated as planned/done/failed, level, ETA, last error, recording ids. This clearly separates it from exp_list and exp_get in intent, though it never names a sibling to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It draws a useful internal distinction between a currently running experiment (live state) and one from an earlier session (persisted status), which is genuine usage guidance. However it never routes the agent to alternatives such as exp_get or exp_runs, so the choice among experiment 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.
exp_templateBRead-only
A complete example experiment spec to edit (YAML text + the same as JSON): factors × levels, runs per level, preconditions, start/done conditions, measures (last/latency/pulses/settle/ dwell/edges/expr…), metrics (mean/std/cpk/p95), criteria, writes_allowed. kind: dosing_fill.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | dosing_fill |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read profile is covered structurally. The description adds content context by enumerating what the template contains (factors, levels, runs, preconditions, measures, metrics, criteria, writes_allowed), which is useful but does not disclose behavioral traits like whether the returned spec is meant to be edited in place or re-saved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence states the resource and then enumerates its contents; the enumeration is dense but each item earns its place by telling the agent what the template will include. Slightly run-on but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the tool is a simple one-parameter template provider. The description covers the template's content scope, leaving only the minor gap of not confirming how the template is consumed relative to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden for the single 'kind' parameter. It partially compensates by naming 'kind: dosing_fill', but it only echoes the schema's default value and never explains what the parameter controls or what other kinds exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool provides a complete example experiment spec for editing, which is a clear resource, but it uses a noun phrase ('A complete example experiment spec to edit') rather than an action verb, leaving the agent to infer that this returns/creates a template. It also does not distinguish itself from siblings like exp_get or exp_list, so the agent cannot tell from the description alone why it would pick the template over an actual experiment spec.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The agent must infer that this is the starting point before building a real spec, but nothing in the text states that context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exp_validateARead-only
Validate a spec (YAML/JSON text, a dict, or a saved experiment by name): structure, measures, metrics, criteria, writes_allowed vs what the spec writes, the server guard's view of each write, symbol resolution on the connected PLC, planned run count and a duration estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| spec | No | ||
| resolve_symbols | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds substantive context: it discloses that it inspects the server guard's view of each write and performs symbol resolution against the connected PLC, which tells the agent this check depends on a live PLC connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the verb and resource front-loaded, followed by an enumerated list of checks. No filler, though the long comma-separated list is slightly heavy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description adequately covers input forms and validation scope for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description compensates well by explaining that 'spec' can be YAML/JSON text, a dict, or a saved experiment by name, and by noting symbol resolution on the PLC (the resolve_symbols toggle). Only resolve_symbols' exact semantics remain implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Validate) and resource (spec), then enumerates exactly what is checked: structure, measures, metrics, criteria, write guards, symbol resolution, run count, duration. This clearly distinguishes it from siblings like exp_run and exp_evaluate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'validate' implies a pre-run check and the enumerated checks reinforce that context, but the description never explicitly says when to use this versus exp_run or exp_evaluate, nor does it name any alternative. 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.
hmi_bindingsBRead-only
Which HMI files/controls bind a PLC symbol (fnmatch on the symbol path).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive behavior. The description adds useful behavioral context by disclosing that matching uses fnmatch on the symbol path. It does not mention limit or pagination behavior, but a 3 is appropriate with safety already covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is appropriately terse for a lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover safety, so return values need not be explained. However, for a three-parameter tool with 0% schema description coverage, the description is inadequate and provides no routing among many HMI/project siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters. The description hints that pattern uses fnmatch against the symbol path, but leaves kind and limit completely undocumented, so it only partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (HMI files/controls) and relation (bind a PLC symbol), making the query identifiable. However, it does not distinguish itself from HMI siblings such as hmi_scan or hmi_vs_runtime.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance, prerequisites, or alternatives are provided. The interrogative phrasing implies you use it to find bindings, but there are no conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hmi_scanBRead-only
Index HMI symbol bindings: TE2000 .view/.content/.usercontrol/.json (%s%PLC1.X%/s%) and TcVIS files. root defaults to project.hmi_root, else the project root.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: the file scope it walks and the root resolution fallback (project.hmi_root, else project root). It says nothing about cost, scale, or whether an index artifact is persisted, which matters for a tool named 'scan/index'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, what-it-does first, default behavior second — nothing superfluous. The embedded glob notation (%s%PLC1.X%/s%) is telegraphic and slightly opaque, but it is compact rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the one parameter is fully covered. The remaining gap is routing: nothing explains how this scan relates to hmi_bindings/hmi_vs_runtime, so an agent choosing among HMI tools is under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the single 'root' parameter is only typed as string|null with default null. The description compensates well by explaining that root falls back to project.hmi_root and then to the project root, which the schema does not capture at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Index HMI symbol bindings', and enumerates the exact file families it covers (TE2000 .view/.content/.usercontrol/.json and TcVIS). It does not, however, distinguish itself from close siblings like hmi_bindings or hmi_vs_runtime, so an agent must infer which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no routing to the obvious sibling tools (hmi_bindings, hmi_vs_runtime). The only usage-adjacent information is the root default fallback, which is parameter behavior rather than invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hmi_vs_runtimeBRead-only
Broken HMI bindings: symbols bound in the HMI that do not exist on the running PLC (and, with check_source, whether the source declares them), plus declared variables with no HMI.
| Name | Required | Description | Default |
|---|---|---|---|
| check_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses exactly what categories of mismatch are reported (broken bindings vs orphan declared variables) and that check_source extends the analysis to source declarations. It stops short of describing output shape, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the key concept ('Broken HMI bindings'), with no filler. The parenthetical and comma-plus clause make it dense and slightly awkward to parse, but the compactness is appropriate and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the safety profile is in annotations. What's missing is disambiguation from the many HMI/PLC-comparison siblings and any guidance on preconditions or scope, leaving the definition adequate but with clear gaps for a heavily populated sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden for the single boolean parameter. The parenthetical '(and, with check_source, whether the source declares them)' gives a partial semantics hint for check_source, but it doesn't clarify the default-on behavior or the cost/tradeoff of enabling it. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific diagnostic purpose: identifying HMI-bound symbols that don't exist on the running PLC plus declared variables with no HMI. It is concrete about what it reports. However, it does not distinguish itself from close siblings like hmi_bindings, hmi_scan, or proj_vs_runtime, leaving the agent to guess which to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no alternative tool is named or excluded. The only usage hint is the parenthetical describing what check_source adds, which is a parameter note rather than usage context. An agent cannot tell from this description when to prefer this over hmi_bindings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infosys_booksARead-only
List Infosys books (documentation sets) from the site's own sitemap, with page counts and whether they are indexed locally. pattern is a glob on the slug ('tcplclib_*', 'json'); category: plc-library | function-tf | engineering-te | twincat-system | hardware | other. TwinCAT 2 books are excluded. First call downloads the sitemap (a few MB, cached 7 days).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pattern | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive safety profile, so the description adds value by disclosing the sitemap download on first call (a few MB), the 7-day cache, and the TwinCAT 2 exclusion. These are genuine operational traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the core action leads, filters follow, and the caching note closes. It is dense but each clause carries information, with only minor run-on phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation. The description covers filtering, exclusions, and first-call cost/caching, leaving only the 'limit' parameter under-described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It documents 'pattern' as a glob on the slug with concrete examples and enumerates all valid 'category' values, covering two of three params well; 'limit' is left undocumented, so it does not fully close the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List Infosys books (documentation sets) from the site's own sitemap,' and adds what is returned (page counts, indexed-locally status). It is clearly a discovery/listing tool, though it does not explicitly name how it differs from siblings like infosys_index or infosys_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied—this is the listing/enumeration entry point—and it discloses the exclusion ('TwinCAT 2 books are excluded') plus filter semantics. However, it never explicitly says when to use this versus infosys_index or infosys_search, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infosys_declarationBRead-only
Declaration of a library symbol as data: kind, inputs/outputs/in_out (name, type, default, description from the page's table), struct members, enum values, return type, EXTENDS / IMPLEMENTS, plus the ST declaration text and the page URL. The thing to call before writing code against an FB you have not used before.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true/destructiveHint=false, so the safety profile is covered. The description adds useful context about what data the read yields (full ST declaration, page URL), but discloses nothing further about pagination, resolution failures, or lookup scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the returned payload and ending with the strongest routing cue. There is mild verbosity in the field enumeration, but no wasted framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't explain return values (it does anyway, harmlessly). Safety is covered by annotations. The remaining gap is the undocumented parameters, which keeps this from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither parameter is documented in the schema. The description only obliquely implies that 'symbol' is a library symbol; the optional 'library' parameter is entirely unexplained, so an agent must guess its meaning and format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (a library symbol's declaration) and enumerates what it returns (kind, inputs/outputs, struct members, enum values, EXTENDS/IMPLEMENTS, ST text, URL). It's much clearer than a generic search tool, though it doesn't explicitly name which sibling (e.g. infosys_search_symbols) it should be preferred over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"The thing to call before writing code against an FB you have not used before" gives an implied when-to-use. However, it names no alternatives and no exclusion conditions versus infosys_search_symbols, infosys_search, or infosys_get_page, which are the likely competing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infosys_get_pageARead-only
A documentation page as Markdown (headings, tables, fenced code). ref: full Infosys URL, 'book/pageid', a bare page id, or a symbol name ('ADSREAD'). Fetched live and cached; works for any page that exists on the site, indexed or not. refresh=true bypasses the cache.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| refresh | No | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, non-destructive profile, so the burden is lower. The description adds real behavior: fetched live, cached, refresh=true bypasses the cache, and coverage extends beyond the index. It stops short of noting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: output format first, then accepted ref forms, then caching/refresh. Every sentence carries information, though the packed parenthetical and inline ref examples make it slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. The description covers the input formats, cache behavior, and coverage scope adequately for a fetch tool; the only gap is the undocumented max_chars truncation control.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameters. It thoroughly documents the many accepted forms of 'ref' (URL, book/pageid, bare id, symbol name) and explains refresh=true. However max_chars is never addressed, leaving one of three parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: returns a documentation page as Markdown, with a note that it works for any page 'indexed or not'. This implicitly distinguishes it from the infosys_search/index siblings, but it never names them, so differentiation requires inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (fetch a specific doc page) and the 'works for any page... indexed or not' clause hints you can go direct rather than search. However there is no explicit when-to-use or when-not, and no sibling is named as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infosys_indexARead-only
Index a book (or glob of books, e.g. 'tcplclib_tc3_*') into the local cache: fetches every page that is new or changed since the last run (sitemap lastmod), extracts title/kind/library/ declaration, builds the full-text index. Tc2_System ≈ 300 pages ≈ 30-60 s. Needed before infosys_search_symbols/search_code can see a library; infosys_search falls back to the web.
| Name | Required | Description | Default |
|---|---|---|---|
| book | Yes | ||
| force | No | ||
| max_pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: incremental fetching (only new/changed pages via sitemap lastmod), what is extracted (title/kind/library/declaration), and a concrete cost estimate (300 pages ≈ 30-60 s). One minor tension: it writes to a local cache while readOnlyHint=true, though cache population is idempotent and non-destructive so it does not rise to a true contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, verb-first, no filler. The example glob, timing estimate, and prerequisite each earn their place and are ordered by usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the prerequisite/enablement story is complete. The gap is the undocumented force/max_pages parameters, which an agent cannot disambiguate from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 3 params, so the description must compensate. It explains 'book' well (including glob syntax), but 'force' and 'max_pages' are left entirely undocumented in both schema and description, leaving two of three parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Index a book (or glob of books)') with a concrete example glob ('tcplclib_tc3_*') and names the target (the local cache). An agent immediately knows this builds a searchable index and can distinguish it from the infosys_* search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the prerequisite: 'Needed before infosys_search_symbols/search_code can see a library' and the fallback behavior ('infosys_search falls back to the web'). This names the dependent siblings and the when-to-use condition precisely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infosys_searchBRead-only
Full-text search over the indexed Infosys pages (FTS5, bm25-ranked, excerpt with [hits]). When the local index has nothing, falls back to a DuckDuckGo site: query whose results are verified against the Infosys sitemap (TwinCAT 3 only) and fetched for title/excerpt; the 'backend' field says which path answered.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| library | No | ||
| web_fallback | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and destructiveHint already covering safety, the description adds substantial non-obvious behavior: FTS5 bm25 ranking, [hits] excerpt format, DuckDuckGo fallback verified against the Infosys sitemap (TwinCAT 3 only), title/excerpt fetching, and a backend field indicating which path answered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense but front-loaded sentences with no wasted prose. The second sentence is long and packs several fallback details, but each detail is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values and annotations cover the safety profile. But with 0% parameter coverage and no sibling differentiation, key invocation details such as library filtering, web_fallback semantics, and limit behavior remain undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description documents none of the four parameters. An agent must infer the meaning of query, limit, library, and web_fallback from bare schema titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Full-text search over the indexed Infosys pages.' It also describes the fallback path. However, it does not explicitly distinguish this from siblings like infosys_search_code or infosys_search_symbols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions automatic fallback when the local index is empty, but gives no guidance on when to choose this tool over sibling search tools. It also does not explain when to use the web_fallback or library parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infosys_search_codeBRead-only
Search the code examples ( blocks) of indexed pages for a fragment — a call pattern, an attribute, a constant. language: st | xml | cpp | csharp. Returns the matching lines with context and the page URL.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the search is restricted to <pre> blocks and that results are matching lines with context and page URL — useful, but the return format is also carried by the existing output schema, so the added 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the scope front-loaded and no filler; the compact 'language: st | xml | cpp | csharp' line is efficient. Slightly dense but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a read-only tool with an output schema, the essentials (scope, language values, return shape) are present. What remains thin is routing against the many sibling infosys_* search tools and any guidance on the limit parameter, which an agent would still have to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does document the language parameter's accepted values (st | xml | cpp | csharp), which the schema leaves as an untyped string with no enum — valuable. But query and limit get no elaboration beyond what is obvious from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and a precisely scoped resource: the code examples (<pre> blocks) of indexed pages. This scope (code blocks only, not prose) meaningfully distinguishes it from siblings like infosys_search and infosys_search_symbols, though it never names those alternatives directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete target examples — a call pattern, an attribute, a constant — which implies what to use the tool for. However, it never states when to prefer this over infosys_search or infosys_search_symbols, nor any exclusions, so routing 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.
infosys_search_symbolsARead-only
Find library symbols (function blocks, functions, structs, enums, aliases, interfaces, GVLs) by name fragment in the indexed books; exact > prefix > contains. kind: FunctionBlock | Function | Program | Method | Property | Action | Enum | Struct | Union | Alias | Interface | GlobalVariable | Library. library: 'Tc2_System' or the book slug. Indexes the default libraries on first use if nothing is indexed.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| query | Yes | ||
| library | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context: the match ranking ('exact > prefix > contains') and the lazy-indexing side effect on first use. It does not mention pagination, rate limits, or auth, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then supporting detail about matching order and parameters. The long 'kind' value list is justified given the 0% schema coverage, though the definition is dense and sentence-fragment heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers purpose, match ranking, valid kinds, library targeting, and the indexing prerequisite. The gap is limited to undocumented 'limit' semantics and the absence of alternative-tool routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it largely does: it enumerates all valid 'kind' values and explains 'library' format ('Tc2_System' or the book slug), plus implies the fragment semantics of 'query'. The 'limit' parameter remains undocumented, so it falls short of full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') and resource ('library symbols'), enumerating the symbol types (function blocks, functions, structs, enums, aliases, interfaces, GVLs) and scope ('in the indexed books'). This makes it distinguishable from a general search, but it never names or contrasts the sibling 'infosys_search' explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no routing to alternatives such as infosys_search, infosys_declaration, or ads_list_symbols. The only contextual hint is the prerequisite 'Indexes the default libraries on first use if nothing is indexed', which implies but does not state a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_delete_fileCDestructive
Delete a file on the target IPC. Destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=false, and the 'Destructive-class.' sentence merely restates the destructiveHint annotation rather than adding context. It omits what actually happens on delete, whether confirm_token is required for safety, or any auth/reversibility detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with the action stated first and no filler. The second sentence is largely redundant with the annotations, but the structure is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with 0% parameter documentation and an unexplained confirm_token safety workflow, the description is far too thin. The existing output schema removes the need to describe return values, but the invocation preconditions remain undisclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, yet it mentions neither 'path' nor 'confirm_token'. The confirm_token parameter is especially opaque — its purpose and the conditions under which it must be supplied are documented nowhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (file) scoped to the target IPC, clearly distinguishing it from ipc_read_file/ipc_write_file/ipc_list_dir. It doesn't explicitly name a sibling alternative, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives, no prerequisites, and crucially no explanation of the confirm_token workflow despite a sibling tc_request_confirmation and a required path. An agent gets only 'this deletes' with no operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_eventlogADestructive
Windows event log of the target (Windows 7/10/11 IPCs): runs wevtutil on the IPC via the System Service, then reads the result file back. Not available on Windows CE / TC-BSD targets (use the XAE error list for ADS logger messages there). Destructive-class because it starts a process on the IPC.
| Name | Required | Description | Default |
|---|---|---|---|
| log | No | Application | |
| count | No | ||
| provider | No | TwinCAT System Service | |
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 goes beyond the flags by explaining WHY it is destructive ('because it starts a process on the IPC') and by disclosing the two-step implementation (wevtutil then file read-back), which is useful context the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it does, the boundary/alternative, and the destructive rationale. Information is front-loaded with the resource and platform scope, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema means return values needn't be described, and annotations cover the safety profile. However, four undocumented parameters (0% schema coverage) are a real gap, and the existence of a 'confirm_token' parameter suggests a confirmation handshake that the description never mentions, leaving the calling requirements incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the description must compensate and does not. 'log', 'count', 'provider' and especially 'confirm_token' are never explained; the incidental mention of 'System Service' does not document the provider default or any format for log names. An agent must guess how to populate these fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the target's Windows event log) and the exact mechanism (runs wevtutil via the System Service, then reads the result file back). It also scopes the applicable platforms (Windows 7/10/11 IPCs) and explicitly excludes CE/TC-BSD targets, so the agent can separate it from the file-system siblings like ipc_read_file without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear negative condition ('Not available on Windows CE / TC-BSD targets') and names the alternative for that case ('use the XAE error list for ADS logger messages there'). It does not, however, state positively when this tool should be preferred over e.g. ipc_read_file for reading log files, so the selection guidance is one-sided rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_list_dirBRead-only
List files on the target matching a Win32 pattern, e.g. 'C:\TwinCAT\3.1\Boot*'.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| max_entries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description usefully clarifies that listing happens 'on the target' (a remote machine) and that patterns are Win32-style, but it says nothing about truncation, ordering, or the max_entries cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the operation front-loaded and a concrete example appended; nothing is wasted, though it could also cover max_entries in the same space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations cover safety. However, the undocumented max_entries parameter and the absence of any usage/prerequisite context leave real gaps for a remote-filesystem tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It does clarify the required 'pattern' parameter with a concrete Win32 example, but the 'max_entries' parameter and its default of 500 are left entirely unexplained in both description and schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'List' and resource 'files on the target', plus the pattern-matching semantics. It does not name or distinguish itself from siblings like ipc_read_file or ipc_delete_file, but the operation is unmistakably a directory listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives or preconditions (e.g. an established IPC connection). Usage is only inferable from the operation name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_read_fileARead-only
Read a file from the target IPC's file system over ADS (no share needed), e.g. 'C:\TwinCAT\3.1\Boot\TcUnit_xUnit_testresults.xml' or a log. Binary → base64.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| as_text | No | ||
| encoding | No | utf-8 | |
| max_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower, and the description still adds real behavioral context: the transfer goes over ADS with no SMB share required and binary content is returned base64-encoded. It omits truncation/size behavior tied to max_bytes and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and mechanism, then a concrete example path and the binary encoding rule. Every clause carries information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and annotations cover safety, but for a 4-parameter reader with zero schema descriptions the entry omits how max_bytes affects results (truncation vs error), how encoding applies, and whether any boot/runtime state is required on the IPC.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all four parameters, so the description must carry the load and it does not: as_text, encoding, and max_bytes are never mentioned. The phrase 'Binary → base64' loosely relates to as_text but gives no mapping, defaults, or interaction rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read a file from the target IPC's file system) plus the transport mechanism (over ADS, no share needed), which separates it from project-side readers like proj_read_file and from directory listing siblings like ipc_list_dir.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the example paths (TcUnit result XML, a log) hint at when this tool is useful, but there is no explicit when-to-use, when-not-to, or named alternative (e.g. ipc_list_dir to discover paths first, proj_read_file for local project files).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_rebootCDestructive
Reboot (or shut down) the target IPC via the System Service. Destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| delay_s | No | ||
| confirm_token | No | ||
| shutdown_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 fully covered by structured data. The description's 'Destructive-class' merely repeats that annotation and adds only the minor context that the operation goes through the System Service. It does not explain what gets destroyed, whether confirm_token is required, what delay_s does, or any permissions/auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loads the action and target in the first clause. The trailing 'Destructive-class.' is redundant with the destructiveHint annotation, so that fragment does not fully earn its place, but overall it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 3-parameter tool, the description leaves major gaps: no parameter semantics for confirm_token or delay_s, no usage guidance, and no alternatives to consider. Annotations and the output schema cover safety and return values, but the description still fails to give the agent enough to invoke the tool correctly with confirmation and delay options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should carry the full burden of explaining the three parameters, but it does not. The phrase '(or shut down)' faintly hints at shutdown_only, yet delay_s and confirm_token receive no explanation at all, leaving critical semantics undocumented. This is inadequate for a destructive operation with a likely confirmation parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Reboot (or shut down) the target IPC via the System Service.' This is clear and distinguishes the operation from passive reads and TwinCAT runtime restarts by specifying the IPC target and System Service channel. However, it does not explicitly name or contrast with sibling tools like xae_restart_twincat or tc_set_mode, so the sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites, and no alternatives. 'Destructive-class' signals caution but does not help the agent decide between this and other restart or shutdown tools. Usage is only implied by the tool name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_start_processCDestructive
Start a process on the target IPC (NT_StartProcess equivalent). Destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| directory | No | ||
| command_line | No | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'Destructive-class' tag merely restates the destructiveHint=true annotation already provided, adding no new behavioral context. Critical details an agent needs before launching a process on a remote IPC — whether a confirm_token must be obtained first, what permissions are required, and what happens to the returned process handle — are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the action front-loaded and no filler. It is efficient, though the terseness borders on being a stub for a destructive multi-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive process-launch operation with four undocumented parameters and a confirmation token, the description is far too thin. The output schema covers return values, but the missing confirmation/permission model and parameter meanings leave an agent unable to invoke this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for four parameters, so the description carries the full documentation burden and delivers almost nothing. It never explains path, directory, command_line, or the all-important confirm_token, leaving the agent to guess at defaults and confirmation semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start a process on the target IPC') and adds a domain mapping ('NT_StartProcess equivalent'), so the action is unambiguous. However, it does nothing to distinguish itself from the many sibling ipc_* tools (ipc_reboot, ipc_write_file, ipc_delete_file) or to signal how it relates to the tc_* safety tooling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, and no mention of the prerequisite workflow implied by the sibling tc_request_confirmation / tc_safety_status tools. The presence of a confirm_token parameter suggests gating, but the description gives no guidance on obtaining or passing it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipc_write_fileCDestructive
Write a file on the target IPC (text or base64). Control-class.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| text | No | ||
| append | No | ||
| base64_data | No | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered structurally. The description adds essentially nothing behavioral: it does not say it overwrites existing content, does not explain the 'Control-class' designation, and does not describe the confirm_token confirmation flow implied by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments that are front-loaded with the core action. However, 'Control-class' occupies space without conveying usable meaning, so the brevity is under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, but for a destructive control-class write with 5 undocumented parameters and an unexplained confirm_token, the description leaves major gaps an agent needs before invoking it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters. The description only touches text vs base64, mapping loosely to two params, and says nothing about append, path semantics, or confirm_token. It does not compensate for the total lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (write a file on the target IPC) and notes the text vs base64 modes, which distinguishes it from siblings like ipc_read_file and ipc_delete_file. The trailing 'Control-class' label is unexplained jargon that slightly clouds an otherwise clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as ads_write, ipc_read_file, or ipc_delete_file. It hints that text or base64 can be supplied but gives no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_call_graphARead-only
Call graph from a program/FB: FB instances it invokes, functions and methods it calls,
recursively to depth (what runs when this POU runs).
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | ||
| depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the traversal is recursive and bounded by a depth limit, and it enumerates what kinds of callees appear (FB instances, functions, methods). It does not mention cost growth or truncation behavior at deep depths.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly written sentence with the resource and output front-loaded and the depth constraint and use case appended. No filler; the trailing parenthetical is slightly redundant but earns its place by signaling intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter query tool with an output schema already defining the return shape, the description covers what is computed and how deep it goes. The only material gap is the accepted format for `root` and the absence of any alternative-tool routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains the semantics of `depth` (recursion bound) well, but it never clarifies what `root` must be – a POU name, a qualified symbol path, or something else – which is the required parameter. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (a POU – program or function block) and the artifact produced (a call graph of invoked FB instances, functions and methods), which is distinct from sibling tools like proj_references or proj_interface. It does not explicitly name a sibling it is contrasted with, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'what runs when this POU runs' implies the use case (static understanding of runtime reachability), but there is no explicit when-to-use statement and no guidance on when proj_references or proj_interface would be the better choice. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_changedARead-only
Units whose source differs from a git revision (default: uncommitted work) plus untracked files — 'what did I change?'; pair with proj_vs_runtime for 'is it deployed?'.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | HEAD |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered, and the description adds value beyond them: the default baseline is uncommitted work, and untracked files are included in the result set. It does not describe result shape, but the output schema exists to carry that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core definition front-loaded and the sibling disambiguation appended. No filler, no repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with an output schema, the description covers scope, default behavior, untracked-file inclusion, and the alternative tool. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning — and it partially does by explaining that the default corresponds to uncommitted work. However, it never clarifies what forms the 'since' argument accepts (commit SHA, branch, tag), which is the one thing an agent needs to vary it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource and predicate: units whose source differs from a git revision, plus untracked files. It also names the sibling it is distinct from (proj_vs_runtime), so an agent can separate 'what did I change' from 'is it deployed' without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit selection context ('what did I change?') and routes to the alternative (proj_vs_runtime) for the deployment question. It stops short of stating when not to use it, but the intended scenario is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_get_codeBRead-only
Source of an object ('FB_Valve', 'FB_Valve.Open', 'MAIN'): declaration/implementation with file line numbers, parsed VAR declarations, sub-items.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| part | No | both | |
| with_line_numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about the content returned (parsed VAR declarations, sub-items, line numbers), but since an output schema exists, this is redundant, and it says nothing about auth requirements or limitations. Adds modest value on top of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence that front-loads the resource and packs in return-content details and name-format examples without filler. Slightly example-heavy but no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema is present, so return values needn't be described, yet the description partly does so. The main gap is usage context and parameter guidance for a 0%-coverage schema; for a simple read-only getter with annotations, it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It gives concrete examples for the required 'name' parameter ('FB_Valve', 'FB_Valve.Open') and its mention of 'declaration/implementation' and 'line numbers' loosely maps to the 'part' and 'with_line_numbers' parameters, but neither parameter is explicitly explained or its allowed values enumerated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the source (declaration/implementation) of a named object, with concrete examples like 'FB_Valve' and 'MAIN'. An agent can tell this fetches code rather than listing projects or reading raw files. It doesn't explicitly contrast with siblings like proj_read_file or proj_variables, but the verb+resource is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as proj_read_file (raw file access), proj_variables, or proj_interface. The description states what is returned but never when to reach for it or what it is not suited for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_interfaceBRead-only
Public interface of an FB/program: inputs/outputs/in-out with types and comments, methods (access, signature), properties (get/set), actions, extends/implements.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value by disclosing the exact return shape (methods, properties, actions, inheritance), but says nothing about failure modes when a name is not matched, or whether inherited members are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the resource and then lists returned categories compactly. The colon-plus-list structure is efficient, though the dense enumeration of return contents partially duplicates what the output schema already provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and annotations cover safety, leaving the definition mostly self-sufficient. The unresolved gap is the 'name' argument's expected form, which is the one thing an agent must get right to call the tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'name' parameter. The description only implies the name refers to an FB/program; it never states the expected format (bare POU name vs. namespace-qualified path) or whether it must already exist in the project. With a low-coverage schema, the description should compensate and does so only minimally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the public interface of an FB/program) and enumerates exactly what is returned: inputs/outputs/in-out with types and comments, methods with access and signature, properties with get/set, actions, extends/implements. An agent can distinguish it from proj_get_code or proj_variables. However, it never names a sibling tool explicitly, so differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no alternatives are named despite the crowded proj_* family (proj_get_code, proj_variables, proj_references, proj_call_graph). Usage is only implied by the resource being described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_lintARead-only
Static checks over one object or the whole project: unused locals, naming prefixes
(override map via prefixes), undocumented VAR_INPUT/OUTPUT, TODO markers, REAL
compared with =, VAR_INPUT assigned inside an FB, empty methods, GVL/ENUM without
qualified_only, magic numbers, FB_init/FB_exit without SUPER^. rules= subset to run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| rules | No | ||
| prefixes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses the override mechanism for naming prefixes and the ability to subset rules, which shapes how an agent configures a run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded before the rule enumeration, and the parameter notes are appended compactly. The rule list is long and uses terse code fragments (=, SUPER^, VAR_INPUT), but each item conveys a distinct check, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and read-only annotations cover the safety stance. Scope, parameters, and configurable behavior are all present; the description is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameters. It explains `prefixes` as an override map and `rules` as a subset to run, and implies `name` selects a single object versus the whole project. Only `name` is left implicit, keeping it just shy of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (static checks) and a clear resource scope (one object or the whole project), then enumerates the concrete rules run. The rule list is distinctive enough to separate it from peers like proj_validate_xml, but no sibling is named, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scoping sentence ('one object or the whole project') and 'rules= subset to run' imply how to invoke it, but there is no explicit when-to-use/when-not guidance or pointer to an alternative linter/validator tool. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_listCRead-only
List indexed objects. kind: PROGRAM | FUNCTION_BLOCK | FUNCTION | STRUCT | ENUM | UNION | ALIAS | GVL | INTERFACE | METHOD | PROPERTY | ACTION (case-insensitive).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only that kind values are case-insensitive; it says nothing about default limit behavior, pagination, or what 'indexed' implies (e.g., staleness vs. the live project). With annotations carrying the safety burden, this is a modest but real contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the primary action front-loaded and no filler. It errs toward under-specification rather than verbosity, but structurally it is tight and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a filtering/list tool with three parameters and 0% schema description coverage, leaving `pattern` and `limit` semantics undocumented is a significant completeness gap, and there is no guidance on result scope or relationship to sibling listers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partially does. It documents the value domain for `kind` (and usefully notes case-insensitivity), but `pattern` and `limit` — including the 500 default and what kind of matching `pattern` performs — are left completely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List indexed objects') and enumerates the domain of object kinds the tool operates over, which is genuinely helpful. It does not, however, distinguish itself from near-neighbors like proj_search, proj_scan, or ads_list_symbols, so an agent still has to infer which of these listing tools is correct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all — no indication of when to prefer this over proj_search, proj_scan, or proj_references, and no prerequisites or scope notes. The agent gets a definition of the tool but no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_read_fileCRead-only
Raw text of a project file (relative to project root or absolute).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the path-resolution note but says nothing about the max_chars truncation behavior, error handling for missing files, or encoding, leaving the main non-obvious behavior undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the returned content front-loaded and zero filler. It is efficient, though the extreme brevity contributes to the gaps noted in the other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described. However, for a two-parameter tool with 0% schema coverage, omitting any mention of max_chars and its truncation semantics leaves the definition materially incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It clarifies the 'path' parameter (relative to project root or absolute), which is genuine added value, but the 'max_chars' parameter is completely absent from the description, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (project file) and the returned form (raw text), and the parenthetical scoping 'relative to project root or absolute' tells the agent this differs from parsed-code siblings like proj_get_code. It is a noun phrase with no explicit verb, so the action is only implied, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives. With siblings like ipc_read_file and proj_get_code in the same space, the agent is left to infer why it would pick this tool over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_referencesCRead-only
Where a type/object is instantiated (variables of that type) and mentioned.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| max_hits | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered elsewhere. The description adds nothing beyond that: no mention of search scope (whole project? single POU?), how results are bounded, or whether the lookup is exact or approximate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short fragment with no waste, so it is concise. But the terseness comes at the cost of under-specification rather than economy, and there is no structural front-loading of scope or constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Still, for a code-intelligence lookup with 0% parameter coverage and no scope or usage guidance, the definition is too thin for an agent to invoke it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does not. Neither 'name' (fully-qualified symbol? simple identifier?) nor 'max_hits' (default 200, truncation behavior) is explained anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description does convey the concept of finding usages of a type/object ('where ... is instantiated ... and mentioned'), which is a find-references operation. However, it is a noun-phrase fragment with no verb and no differentiation from siblings like proj_search, proj_resolve_symbol, proj_variables, or proj_call_graph, so an agent cannot readily tell which lookup tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any prerequisites (e.g., whether the project must be loaded/scanned first). Usage is only weakly implied by the fragment itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_resolve_symbolBRead-only
Map an ADS symbol path (MAIN.fbFill.fbValve.bOpen) to the file:line where each hop is declared, following variable types through FB/STRUCT definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds useful behavioral context by noting that it follows variable types through FB/STRUCT definitions, but it does not disclose limitations, error behavior, or performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core mapping action and includes the type-following behavior without unnecessary words. Every part of the sentence contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety, the description supplies enough to call the tool correctly: the input format is exampled and the resolution behavior is described. It lacks usage guidance, but the core invocation requirements are complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single symbol parameter. It provides an example format (MAIN.fbFill.fbValve.bOpen) and clarifies that the input is an ADS symbol path, which is helpful, but it does not define full syntax rules or edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it maps an ADS symbol path to file:line declaration locations and follows variable types through FB/STRUCT definitions. This clearly differentiates it from simple symbol lookup siblings, but it does not explicitly name an alternative tool or explain when this is preferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no when-to-use guidance, no prerequisites, and no alternatives among the many sibling tools such as ads_symbol_info, proj_variables, or infosys_declaration. The agent must infer usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_scanBRead-only
Index the project tree (.sln/.tsproj/.plcproj/.TcPOU/.TcDUT/.TcGVL/.TcIO). incremental=true re-indexes only files whose mtime changed (fast after XAE saves).
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | ||
| incremental | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: incremental mode re-indexes only files whose mtime changed. It does not disclose re-index cost, whether the index persists across calls, or whether a full scan is needed on first use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and followed by the incremental-mode detail. Nothing is padded, though the parenthetical file-type list is dense and the second sentence could be clearer about what triggers the mtime check.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be explained. However, for a tool with an unexplained optional root parameter and many proj_* siblings, the description omits whether scanning is a prerequisite step and how it relates to proj_list/proj_search, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It does explain incremental well ('re-indexes only files whose mtime changed'), but the root parameter is never mentioned, and its null default leaves it unclear whether null means the currently open solution or the working directory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Index the project tree') and enumerates the artifact types it covers (.sln/.tsproj/.plcproj/.TcPOU/.TcDUT/.TcGVL/.TcIO), so the agent knows exactly what is being parsed. It does not however distinguish itself from siblings like proj_list, proj_search, or proj_changed, leaving the agent to infer the relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that incremental=true is 'fast after XAE saves' implies when the incremental mode is appropriate, which is useful situational guidance. There is no explicit statement of when to run proj_scan versus proj_search/proj_get_code, nor whether a scan is a prerequisite for those tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_searchCRead-only
Regex search over all declarations/implementations → unit, file, line, text.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| regex | Yes | ||
| max_hits | No | ||
| ignore_case | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the search scope ('all declarations/implementations'), which is useful, but says nothing about result limits, paging, or cost despite max_hits existing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding and the return shape appended via the arrow. It is efficient, though its extreme terseness contributes to the missing parameter guidance rather than offsetting it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose, and annotations cover safety. However, for a search tool with 4 undocumented parameters at 0% coverage, the description leaves invocation-relevant details (especially 'kinds' semantics and result limits) to guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate but does not. Only the implicit 'regex' parameter is hinted at; kinds, max_hits, and ignore_case are left entirely unexplained, including how 'kinds' narrows results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (regex search over declarations/implementations) plus the result shape (unit, file, line, text). An agent can tell it apart from proj_get_code or proj_references, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives (proj_scan, proj_get_code, infosys_search_code), and no preconditions. The agent must infer everything from the one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_set_codeAIdempotent
Write declaration/implementation back into the .TcPOU/.TcDUT/.TcGVL file (keeps the rest of the XML byte-identical, writes a .bak, drops the object's stale ). Use when XAE is closed or for batch edits; otherwise prefer xae_pou_set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| declaration | No | ||
| strip_lineids | No | ||
| implementation | No | ||
| regenerate_lineids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (non-readonly, idempotent, non-destructive). The description adds real behavioral detail beyond them: the rest of the XML is kept byte-identical, a .bak backup is written, and the object's stale <LineIds> are dropped. These are non-obvious side effects an agent needs to know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly-packed sentences with the action front-loaded, side effects in parentheticals, and the routing rule last. Zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and annotations cover the safety profile. The description supplies the file-handling and backup behavior, but leaves the regenerate_lineids/strip_lineids relationship and failure modes unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter burden. It effectively explains strip_lineids via 'drops the object's stale <LineIds>' and implies declaration/implementation/name, but regenerate_lineids and the interaction with strip_lineids are never addressed, leaving a documented 5-param tool only partially covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Write declaration/implementation back into the .TcPOU/.TcDUT/.TcGVL file', naming the exact file types affected. It explicitly distinguishes itself from the sibling it is not (xae_pou_set), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when XAE is closed or for batch edits; otherwise prefer xae_pou_set' gives both the when-to-use condition and the named alternative with its own selecting condition. Explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_validate_xmlAIdempotent
Structural validation of .TcPOU/.TcDUT/.TcGVL files: XML well-formedness, Name/Id, GUID format + project-wide uniqueness, Declaration/Implementation presence, property accessor VAR blocks, LineIds vs implementation line counts, EOF newline. fix=true applies safe fixes (.bak written); regenerate_lineids rebuilds LineIds blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | ||
| name | No | ||
| regenerate_lineids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation (readOnlyHint=false), non-destructive behavior (destructiveHint=false), and idempotency (idempotentHint=true). The description adds concrete mutation context: fix=true applies safe fixes with .bak written, and regenerate_lineids rebuilds LineIds blocks. It could state whether regenerate_lineids also writes backups, but it adds meaningful detail beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence enumerates the validation checks, followed by a second sentence covering the two mutation flags. The purpose is front-loaded and no word appears wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-check validation tool with an output schema and annotations, the description covers validation scope and primary flags adequately. It leaves unclear how name selects files and whether regenerate_lineids creates backups, but those gaps are minor given structured fields cover return values and safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains fix=true and regenerate_lineids behavior well, but the name parameter is never mentioned, leaving one of three parameters unexplained. Partial compensation for low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (structural validation) and resource (.TcPOU/.TcDUT/.TcGVL files), then enumerates the exact checks (XML well-formedness, GUID uniqueness, LineIds, EOF newline, etc.). This is specific enough to distinguish it from code-oriented siblings like proj_lint or proj_scan, even though it does not name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or named alternatives are provided; it only describes capabilities. An agent must infer that this is the tool for structural XML checks on those file types, with nothing telling it whether to prefer proj_lint or when validation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proj_variablesARead-only
Every variable the project source declares, flattened to runtime instance paths by walking programs and GVLs through FB/STRUCT definitions (MAIN.fbFill.fbValve.bOpen …). scope = one program/GVL/FB to walk instead of all. Library-typed variables stay as one item with their type.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| max_array | No | ||
| max_items | No | ||
| include_temp | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a safe read (readOnlyHint=true, destructiveHint=false), and the description adds genuinely non-obvious behavior: the recursive FB/STRUCT flattening, the resulting instance-path format, and that library-typed variables are collapsed to a single typed item. It omits any mention of the truncation implied by max_array/max_items, but the added behavioral detail is real value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, the parenthetical example is compact and clarifying, and the scope/library notes follow logically. No filler sentences, though the walk mechanics could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the core operation is well described. But for a 4-parameter enumeration tool with three undocumented controls governing output size and scope of inclusion, the definition is only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all four parameters. It explains scope adequately, but says nothing about max_array (default 64), max_items (default 200000), or include_temp, whose meanings and truncation effects the agent cannot infer from bare integers/booleans.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it enumerates 'every variable the project source declares' and describes the exact transformation (flattening to runtime instance paths by walking programs and GVLs through FB/STRUCT definitions), with a concrete example path. This is unmistakably distinct from siblings like proj_interface or proj_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'scope = one program/GVL/FB to walk instead of all' clause tells the agent how to narrow the operation, which is implicit usage guidance. However, it never names a sibling alternative or states when to prefer this tool over e.g. proj_interface or ads_list_symbols, leaving the 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.
proj_vs_runtimeARead-only
Cross-check the source against the running PLC: variables declared in the project but not present online (not compiled / not activated / optimised away) and online variables under the same programs/GVLs that the source does not declare (stale boot project, library internals). Use after a deploy to prove the target runs this source.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| max_items | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds substantive context beyond annotations by explaining the exact mismatch classes it reports and their likely causes (not compiled, not activated, optimised away, stale boot project, library internals).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core operation and then give the usage context. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be described, and annotations cover the safety profile. But with two parameters and 0% schema coverage, the description omits any parameter guidance, leaving an invocation gap that the agent cannot fill from the provided structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither parameter (scope, max_items) is documented in the schema. The description does not explain what scope filters, how it interacts with programs/GVLs, or what max_items controls, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cross-check) and resource (source vs running PLC), and enumerates the exact mismatch categories it detects. Distinguishes itself from sibling tools like proj_variables, ads_list_symbols, and hmi_vs_runtime, which handle single-side listing or different runtime comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear usage context: 'Use after a deploy to prove the target runs this source.' However, it does not name alternative tools or state when not to use it, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_compareARead-only
Before/after comparison of two recordings: per-symbol stat deltas (count, min, max, mean, changes, edges) and pulse width/period deltas for BOOLs — timing regression after a code change.
| Name | Required | Description | Default |
|---|---|---|---|
| id_a | Yes | ||
| id_b | Yes | ||
| symbols | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds output-oriented context (stat deltas, pulse deltas) and a use case, but it omits behavioral constraints such as whether recordings must share configuration or any permission/rate-limit considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the operation, then appends output details and the use case. No filler or repetition is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values and annotations cover the safety profile, so those gaps are not severe. The remaining incompleteness is in parameter semantics and comparison prerequisites, which the description does not address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters. It does not map id_a/id_b to before/after recordings or clarify that symbols is an optional filter, leaving the parameter meaning largely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific comparison operation over two recordings and enumerates the produced deltas (per-symbol stats, pulse width/period for BOOLs). It clearly differentiates from generic recording tools by focusing on before/after timing regression, though it does not explicitly name sibling alternatives such as snap_compare or exp_compare.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear triggering context: timing regression after a code change. However, it does not state when not to use it or point to alternative comparison tools, so the routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_deleteADestructive
Stop (if running) and delete a recording and its exports from disk.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: the tool stops a running recording first, and deletion cascades to exports on disk, which an agent could not infer from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly packed sentence, front-loaded with the primary action and parenthetically noting the conditional stop. Every clause earns its place; nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the annotations cover reversibility. The remaining gap is minor: the description does not say whether deletion is recoverable or requires confirmation, which matters for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required parameter 'id' is never mentioned in the description, so the description fails to compensate for the documentation gap. However, the parameter name is self-explanatory for a single-identifier delete, so the impact is small.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — deleting a recording — and adds the important scope detail that exports on disk are removed too and the recording is stopped first. It does not distinguish itself from near-siblings like rec_stop or rec_profile_delete, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is given. An agent cannot tell from this text whether rec_stop plus manual cleanup is preferable, or when rec_delete should be chosen over rec_profile_delete. Usage context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_exportBRead-only
Export a recording to CSV: csv_wide (t_ms + one column per symbol, forward-filled) or csv_long (t_ms,symbol,value). Default path next to the JSONL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| fmt | No | csv_wide | |
| symbols | No | ||
| out_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description usefully adds that a file is written and where it lands by default ('next to the JSONL') - context the annotations do not carry. However, that file-writing side effect sits awkwardly with a readOnlyHint=true claim, and the description never says whether an existing CSV is overwritten, whether directories are created, or whether the recording is disturbed - gaps that matter for a tool that touches the filesystem.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the action and format options lead, the default output location follows. The parenthetical format definitions are dense but each word is load-bearing for an agent choosing between formats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the annotations cover the safety profile. What remains missing is material: the meaning of `id` and `symbols`, and the overwrite/overwrite-failure behavior of the output file, which are exactly the gaps a 4-parameter, 0%-coverage schema leaves open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden: it explains `fmt` values in real detail (csv_wide column-per-symbol forward-filled vs. csv_long long format) and the `out_path` default. It says nothing about `id` (which recording) or `symbols` (which subset to include), leaving two of four parameters semantically undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export a recording to CSV') and enumerates the two supported output shapes with their exact column layouts, so the agent knows precisely what artifact it produces. It never names or contrasts an alternative sibling (e.g. rec_read, rec_compare, exp_report), so differentiation is implicit through the 'recording' resource rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says when to export vs. read the recording in place (rec_read) or compare it (rec_compare), and no preconditions (recording must exist/be stopped) are stated. Format selection is described, but that is parameter choice, not tool-choice guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_latencyARead-only
Edge-to-edge latency in a recording: from each time from_symbol from_op from_value
becomes true to the next time to_symbol to_op to_value becomes true (PLC timestamps).
E.g. bOpenCmd == TRUE → rFlow > 0.5.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| to_op | Yes | ||
| from_op | Yes | ||
| to_value | Yes | ||
| max_pairs | No | ||
| to_symbol | Yes | ||
| from_value | Yes | ||
| from_symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds substantial behavioral context beyond annotations: it defines the measured interval as from the first condition becoming true to the next condition becoming true and specifies PLC timestamps. It does not describe pair limits or no-match behavior, but the core computation is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core computation and followed by a compact example. No wasted wording, and the example directly clarifies the parameter syntax.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core latency logic is clear, and the output schema means return values need not be described. However, the description omits when to use this tool versus recording siblings, does not mention `id` or `max_pairs`, and does not state prerequisites such as an existing recording. These gaps make it only adequately complete at 0% schema description coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It explains the `symbol op value` structure for six required condition parameters and gives an example for `==` and `>`. It does not explain `id` or `max_pairs`, but it compensates well for most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific computation (edge-to-edge latency between two PLC conditions) and gives a concrete example. An agent can distinguish it from raw recording tools, but the description does not explicitly differentiate it from siblings such as rec_pulses or rec_compare.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no alternatives, and no prerequisites such as requiring an active recording. Usage is only implied by 'in a recording,' leaving the agent to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_listBRead-only
Recordings of this session (live status) and recording files on disk.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description does contribute scope detail — that results span both live session recordings and files on disk — which the annotations do not express. It says nothing about ordering, pagination, or how the two categories are combined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no padding, but it is a fragment with no leading verb and its noun phrase is slightly loose ('recordings of this session' vs. recordings of the session). Brevity here tips toward under-specification rather than efficient front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be explained, and a no-arg read-only list needs little prose. Still, the description leaves an agent unsure how this list relates to rec_status, rec_scan, or rec_profile_list, which matters given the dense rec_* sibling cluster.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema cannot carry any additional meaning and the baseline of 4 applies. There is no parameter syntax for the description to clarify or compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The fragment names the resource and its two scopes (live session recordings and on-disk recording files), which is informative. But it never states a verb such as 'list' or 'enumerate', and it does nothing to distinguish itself from close siblings like rec_status, rec_profile_list, rec_scan, or rec_read, which a reader could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the many other rec_* listing/status tools, no prerequisites, and no conditions or exclusions. The reader must infer that this is the discovery step before rec_read or rec_export.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_profile_deleteCIdempotent
Delete a profile and its checklist file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states a destructive action ('Delete a profile and its checklist file') while the annotations declare destructiveHint=false, directly contradicting the declared safety profile. No other behavioral context (permissions, irreversibility, whether the profile must be stopped first) is given to offset this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficient, though the brevity is partly the cause of the missing usage and parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, but the description omits essential context for a deletion tool: profile identity semantics, interaction with checklist files, prerequisites, and reverting. Combined with the annotation conflict, it is not sufficient to call the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'name' parameter has 0% schema description coverage, so the description must compensate and does not. It never clarifies that 'name' identifies the profile, how it is matched (exact/case-sensitive), or how it relates to the checklist file being removed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Delete) and resource (a profile and its checklist file), which is clearer than the bare name. However, it does not distinguish itself from the sibling rec_delete (and from rec_profile_save/list/get/start/stop), leaving the agent to infer that this tool only operates on profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative guidance. With siblings like rec_delete and rec_profile_save/get/list present, the description should state whether this is the profile-lifecycle delete versus the recording delete, but it offers nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_profile_getBRead-only
One profile in full: every symbol with its mode and cycle, triggers, per-group cost estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful content-shape context (modes, cycles, triggers, cost estimates), but says nothing about behavior such as failure when the profile name is unknown or whether the result is live or from the last recorded run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, front-loaded with the resource. It is a verbless fragment, which is efficient but slightly less scannable than a full clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the safety profile is covered by annotations. However, with the sole parameter undocumented and no routing guidance against the profile siblings, the definition is only adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, 'name', with 0% schema description coverage, and the description never mentions it. The agent must guess whether it is the profile name from rec_profile_list, a file path, or something else.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('one profile in full') and enumerates what comes back (symbols with mode and cycle, triggers, per-group cost estimate), which separates it from rec_profile_list (collection) and rec_profile_delete (mutation). It is clear what the tool does, though the verb 'get' is only implied by the name rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer you call this when you need the full detail of a single named profile rather than a listing. No alternative is named and no prerequisite (e.g., the profile must already exist from rec_profile_save) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_profile_listCRead-only
Saved capture profiles (name, symbol count, modes, source).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds only the word 'Saved' plus output fields that the output schema already provides. It discloses no ordering, pagination, or auth behavior beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded phrase with no filler, though it is a sentence fragment rather than a complete action statement. It is appropriately sized for a simple zero-param listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return fields and annotations cover read-only safety, so the description need not explain results. However, it never states the operation or how it differs from adjacent profile tools, which is a meaningful gap for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify; per the rubric this yields a baseline of 4. The parenthetical field list refers to returned data, not inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource ('Saved capture profiles') and the returned fields, but uses a noun phrase with no verb, so it never explicitly says it lists them. An agent can infer the action from the tool name and siblings, but the description itself does not distinguish 'list' from 'get' or 'save'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. It does not mention rec_profile_get, rec_profile_save, or rec_profile_delete, leaving the agent to infer that this is the unfiltered list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_profile_saveAIdempotent
Save a named capture profile. Sources combine: explicit symbols (mode='auto' picks cycle for REAL/TIME, change for BOOL/INT/enum, poll for strings — or give cycle|change|poll), a marked checklist (path, or the name given to rec_scan), and/or {attribute 'tcmcp.record' := 'cycle'} pragmas in the source (from_attributes=true; scope limits to one program). Triggers and the default cycle are stored with the profile. rec_profile_start(name) replays it.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| name | Yes | ||
| scope | No | ||
| replace | No | ||
| symbols | No | ||
| cycle_ms | No | ||
| stop_when | No | ||
| duration_s | No | ||
| start_when | No | ||
| description | No | ||
| from_checklist | No | ||
| pre_trigger_ms | No | ||
| from_attributes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral detail about source combination, mode='auto' selection rules, and that triggers/default cycle are stored, but it omits what happens to an existing profile with the same name when replace defaults to true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and packs a lot of technical detail into one dense paragraph. It is not wasteful, though the parenthetical syntax makes it less scannable than a bulleted breakdown would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with 0% schema description coverage, the description is incomplete: several parameters and the replace/overwrite behavior are not explained. An output schema exists and annotations cover safety, but the description still leaves important invocation details to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 13 parameters, so the description must compensate. It explains mode, symbols, from_checklist, from_attributes, and scope, but leaves replace, duration_s, start_when, stop_when, pre_trigger_ms, description, and cycle_ms (beyond 'default cycle') undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Save a named capture profile.' It distinguishes itself from siblings by naming rec_profile_start for replay and rec_scan as a source for checklists, so an agent can tell what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains how source selection works and points to rec_scan for checklist names and rec_profile_start for replay. It does not explicitly state when to use this instead of directly starting a recording, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_profile_startAIdempotent
Start recording a saved profile: one recording per (mode, cycle_ms) group, all named '/@'. Triggers given here override the profile's. Returns the recording ids; rec_profile_stop(name) stops them together, rec_stats/rec_export work per id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| stop_when | No | ||
| duration_s | No | ||
| max_events | No | ||
| start_when | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, idempotent=true, destructive=false), so the description only needs to add context, and it does: one recording per (mode, cycle_ms) group, the generated naming scheme, and that inline triggers take precedence over the profile's. It omits cost/resource implications of starting N recordings, but the added behavior is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense clauses, front-loaded with the core action before the grouping rule and lifecycle routing. Every sentence carries information; the syntax is terse but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description already notes that recording ids are returned, so return-value explanation is not owed. It connects start to stop/stats/export lifecycle tools and explains grouping, leaving mainly the four optional parameters undocumented against a 0%-coverage schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description carries the entire burden and only partially delivers. 'Triggers given here override the profile's' loosely covers start_when/stop_when, and 'name' is inferable from rec_profile_stop(name), but duration_s and max_events are never explained, and no parameter is named directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Start recording a saved profile', which separates it from the generic rec_start and from rec_profile_save/list/get/delete siblings. The naming scheme '<profile>/<mode>@<cycle>' further pins down what gets created. It does not explicitly contrast itself with rec_start, so a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear downstream routing: rec_profile_stop(name) stops the whole set, while rec_stats/rec_export operate per recording id. It also notes local triggers override the profile's, which clarifies the start-vs-profile-config decision. No explicit when-not-to-use or comparison to rec_start, but the context is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_profile_stopAIdempotent
Stop every live recording started from this profile; returns per-recording status + stats.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds the scope ('every live recording from this profile') and a return hint, but does not disclose behavior when no live recordings exist or what stats are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence, front-loaded with the verb and scope, then the return hint. No wasted words, though the semicolon clause is slightly compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, an output schema covering return values, and annotations covering the safety profile, the description supplies the remaining essentials (scope, return hint). It is nearly sufficient, missing only explicit param format and failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'name' parameter, so the description carries the burden. 'From this profile' weakly implies name is a profile identifier, adding marginal meaning beyond the bare string schema, but the format/expectation is still not pinned down.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Stop') + resource ('every live recording started from this profile'), with a scope qualifier that distinguishes it from the plain rec_stop sibling. It stops short of explicitly naming the alternative tool, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'started from this profile' and 'live recording', but there is no explicit when-to-use guidance versus rec_stop or rec_profile_start, and no stated conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_pulsesBRead-only
Pulse / dwell analysis of one recorded symbol: for BOOL → pulse count, high/low widths, period, frequency, duty (fine-dosing valve pulses); for other types → state timeline with dwell times.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| symbol | Yes | ||
| max_list | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered without the description. The description adds genuine value by explaining the type-dependent output shape (pulse metrics vs. state timeline with dwell times), but says nothing about truncation, pagination, or how max_list affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The analysis scope is front-loaded in the opening clause, and the type-branched behavior is packed into one sentence with no filler. It is dense and readable, though the single long sentence could be split to make the two output modes easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analysis tool with an output schema present, the description adequately covers what is returned by symbol type. It is incomplete on inputs and preconditions — the meaning of 'id', the effect of 'max_list', and whether a recording must be active or finished are all left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the description carries the full burden and fails to meet it: it never explains what 'id' identifies, what 'symbol' must match, or what 'max_list' (default 200) truncates or controls. Only a loose hint that a single symbol is analysed is recoverable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Pulse / dwell analysis of one recorded symbol') and even branches the semantics by data type (BOOL → pulse metrics, others → state timeline with dwell times), so an agent knows exactly what it gets. It does not, however, contrast itself against nearby siblings such as rec_read, rec_stats or rec_latency, so differentiation relies on the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'of one recorded symbol' hints that a recording must exist and that a symbol must be supplied, but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent must infer the recording prerequisite and cannot tell from the text whether this supersedes or complements rec_read/rec_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_readBRead-only
Read a time window of a recording from its file. wide=true pivots to one row per event with all selected symbols forward-filled (what you want for 'what else was true when X happened'). Works on finished recordings from earlier sessions too.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| wide | No | ||
| symbols | No | ||
| t_to_ms | No | ||
| max_rows | No | ||
| t_from_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely non-inferable behavior: the wide pivot produces one row per event with selected symbols forward-filled, and it works on finished recordings from earlier sessions (persistence). It omits max_rows truncation semantics, which would have earned a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and the mode flag, with no filler. The quoted parenthetical is slightly chatty but it usefully anchors the wide mode to an intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description adequately frames the windowed read and persistence. But with 0% schema coverage across five undocumented parameters, an agent still lacks enough to call it correctly beyond the default id-only read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 6 parameters, so the description carries the full burden and only explains 'wide' (and implicitly 'symbols'). The meanings, formats, and defaults of id, t_from_ms, t_to_ms, and max_rows — notably whether times are ms offsets or absolute and what happens past max_rows — are left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a time window of a recording from its file'), which is unambiguous against siblings like rec_list, rec_export, or rec_delete. It does not explicitly name an alternative sibling, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides usage context for the wide flag ('what you want for "what else was true when X happened"') and notes it works on finished recordings from earlier sessions, which implies reading past data vs a live snapshot. However, it never says when to prefer this over rec_snapshot, rec_export, or ads_read, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_scanBRead-only
Enumerate the variables that could be recorded and what each would cost. source='runtime' walks the live symbol/datatype tables (every scalar leaf under prefix, or all programs/GVLs); source='project' walks the source declarations (works offline). pattern = fnmatch filter on the full path. Returns counts by type and by group (program.instance) with bytes/s estimates at cycle_ms, a suggested mode per leaf, and — when checklist='' — writes ~/.twincat_mcp/profiles/.checklist.csv with a 'select' column to mark (preselect = patterns already marked). Then rec_profile_save(name, from_checklist=name).
| Name | Required | Description | Default |
|---|---|---|---|
| show | No | ||
| prefix | No | ||
| source | No | runtime | |
| pattern | No | ||
| cycle_ms | No | ||
| checklist | No | ||
| max_items | No | ||
| preselect | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, but the description states that with checklist='<name>' the tool 'writes ~/.twincat_mcp/profiles/<name>.checklist.csv' — a persistent filesystem side effect. The prose is otherwise honest and detailed, but this is a direct inconsistency with the declared read-only nature, so per the contradiction rule it scores 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and it is dense with operational detail, but the middle is a run-on with stacked parentheticals and em-dashes that a reader must parse twice. Little padding, so waste is low, but structure could be cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value narration is not required, and the description still sketches the counts-by-type/group result. However, for an 8-parameter tool with 0% schema coverage, two parameters (show, max_items/truncation behavior) remain undocumented, and the read-only mismatch means an agent may mis-model side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full parameter burden and does well: it documents source, pattern (fnmatch on full path), cycle_ms (basis for bytes/s estimates), checklist (file written) and preselect (patterns already marked), plus prefix ('every scalar leaf under prefix'). It leaves 'show' and 'max_items' completely unexplained, which prevents a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Enumerate') plus a precise resource (recordable variables and their per-type cost), with the two discovery modes ('runtime' walks live symbol/datatype tables, 'project' walks source declarations) spelled out. It does not name any sibling to route away from, so an agent must infer that proj_variables/ads_leaves are the read-actual-values alternatives rather than the record-planning ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection context between the two 'source' modes, including the offline property of 'project', and chains the workflow explicitly ('checklist=... then rec_profile_save(name, from_checklist=name)'). No explicit when-not-to-use or naming of competing siblings, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_snapshotCRead-only
Most recent events of a running (or finished) recording — the live tail.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| last_n | No | ||
| symbols | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the tool works on running or finished recordings and returns a 'live tail,' which is useful context beyond annotations, but it does not cover pagination, rate limits, or output behavior (which the output schema may address).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repetition. It is efficiently sized for its content, though the extreme brevity contributes to gaps in parameter and usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one required and two optional parameters with 0% schema description coverage, and the description does not compensate for any of them. The output schema covers return values and annotations cover safety, but the description omits essential input semantics and any usage context, making the definition incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and three parameters (id, last_n, symbols) are present, yet the description mentions none of them. It adds no meaning about the required recording id, the last_n limit, or the symbols filter, leaving every parameter undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope — most recent events of a recording, described as a live tail. It clearly conveys what data the tool returns, but it does not distinguish itself from sibling tools such as rec_read, rec_list, or rec_stats, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or comparison to alternatives. The phrase 'running (or finished) recording' and 'live tail' imply a live monitoring context, but the description never says when to choose this over rec_read, rec_list, or rec_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_startAIdempotent
Start a continuous real-time recording of online PLC variables (runs in the background until rec_stop, duration_s, max_events or stop_when). Select by explicit symbols (an FB or struct instance expands to all its leaves), prefix ('MAIN.fbFill' → every leaf under it) or fnmatch pattern. mode: 'cycle' = one PLC-timestamped sample per symbol per cycle_ms (ADS notification, cycle-accurate); 'change' = PLC-timestamped sample only when the value changes (checked every cycle_ms); 'poll' = sum-read every cycle_ms from this PC. Triggers: start_when='MAIN.bStart == TRUE' with pre_trigger_ms keeps the events before the trigger (scope-style); stop_when='MAIN.fbFill.bDone == TRUE'. Events stream to a JSONL file.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | change | |
| name | No | ||
| prefix | No | ||
| pattern | No | ||
| symbols | No | ||
| cycle_ms | No | ||
| stop_when | No | ||
| duration_s | No | ||
| max_events | No | ||
| start_when | No | ||
| max_symbols | No | ||
| pre_trigger_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly=false, destructive=false, and idempotent=true; the description adds substantial behavioral context beyond that. It discloses that recording runs in the background and stops on rec_stop, duration_s, max_events, or stop_when, explains cycle/change/poll mode semantics, describes pre-trigger buffering, and notes that events stream to a JSONL file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the purpose and then covers selection, modes, and triggers without obvious filler. It is information-rich and every sentence contributes, though the lack of formatting makes it slightly harder to scan than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, multiple operating modes, trigger logic, and an output schema that handles return values, the description covers the core invocation details well. Minor gaps remain around name and max_symbols, and it does not compare this tool to related recording alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the parameter burden, and it largely does: mode values and meanings, symbol selection via symbols/prefix/pattern with leaf-expansion semantics, cycle_ms behavior, start_when and stop_when examples, and pre_trigger_ms scope-style behavior. It leaves name and max_symbols unexplained, so it falls short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Start a continuous real-time recording of online PLC variables', and it names rec_stop as the lifecycle end. It does not, however, distinguish itself from siblings such as rec_profile_start or ads_watch, leaving some ambiguity about when this is the right start tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to select symbols (explicit list, prefix expansion, fnmatch pattern), the three modes, and trigger syntax, which implies usage. It provides no explicit when-to-use or when-not-to-use guidance relative to alternatives like rec_profile_start, rec_scan, or ads_watch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_statsARead-only
Per-symbol statistics over the whole recording so far: count, first/last, min/max/mean, change count, BOOL rising/falling edges with timestamps, and value runs (state timeline with dwell times) — computed incrementally, no re-read of the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| symbols | No | ||
| max_runs | No | ||
| include_runs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/destructiveHint already supplied by annotations, the description adds real behavioral context: statistics are 'computed incrementally, no re-read of the file,' and scope is 'the whole recording so far.' This tells the agent about update semantics and cost that the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded sentence that opens with the core concept ('Per-symbol statistics over the whole recording so far') and enumerates outputs efficiently. The em-dash appositive makes it long but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be detailed, and the read-only annotations cover the safety profile. The description explains the analytical content well; the main gap is that four undocumented parameters get no explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters (id, symbols, max_runs, include_runs). The description implies 'per-symbol' selection and 'value runs' (loosely mapping to include_runs/max_runs) but never explains id, the symbols selector, or the max_runs=200 cap, leaving most parameter meaning undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb+resource: computing per-symbol statistics (count, min/max/mean, edges, runs) over the whole recording. This clearly distinguishes it from raw-read siblings like rec_read/rec_snapshot, but it never names an alternative explicitly, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use/when-not guidance or mention of alternatives such as rec_read or rec_pulses. Usage is only implied by the fact that it reports analytical aggregates rather than raw samples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_statusBRead-only
Live status of one recording: events, rate, drops, armed/triggered, last value per symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful context that this is a *live* (current, non-historical) status view and lists the observable fields, but says nothing about scoping, auth, or latency of the live read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource is named first and the payload follows. Every token earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not the description's burden, and the annotations carry the read-safety profile. For a one-param read tool this is nearly sufficient, with only the id's semantics and sibling routing left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is uncovered (0% schema description coverage), so the description must compensate. It does so only implicitly by saying 'one recording', implying id is a recording identifier, but gives no format or source for that id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (status) and resource (one recording) and enumerates the returned signals: events, rate, drops, armed/triggered, last value per symbol. This cleanly separates it from list/aggregate siblings like rec_list and rec_stats, though the distinction from rec_snapshot or rec_stats is not spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for rec_status over rec_stats, rec_snapshot, or rec_read. 'Live' hints at real-time polling but nothing states the condition that selects this tool versus its many rec_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rec_stopBIdempotent
Stop a recording, release the ADS notifications, finalize the file; returns status + stats.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is non-read-only, idempotent, and non-destructive. The description adds meaningful side effects beyond that: releasing ADS notifications and finalizing the file, plus noting that status and stats are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the primary action and semicolon-separated details. Every clause adds relevant information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) and has an output schema to cover return values, so the description does not need to explain them. Annotations cover safety and idempotence. The main gap is the unexplained 'id' parameter, but otherwise the description is complete for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter 'id'. The description never explains what the id refers to or how to obtain it, so it fails to compensate for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Stop') and resource ('a recording'), plus additional effects (release ADS notifications, finalize file). It does not explicitly differentiate from sibling tools such as rec_profile_stop, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, prerequisites, or alternatives to consider. The context implies use on an active recording, but nothing is stated about when not to use it or how it relates to rec_start or rec_profile_stop.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snap_applyADestructive
Write a saved snapshot back to the PLC (recipe / parameter restore). dry_run lists the differences only. Every differing symbol is gated like ads_write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| dry_run | No | ||
| symbols | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a destructive, non-read-only write. The description adds useful context: dry_run lists differences only, and every differing symbol is gated like ads_write. It does not expand on what that gating entails, but it meaningfully supplements 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler, front-loading the action and resource before the dry_run and gating notes. Every sentence adds distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, preview behavior, and per-symbol safety gating, and an output schema exists for return values. However, with no schema parameter descriptions, the omission of the symbols parameter leaves a substantial gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies dry_run ('lists the differences only') and implies that 'name' is the target snapshot, but it never mentions the symbols parameter or its scope-limiting role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Write') and resource ('saved snapshot back to the PLC'), with the clarifying use case 'recipe / parameter restore'. It clearly distinguishes this from saving or comparing snapshots, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The restoration use case is implied by '(recipe / parameter restore)' and dry_run is presented as the difference-listing mode. However, there is no explicit guidance on when to prefer this over snap_compare or ads_write, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snap_compareBRead-only
Diff snapshot a against b (another snapshot or 'live'), numeric tolerance applies.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | ||
| b | No | live | |
| symbols | No | ||
| tolerance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description is consistent with a read-only comparison. It adds useful context that 'b' may be 'live' (comparing against running values) and that a numeric tolerance applies, but says nothing about how the diff is reported or whether tolerance affects matching vs. output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence, front-loaded with the core action and immediately naming the alternative operand values. No wasted words, though the parenthetical slightly crowds the tolerance clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile. However, for a 4-parameter tool with 0% schema description coverage, the undefined 'symbols' parameter and the unspecified tolerance semantics/default leave the agent short of full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It explains 'a' and 'b' (including the 'live' sentinel) and mentions tolerance as numeric, but the 'symbols' filter parameter is entirely undocumented in both schema and description, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Diff') and resource (snapshot), and clarifies the second operand can be another snapshot or 'live'. It is clear without needing the schema, though it does not explicitly distinguish itself from sibling comparison tools like rec_compare or exp_compare.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus rec_compare/exp_compare, no prerequisites (does snapshot 'a' need to exist? is 'live' a running PLC?), and no exclusions. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snap_listCRead-only
Saved snapshots.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered and the bar is lower. The description still adds nothing: no scope of the listing (all snapshots, per-project, per-session), no ordering, and no mention that it is a non-mutating enumeration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words are not concision here but under-specification; nothing meaningful is front-loaded because nothing meaningful is said. A single sentence stating it lists saved snapshots and their scope would cost little and add much.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. Even so, an agent cannot tell from this fragment what set of snapshots is returned, which is essential for using snap_list correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter semantics for the description to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Saved snapshots." is a bare noun phrase that restates the resource in the tool name rather than stating a verb. It never says the tool lists or enumerates snapshots, and it does not distinguish snap_list from snap_save, snap_compare, or snap_apply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, no mention of when to prefer snap_compare or snap_apply instead. The agent is left to infer everything 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.
snap_saveBIdempotent
Save a named snapshot of live values (expanded like rec_start) for regression comparison — parameters, recipes, whole FB instances before/after a change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| prefix | No | ||
| pattern | No | ||
| symbols | No | ||
| max_symbols | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutating-but-non-destructive, idempotent profile, so the bar is lower. The description usefully adds that values are 'expanded like rec_start' and scoped to parameters/recipes/FB instances, but omits what happens on a name collision, where snapshots are persisted, and any size limits implied by max_symbols.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the verb and the regression-comparison rationale front-loaded; little waste, though the parenthetical 'expanded like rec_start' assumes sibling knowledge.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and annotations cover the safety profile. However, with 5 undocumented parameters and no collision/persistence semantics, the definition leaves meaningful gaps for a tool that creates stored state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description carries the full burden — yet it never mentions name, prefix, pattern, symbols, or max_symbols. The phrases 'parameters, recipes, whole FB instances' gesture at selectable scope but give no mapping to the selector parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Save a named snapshot of live values') with the purpose (regression comparison) and the scope of captured data. It does not explicitly name its siblings snap_compare/snap_list/snap_apply, so an agent must infer the routing rather than read it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'for regression comparison ... before/after a change' phrase implies when it is used, but there is no explicit when-not guidance and no named alternative (e.g. snap_compare for the comparison step, rec_snapshot for the recording equivalent).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_audit_tailBRead-only
Last n audit records (mutating calls, confirmations, mode changes).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine value by naming the record categories included (mutating calls, confirmations, mode changes), but says nothing about ordering, time window, or how many records actually exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single brief sentence with no filler, and the scope ('last n') is front-loaded ahead of the clarifying parenthetical. Nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations carry the safety profile. For a one-parameter read tool this is close to complete, with only ordering and record-availability behavior left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema only exposes 'n' as an untitled integer with default 50. The description partially compensates by tying 'n' to the number of audit records returned, but adds no bounds, units, or behavior when n exceeds available records.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource (audit records) and its scope ('last n'), and enumerates the record kinds it returns (mutating calls, confirmations, mode changes). That makes the tool's output distinguishable from siblings like tc_safety_status or tcunit_results, though the verb is implicit ('Last n audit records') rather than a clean action phrase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, nor any prerequisites or exclusions. An agent must infer from the name and the parenthetical that this is for inspecting recent audit/safety-related activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_doctorARead-only
Environment check: platform, pyads/router, local AMS NetId, XAE ProgIDs in the registry, running XAE shells, project root, safety mode. Run this first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine context the annotations don't: it enumerates the environment surfaces probed (registry ProgIDs, running XAE shells, safety mode), which tells the agent this is a read-only reconnaissance step with no side effects on the target.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact statements, front-loaded with the purpose and ending on the imperative call to action. The enumerated check list is dense but every item earns its place by describing coverage. Slightly list-heavy but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and with zero parameters there are no input concerns. It states both what is checked and when to run it, leaving little an agent needs for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly implies a parameterless, fire-and-forget invocation with nothing to configure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ("Environment check") and enumerates the specific things inspected: platform, pyads/router, AMS NetId, registry ProgIDs, running XAE shells, project root, and safety mode. The enumerated scope implicitly distinguishes it from narrower siblings like ads_status or xae_status, but it never names or contrasts those siblings explicitly, keeping 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Run this first" is an explicit, actionable usage directive that tells the agent when to reach for this tool relative to the rest of the suite. It does not name a specific alternative or a when-not-to-use condition, so it stops short of the 5 level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_request_confirmationARead-only
Issue a single-use confirm_token for a control/destructive tool. Use the exact action name of the tool (e.g. 'xae_activate_configuration') and its target.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| target | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond them: the token is 'single-use' and must be tied to an exact action name, which tells the agent this is a minting/authorization step rather than a state-changing operation. It omits token lifetime and where the token must subsequently be supplied, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the invocation detail second. Every clause earns its place; nothing is padded or repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the token's key trait (single-use). What is missing is the workflow link – how the issued token is consumed by the subsequent control/destructive call – which matters for a confirmation-gate tool, though it is a modest gap for a 2-parameter minting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains 'action' well (the exact tool name, with a concrete example) but leaves 'target' as a bare restatement of the field name, giving no format or per-action semantics despite the empty-string default. Half the parameters are meaningfully documented, half are not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Issue a single-use confirm_token') plus the scope ('for a control/destructive tool'), which no sibling tool does. An agent can distinguish it from tc_set_mode or tc_safety_status immediately, and the name matches the stated purpose exactly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the when ('for a control/destructive tool') and gives the how ('use the exact action name ... and its target'), which is enough to route an agent here before a destructive call. It stops short of explicitly stating the precondition (e.g. only when the safety mode demands confirmation) or naming any alternative, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_safety_statusARead-only
Current safety mode, ceiling, allow/deny lists, pending confirmation tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only operation (readOnlyHint=true, destructiveHint=false). The description adds what information is available (mode, ceiling, lists, pending tokens), but since an output schema exists and no deeper behavioral traits (e.g., auth, rate limits) are disclosed, it adds only moderate value beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence fragment that front-loads the key subject (Current safety mode) and lists the remaining relevant fields without any filler. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument status tool with an output schema and read-only annotations, the description is nearly sufficient: it tells the agent what data will be returned and implies a safe read. It falls short only in not providing usage context or routing guidance relative to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document. The baseline score for a parameterless tool is 4, as the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource and the specific fields returned (safety mode, ceiling, allow/deny lists, pending confirmation tokens). However, it does not explicitly differentiate itself from siblings like tc_set_mode or tc_audit_tail, so an agent lacks sibling routing context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no conditions for calling, and no mention of alternatives. It merely lists the data exposed by the tool, leaving all usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_session_reportARead-only
Markdown handover of this session: mode changes, writes, deploys and other mutating calls from the audit log, recordings, snapshots and dumps produced. Written to ~/.twincat_mcp/reports/.md (or out_path).
| Name | Required | Description | Default |
|---|---|---|---|
| out_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnlyHint/destructiveHint annotations by disclosing the data sources that feed the report and, importantly, the side effect and destination of the operation (~/.twincat_mcp/reports/<ts>.md, overridable via out_path). The only tension is that it creates a file while readOnlyHint=true, but the write is a report artifact rather than a mutation of the controlled TwinCAT system, and the description discloses it plainly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the deliverable front-loaded and the output location second. The middle clause ('mode changes, writes, deploys and other mutating calls from the audit log, recordings, snapshots and dumps produced') is a dense noun pile that takes a re-read to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-shape explanation is not required, and the annotations already declare the safety profile. The description covers what is produced, what it summarizes, and where it is written, which is enough for a one-optional-parameter reporting tool; only the precise accepted form of out_path is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter out_path is undocumented in the schema, so the description carries the burden. '(or out_path)' tells the agent the parameter overrides the default timestamped path, which is the meaningful semantic the schema lacks; a truly detailed description would name the accepted path form (absolute vs relative).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and artifact (produces a Markdown handover report of this session) and enumerates the content it aggregates: mode changes, writes, deploys, other mutating calls, recordings, snapshots and dumps. It is clearly a report generator, distinguishable from tc_audit_tail (raw tail) or exp_report (experiment results), 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'handover of this session' implies the use case (end-of-session summarization), but there is no explicit when-to-use statement, no prerequisite, and no pointer to alternatives such as tc_audit_tail or tc_doctor for related diagnostic views. Usage 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.
tc_set_modeAIdempotent
Switch safety mode: readonly | guarded | full. Escalation is capped at the configured max_mode (TCMCP_MAX_MODE); lowering is always allowed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation/idempotency profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower, and the description still adds real context: which transitions are capped and that downgrades always succeed. It does not state who is authorized to escalate or what the max_mode default is, but the added policy context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the accepted values are front-loaded ahead of the escalation constraint. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the parameter domain plus the enforcement rule. What remains thin is authorization/identity context for a safety-mode mutation, but overall it is sufficient to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter 'mode' has no enum or description, so the string 'readonly | guarded | full' in the description is the only source of accepted values. The description fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Switch safety mode') and enumerates the exact modes accepted, which distinguishes it from the read-only sibling tc_safety_status. An agent can identify the tool's job without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies an operational rule (escalation capped by TCMCP_MAX_MODE, lowering always allowed) but never says when to prefer this tool over related siblings such as tc_safety_status for inspection or tc_request_confirmation for gated changes. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tcunit_resultsBRead-only
Parse a TcUnit xUnit result into a pass/fail summary. Source: the file on the target over ADS (default: configured remote path), a local file, or raw XML text.
| Name | Required | Description | Default |
|---|---|---|---|
| xml_text | No | ||
| local_path | No | ||
| remote_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered and the bar is lower. The description usefully adds that a remote source is read 'over ADS' and that remote_path is the default, but it omits precedence rules when multiple sources are supplied and any ADS-connection prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the source enumeration second; no filler. The source list is compressed into a single clause, which is efficient though slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and annotations cover the safety profile. However, for a 3-parameter tool with 0% schema coverage and no required params, the definition does not resolve what happens if no source is given or how competing sources are prioritized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It maps all three parameters to their sources (raw XML text, local file, file on target over ADS) and identifies remote_path as the default, but leaves precedence and mutual exclusivity between xml_text/local_path/remote_path unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Parse') plus resource ('TcUnit xUnit result') and the concrete output ('pass/fail summary'), which is more precise than the bare name. It does not explicitly differentiate itself from the sibling tcunit_run (which presumably executes tests) or tcunit_scaffold, so an agent must infer the read/parse vs run distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells you what inputs are acceptable and that the remote path is the default, which implicitly frames when to use it (after a run, when you already have a result artifact). It gives no explicit when-to-use versus tcunit_run or guidance for choosing among the three sources, 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.
tcunit_runADestructive
Full TcUnit cycle: build → boot project autostart+generate → activate → restart → delete old result → wait for the xUnit file on the target → parse. Destructive-class (it activates a configuration on the target). plc_project_path from xae_plc_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_s | No | ||
| disable_io | No | ||
| skip_build | No | ||
| confirm_token | No | ||
| plc_project_path | Yes | ||
| remote_result_path | No | ||
| allow_target_mismatch | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds real context by spelling out the multi-stage side effects (activation of a configuration, autostart generation, restart, result deletion) and labeling it destructive-class. It leaves the meaning of the confirm_token / allow_target_mismatch gating unexplained, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences plus a trailing note; the destructive nature and the origin of the required parameter are front-loaded. It is economical for a complex operation, though the arrow-chain is terse enough that a reader may need a beat to parse it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. However, the 0%-coverage parameters and the missing when-to-use steering leave gaps for a mutation tool with seven inputs and a confirmation flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description carries the full burden, yet it only clarifies the origin of plc_project_path. It says nothing about timeout_s, disable_io, skip_build, confirm_token, remote_result_path, or allow_target_mismatch, leaving over half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Full TcUnit cycle') and enumerates the actual pipeline (build → boot project autostart+generate → activate → restart → delete old result → wait for xUnit file → parse), which lets an agent distinguish it from tcunit_results and tcunit_scaffold without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the trigger context ('Full TcUnit cycle') and tells the agent where the required parameter comes from ('plc_project_path from xae_plc_projects'), but gives no explicit when-to-use guidance or any exclusion against the sibling tcunit_results / tcunit_scaffold tools. 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.
tcunit_scaffoldAIdempotent
Generate _Tests.TcPOU (TcUnit.FB_TestSuite) with Test_InitialState and one test method per public method, arranged from the FB interface, and register it in the .plcproj. Assertions are left as TODO stubs.
| Name | Required | Description | Default |
|---|---|---|---|
| fb_name | Yes | ||
| out_dir | No | ||
| overwrite | No | ||
| add_to_plcproj | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring non-readOnly, idempotent, non-destructive, the description still adds valuable behavior: it writes to the .plcproj, and critically, that assertions are left as TODO stubs (so the result is incomplete until filled in). These are real side effects the agent needs. It doesn't explain overwrite or out_dir semantics, keeping it short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the verb and artifact and trailing into the meaningful detail about TODO stubs. No filler, though the run-on structure packs several distinct facts into one clause chain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description covers the artifact, its layout, .plcproj registration, and the stub caveat. The remaining gap is the undocumented out_dir and overwrite parameters, which most agents would want clarified before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all four parameters, yet it only hints at fb_name (FB interface) and add_to_plcproj (register in the .plcproj). The out_dir and overwrite parameters receive no explanation anywhere, leaving half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Generate) plus an exact artifact (<FB>_Tests.TcPOU of type TcUnit.FB_TestSuite) and enumerates its contents (Test_InitialState, one method per public method). It is clearly distinct from siblings like tcunit_run, which executes rather than scaffolds tests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The generation context is implied — you call this to create a test suite skeleton — but there is no explicit when-to-use, no stated precondition (e.g. an existing FB interface), and no reference to alternatives such as tcunit_run or exp_' tooling. 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.
test_expectARead-only
Assert conditions on live values. checks: [{symbol, op, value, tolerance?}], op ∈ == != > >= < <= ~= (relative/abs tolerance) in between. within_ms>0 waits until all hold. Returns pass/fail per check with the time each one was met.
| Name | Required | Description | Default |
|---|---|---|---|
| checks | Yes | ||
| within_ms | No | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds substantial behavioral detail beyond the annotations: supported operators, relative/absolute tolerance, 'in between', the waiting behavior when within_ms>0, and the per-check pass/fail return with timestamps. It does not pause to describe rate limits or symbol resolution, but the added context is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded: purpose first, then check syntax, operator semantics, waiting behavior, and return shape. Every sentence adds necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered structurally, but the description still adds helpful return detail. Gaps remain: interval_ms is unexplained, the source/nature of 'live values' and symbol resolution is vague, and there is no guidance on sibling alternatives. Given the sparse schema, these omissions leave the definition only adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does a good job for 'checks' by explaining the object fields and the op enum, and it clarifies 'within_ms' waiting behavior. However, it completely omits 'interval_ms', leaving one of three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Assert conditions on live values.' It clearly conveys the core operation and even details the check structure. However, it does not explicitly distinguish this tool from sibling assertion or wait tools like test_stable, test_response, or ads_wait_until.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. The note about within_ms>0 waiting is a behavioral parameter detail, not a usage recommendation or exclusion. The agent must infer the intended context solely from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_responseADestructive
Write a stimulus ({symbol: value}) and measure the PLC-timestamped latency until
response ('MAIN.fbValve.bOpen == TRUE') holds — how fast does the FB react? Writes are
gated per symbol; originals are restored afterwards unless restore=false.
| Name | Required | Description | Default |
|---|---|---|---|
| restore | No | ||
| response | Yes | ||
| stimulus | Yes | ||
| timeout_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=true; the description adds genuinely useful context beyond that: writes are gated per symbol, and originals are restored afterwards unless restore=false. It does not explain timeout behavior or failure modes, and there is mild tension between destructiveHint=true and the default restore=true, but the added disclosure is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then results, then side effects, in a compact form with an inline example. Slightly dense with parentheticals and a dotted symbol path, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. Given four params with a nested stimulus object, the description covers the critical stimulus/restore semantics but is silent on timeout_ms, a minor gap for a mutation tool that otherwise explains its side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It clarifies stimulus format ({symbol: value}) and the meaning of restore=false, but leaves response and timeout_ms (default 5000) unexplained, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: writes a stimulus mapping and measures PLC-timestamped latency until a response condition holds, illustrated with a concrete expression ('MAIN.fbValve.bOpen == TRUE'). Clear purpose, but it never names or contrasts with siblings test_expect/test_stable/test_scenario, so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description — this is for measuring how fast an FB reacts to an injected stimulus — but there is no explicit when-to-use, when-not-to-use, or pointer to the alternative test_* tools for assertions or stability checks. Guidance exists only by inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_scenarioADestructive
Scripted FB test against the live PLC with a recording in parallel. spec = {name, record:{symbols|prefix|pattern, mode, cycle_ms}, steps:[{at_ms?, write:{sym:val}} | {expect:[checks], within_ms} | {wait_ms} | {wait_until:{symbol,op,value,timeout_ms}} | {stable:{symbol,duration_ms,tolerance}}], final_expect:[checks], timeout_ms, restore, stop_on_fail}. Every written symbol is gated before the run starts; written values are restored at the end. Returns per-step results, overall pass, and the recording id.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the destructiveHint annotation: every written symbol is gated before the run starts, values are restored at the end, and stop_on_fail governs abort behavior. It also states the return shape. It stops short of naming permission/auth requirements or any rate/scope limits on the live PLC, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then dense but waste-free spec grammar; every clause describes a field, a step type, or a side effect. The brief return summary is mildly redundant given the output schema exists, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested-argument tool with an output schema, the description covers the spec structure, gating/restore semantics, and result shape well enough to call it correctly. It leaves selection relative to sibling test_* and exp_* tools unaddressed, which is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema exposes only an open-ended 'spec' object at 0% description coverage, so the description carries the full burden — and does: it lays out the spec grammar (name, record{symbols|prefix|pattern, mode, cycle_ms}, the full step union, final_expect, timeout_ms, restore, stop_on_fail). This is exhaustive compensation for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource: a scripted FB test executed against the live PLC with a parallel recording. The scope is concrete enough to distinguish it from single-shot helpers like test_expect or test_stable, but it never explicitly names those siblings, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the scenario in which it runs (multi-step scripted sequences with writes, expectations, waits and a recording) but gives no explicit when-to-use versus test_expect / test_stable / exp_run, and no prerequisites. Usage is deducible from the described capabilities, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_stableBRead-only
Assert a value does not move more than tolerance for duration_ms (settle check for a weight, pressure, PID output, state).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| tolerance | No | ||
| duration_ms | No | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description usefully implies a time-consuming operation ('for duration_ms'), but does not say whether it blocks/polls, how it fails on an assertion miss, or its polling cadence. With annotations carrying safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the core assertion leads and the examples clarify scope. It is tightly sized, though the terseness leaves some parameter detail unaddressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and annotations cover safety. The remaining gap is parameter meaning at 0% schema coverage, where only half the params are described. Adequate but incomplete for a 4-parameter assertion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It conveys real meaning for two of four params (tolerance = maximum permitted movement; duration_ms = observation window), which is genuine added semantics. However, symbol and interval_ms are left entirely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Assert') and a precise behavior: a value must not move more than tolerance over duration_ms. The parenthetical examples (weight, pressure, PID output, state) make the intent concrete. It is clear, though it does not explicitly contrast itself with siblings like test_expect or test_response.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Calling it a 'settle check' implies the usage context (verifying a signal has stabilized) but no when-to-use/when-not or alternative tool is named. An agent must infer whether to reach for test_stable versus test_expect or ads_wait_until.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wf_debug_symbolBRead-only
One-call debugging dossier for a variable: live value, declaring file:line chain, the statements that write it, code excerpts around them, and a short change watch.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| watch_ms | No | ||
| context_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the returned artifacts and a 'short change watch', which is a behavioral trait beyond the annotations. It does not explain the watch mechanism, permissions, or side effects, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a colon-delimited list of outputs and zero filler. It is appropriately sized and structured for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return-value explanation is not strictly necessary, though the description lists outputs anyway. For a composite tool with many overlapping siblings, the definition remains incomplete on selection guidance and parameter detail, even with annotations and an output schema reducing the burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It loosely maps all three parameters: symbol is the variable, context_lines are the 'code excerpts around' write statements, and watch_ms is the 'short change watch'. It omits units, defaults, and precise semantics, adding moderate but incomplete value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: one-call debugging dossier for a variable, and enumerates the concrete artifacts returned. It does not explicitly contrast with overlapping siblings like ads_read, ads_symbol_info, or proj_references, but the composite scope is distinct enough for an agent to identify it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance. 'One-call debugging dossier' implies a debugging context, but with many overlapping siblings (ads_read, ads_symbol_info, proj_resolve_symbol, ads_watch) the description leaves tool selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wf_fb_profileBIdempotent
Profile an FB instance for duration_s: records every leaf (change mode), samples task timing in parallel, then reports most-active symbols, boolean pulse rates, state dwell timelines, silent symbols and the FB's cost on the task. Read-only on the PLC.
| Name | Required | Description | Default |
|---|---|---|---|
| cycle_ms | No | ||
| instance | Yes | ||
| duration_s | No | ||
| task_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description ends with the safety claim 'Read-only on the PLC,' while the annotations declare readOnlyHint=false, which tells an agent the tool may modify its environment. These are directly conflicting safety signals on a tool whose whole purpose is instrumenting a live controller, so the description undercuts rather than clarifies the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the verb and target, followed by the output inventory. The single-sentence output list is dense but each item earns its place by telling the agent what data comes back; only the trailing safety clause is problematic, not the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not re-explain return values, and it usefully summarizes what is reported. However, for a long-running sampling tool (default duration_s=10) it omits whether the call blocks for the full duration, what load it places on the target task, and what prerequisites must hold before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the four parameters (cycle_ms, instance, duration_s, task_index) are documented only by bare titles. The description explains duration_s ('for duration_s') and loosely ties task_index to 'the FB's cost on the task,' but cycle_ms (sampling resolution) and instance (which FB instance, and in what notation) are left entirely unexplained, which is a real gap for a profiling tool where sampling rate matters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (profile) and resource (an FB instance) and enumerates exactly what it produces: leaf recordings, task timing samples, most-active symbols, pulse rates, state dwell timelines, silent symbols, and task cost. This is specific enough to separate it from siblings such as rec_profile_start, ads_watch, or wf_debug_symbol.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrasing ('Profile an FB instance for duration_s'), so an agent can infer this is the deep-profiling entry point, but there is no explicit when-to-use vs when-not, and no mention of alternatives or prerequisites (e.g. needing an established ADS connection or a running task). The sibling set contains several overlapping profiling/recording tools that are never referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wf_project_overviewARead-only
Orientation in one call: index summary, programs with call trees, FBs with interfaces, GVLs/DUTs, lint summary, git state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful fact that many facets are bundled into a single call, but says nothing about cost, size, or freshness of the aggregated data. With annotations carrying safety and an output schema carrying returns, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence leading with the core idea ('Orientation in one call') followed by a dense enumeration of covered facets. No filler, every listed item earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter aggregator with an output schema, the description tells the agent what the payload covers, which is enough to call it correctly. What it lacks is a note on relative cost/volume of pulling every facet at once, the one piece of context an agent would want before invoking it as a first step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which per the rubric sets a baseline of 4. There is no parameter behavior for the description to clarify or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-adjacent concept ('orientation') and enumerates exactly what the call aggregates: index summary, programs with call trees, FBs with interfaces, GVLs/DUTs, lint summary, git state. This is clearly distinguishable from granular siblings like proj_lint or proj_call_graph, but the description never explicitly names those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Orientation in one call' implies this is a starting-point/aggregate tool, which is genuine usage context. However, it gives no explicit when/when-not guidance and does not name any alternative (e.g. use proj_lint for just lint, proj_scan for a scan) to route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wf_release_checkAIdempotent
Go/no-go before a deploy: git changes, build result, lint, source-vs-runtime, TcUnit result on the target, task health. Writes nothing to the PLC.
| Name | Required | Description | Default |
|---|---|---|---|
| run_build | No | ||
| lint_rules | No | ||
| plc_project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (idempotent, non-destructive) but leave readOnlyHint=false, which reads as 'this mutates something.' The description resolves that by scoping the mutation claim: 'Writes nothing to the PLC,' and lists the verifications performed. It still omits prerequisites (connected target? open solution?) and whether checks fail-fast or all report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the operative purpose plus check list are front-loaded before the safety note. Optimal density for a composite tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and all three params are optional. The description covers what is checked and the PLC write-scope, which is most of what an agent needs; only environmental prerequisites for running the check are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. The checklist items map loosely onto the params (build result -> run_build, lint -> lint_rules, source-vs-runtime/TcUnit on target -> plc_project_path), giving inferable semantics, but defaults (run_build=true) and the null semantics of lint_rules/plc_project_path are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: a go/no-go release check, then enumerates the exact signals it aggregates (git changes, build result, lint, source-vs-runtime, TcUnit on target, task health). Very clear what it does, though it never names or distinguishes itself from the sibling checks it composes (tcunit_run, proj_vs_runtime, proj_lint).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Go/no-go before a deploy" gives an unambiguous usage trigger. There is no when-not guidance or named alternative (e.g. running individual checks instead), but the context is clear enough to select the tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_activate_configurationADestructive
ActivateConfiguration on the current target (overwrites the boot project on the IPC). Destructive-class. Follow with xae_restart_twincat.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so safety class is known. The description still adds real value beyond them by specifying what is overwritten (the boot project on the IPC) and that a restart must follow. It does not state permission requirements or reversibility, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its consequence before the follow-up instruction. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the destructive consequence plus restart sequencing are covered. However, the confirm_token parameter — plausibly a required confirmation gate for a destructive operation — is entirely unexplained, and 'current target' is never defined, leaving a real gap for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single confirm_token parameter, and the description never mentions it. For a destructive-class tool whose only parameter is apparently a confirmation gate, an agent is left guessing its format and purpose. The description should have compensated for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('ActivateConfiguration') on a specific target ('the current target') and immediately names the consequence ('overwrites the boot project on the IPC'). An agent understands the operation without opening the schema. It does not explicitly distinguish itself from the nearby xae_boot_project or xae_deploy siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete sequencing rule: 'Follow with xae_restart_twincat,' which tells the agent the activation is not a terminal step. It also labels the operation 'Destructive-class,' which is a usage warning. It does not say when NOT to use it or name alternatives to activation, so no 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_attachAIdempotent
Attach to the running XAE shell / Visual Studio (Running Object Table). Picks the instance holding solution_path when given. launch=true starts a new shell (slow).
| Name | Required | Description | Default |
|---|---|---|---|
| launch | No | ||
| progid | No | ||
| solution_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful beyond-annotation detail: attach works against the ROT, and launch=true spawns a new shell at a performance cost ("slow"). It omits failure behavior when no matching instance exists and whether re-attach is cheap, so it adds some but not rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste. The core action and the instance-selection rule are front-loaded, with the launch caveat demoted to last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose. Given three optional parameters and the disclosed launch/solution_path semantics, an agent has enough to call it, though the unexplained progid and absent failure-mode behavior leave a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden; it explains launch (forces a new shell, slow) and solution_path (instance selector), which is real added meaning. But progid is left completely unexplained despite being a non-obvious identifier parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (attach) and resource (XAE shell / Visual Studio via the Running Object Table), and adds the disambiguating mechanism that separates it from an open-style sibling. It never names the alternative sibling (e.g. xae_open_solution) or explains the relationship, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Picks the instance holding solution_path when given" and "launch=true starts a new shell" imply selection behavior, so usage is inferable. There is no explicit when-to-use vs. xae_open_solution / xae_status, and no statement about what to do when no shell is running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_boot_projectBIdempotent
Boot project settings: set Autostart and/or GenerateBootProject (local, no activate unless activate_after_generate=true, which is then destructive-class).
| Name | Required | Description | Default |
|---|---|---|---|
| generate | No | ||
| autostart | No | ||
| confirm_token | No | ||
| plc_project_path | Yes | ||
| activate_after_generate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety baseline is covered. The description adds genuine value by disclosing that setting activate_after_generate=true escalates the call to destructive-class, a condition the static annotation cannot express. It stops short of explaining the confirm_token flow or permission prerequisites for that escalation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core action and places the risk condition after it. Every clause carries information, though the parenthetical is terse enough to require rereading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations cover the safety profile. What is missing is how confirm_token is obtained and what plc_project_path must point at, gaps that matter for a mutation tool with a destructive escalation path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it only partially does, mapping 'Autostart', 'GenerateBootProject' and 'activate_after_generate' to their parameters. The critical confirm_token and the required plc_project_path are never explained, leaving the destructive path's mechanics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Boot project settings') and names the settings it writes (Autostart, GenerateBootProject), so the agent knows this mutates boot configuration. It does not differentiate itself from siblings like xae_activate_configuration or xae_deploy, leaving the boundary to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides one conditional rule ('no activate unless activate_after_generate=true, which is then destructive-class'), which implies when the risky path applies. There is no explicit when-to-use vs alternatives guidance against the many xae_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_buildAIdempotent
Build the solution (File.SaveAll first by default). Returns success, error/warning items with file:line (VS error list, or parsed from the Build output pane) and the output tail. check_all_objects=true runs PLC 'Check all objects' instead (compiles unused POUs).
| Name | Required | Description | Default |
|---|---|---|---|
| clean | No | ||
| rebuild | No | ||
| save_first | No | ||
| check_all_objects | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=true, and the description adds real behavioral context beyond them: the default triggers a File.SaveAll side effect before building, and it discloses what is returned (success flag, error/warning items with file:line, output tail). This side-effect disclosure is exactly the sort of non-obvious trait 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler: the core action, the return contract, and the alternate mode. Dense but each clause carries information; the parentheticals are compact rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return-value description is bonus rather than a gap, and the build/save/check behaviors are all surfaced. The only omission is semantics for clean vs rebuild, which is minor given their self-evident names and the otherwise complete behavioral picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains check_all_objects (runs PLC Check all objects, compiles unused POUs) and save_first (SaveAll first by default), but is silent on clean and rebuild, leaving half the parameters to be inferred from their titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Build the solution') and immediately qualifies the default behavior ('File.SaveAll first by default'), so the agent knows exactly what operation runs. It does not name or contrast any sibling tool, but no sibling competes for the same build action, so clarity is high without explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the alternate mode ('check_all_objects=true runs PLC Check all objects instead'), which is a form of routing guidance within the tool. However, it gives no explicit when-to-use/when-not versus alternatives such as xae_deploy or proj_lint, 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.
xae_commandBDestructive
Execute an arbitrary DTE command (e.g. 'PLC.Login'). Control-class; commands whose name contains download/reset/activate/restart/delete/remove/shutdown are destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| name | Yes | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the bar is lower, yet the description adds real value by defining which command names fall into the destructive class. It does not, however, explain what confirm_token is for or what triggers a confirmation requirement, leaving a behavioral gap for a destructive-capable tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler, and the core action is front-loaded ahead of the classification rule. Slightly clunky punctuation around "(e.g. 'PLC.Login'). Control-class;" but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic, destructive-capable command executor with 0% parameter documentation, the description should explain how args are passed and when confirm_token is required. The output schema covers return values, so that omission is acceptable, but the input-side gaps are significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, and the description only implicitly touches 'name' via an example. The format of 'args' (a free-form string — quoting, separators, positional ordering) and the purpose/requiredness of 'confirm_token' are entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Execute an arbitrary DTE command', with a concrete example ('PLC.Login'). It is clearly distinguishable from xae_list_commands (which enumerates) and from typed siblings like xae_build or xae_plc, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The destructive-class naming heuristic (download/reset/activate/restart/delete/remove/shutdown) implicitly tells the agent when an operation is risky, which is genuine contextual guidance. However, there is no guidance on when to prefer this raw escape hatch over typed siblings such as xae_build, xae_activate_configuration, or xae_restart_twincat, and nothing about prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_deployADestructive
Save → build → (boot project autostart on) → activate → restart, in one call. Stops at the first build error. Destructive-class (one confirmation covers all steps). Refuses when the XAE target and the ADS target of this server differ.
| Name | Required | Description | Default |
|---|---|---|---|
| skip_build | No | ||
| confirm_token | No | ||
| plc_project_path | No | ||
| allow_target_mismatch | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation it discloses important behavior: the pipeline halts at the first build error, a single confirmation token covers all the destructive steps, and it refuses on XAE/ADS target mismatch. This is meaningful context the annotations alone do not convey, though the effect of a mid-pipeline failure on already-saved/built state is not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place, with the operation pipeline front-loaded before the failure/confirmation/precondition caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description does cover the key precondition, failure semantics, and confirmation requirement for a highly destructive composite tool. The gap is the undocumented parameters, which leaves an agent guessing at skip_build and plc_project_path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and all four parameters (skip_build, confirm_token, plc_project_path, allow_target_mismatch) are undocumented in the schema. The description only indirectly gestures at confirm_token ('one confirmation covers all steps') and allow_target_mismatch ('refuses when targets differ'); it never explains skip_build or plc_project_path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact sequence of operations (save, build, boot-project autostart, activate, restart) performed as a single composite action. This clearly distinguishes it from the granular siblings like xae_build, xae_activate_configuration, and xae_restart_twincat, which do only one step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It signals this is the one-call alternative to the step-by-step siblings and gives a concrete pre-condition for refusing ('when the XAE target and the ADS target of this server differ'). It does not, however, explicitly name the individual tools to use instead or state when a caller should prefer the granular path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_diagnosticsARead-only
Current error list (errors/warnings/messages with file:line) plus the tail of the Build output pane, without rebuilding.
| Name | Required | Description | Default |
|---|---|---|---|
| tail_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds that results come from the existing state without triggering a rebuild, which is useful behavioral context, but says nothing about result freshness, whether the list is cleared, or how the two output sections are delimited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource front-loaded and the key constraint ('without rebuilding') attached at the end. No filler, nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only diagnostics tool with an output schema documenting the return payload, the description covers what is returned and that no build is triggered. The remaining gap is the undocumented tail_lines parameter, which is the only thing an agent must actively set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter tail_lines (integer, default 200), and the description never mentions it. The phrase 'the tail of the Build output pane' implies a configurable tail exists, but gives no hint about what the parameter controls, its units, bounds, or what happens when it is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific read action and its exact payload: the current error list (errors/warnings/messages with file:line) plus the tail of the Build output pane. The phrase 'without rebuilding' implicitly routes the agent away from the build sibling (xae_build), so the tool is distinguishable without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'without rebuilding' is a genuine usage cue that tells the agent to prefer this over triggering a build when it only wants existing diagnostics. However, no alternative is named explicitly and there is no statement of when this tool is not appropriate (e.g., stale results if no build has run).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_dialog_resolveADestructive
Click a button on an open XAE dialog ('OK', 'Yes', 'No', 'Cancel'…). remember=true adds an auto-answer rule for that title (never for machine-affecting prompts). Control-class; machine-affecting prompts (activate/run/download/login/delete/safety) are destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| hwnd | No | ||
| button | Yes | ||
| remember | No | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds real domain context: it introduces the 'control-class' vs 'destructive-class' distinction and warns that activating/running/downloading/logging-in/deleting/safety prompts carry destructive classification. It softens the blanket destructive hint with useful granularity, though it omits auth/confirm requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the primary action and example values, then the classification nuance. No filler, though the classification clause is jargon-heavy and slightly compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations carry the safety profile. The gaps are the undefined hwnd and confirm_token parameters, especially confirm_token, which matters for a destructive-class tool that likely pairs with tc_request_confirmation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it only covers two of four params: it enumerates valid 'button' values and explains remember=true semantics. hwnd and confirm_token are undocumented in both schema and description, leaving a meaningful gap for the confirmation-related field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Click a button on an open XAE dialog', with concrete examples ('OK', 'Yes', 'No', 'Cancel'). Clearly distinguishable from sibling xae_dialogs (which lists dialogs) since this one acts on an already-open one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the precondition that a dialog must already be open, and gives conditional guidance for the remember flag ('never for machine-affecting prompts'). However, it never states when to prefer this over related tools like xae_dialogs or tc_request_confirmation, so routing 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.
xae_dialogsARead-only
Modal dialogs currently open in the attached XAE shell (title, text, buttons), the watchdog's auto-answer rules and its recent log. A pending dialog blocks every COM call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral value by disclosing that a pending dialog blocks every COM call, a non-obvious operational trait an agent needs to reason about cascading failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the blocking warning is placed last for emphasis. The first sentence is somewhat packed (three enumerated return items in one clause) but remains readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't detail return formatting, and it instead spends its words on the resource and the blocking behavior. It is nearly complete, with only sibling routing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate on the input side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource it returns (open modal dialogs with title/text/buttons, plus watchdog auto-answer rules and its log), so an agent can tell what will come back. It lacks an explicit verb (list/get) and never distinguishes itself from the obvious sibling xae_dialog_resolve, which is what actually resolves these dialogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"A pending dialog blocks every COM call" implicitly tells the agent when this matters (when automation is stuck), which is useful implied guidance. However, there is no explicit when-to-use statement and no reference to xae_dialog_resolve as the follow-up action once a dialog is found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_io_disableAIdempotent
Set/clear the Disabled flag on I/O devices under TIID (all, or the named ones) so a configuration activates without the hardware present — TcUnit on a PC, dry runs.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | ||
| disable | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds the meaningful effect (toggling a flag so configs activate without hardware), but says nothing about required prerequisites, what happens to devices not matched by names, or error behavior when TIID is unreachable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the motivation trailing after the em-dash; every clause carries information. Dense but not padded, and no redundant restatement of the name or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations carry the mutation/idempotency profile. The description covers purpose, params and rationale adequately for a two-param toggle; only edge-case behavior (unmatched names, failure modes) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the params — and it largely does: 'Set/clear' maps to the boolean `disable` and 'all, or the named ones' maps to `only`, including the null default meaning all. It does not specify the expected name format or scope of the name strings, so one detail is left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair ('Set/clear the Disabled flag on I/O devices under TIID') plus the operational rationale. It is not a tautology and an agent can tell this is a device-flag mutation, though it never names a sibling to contrast with (e.g. xae_activate_configuration or xae_target).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use context ('so a configuration activates without the hardware present — TcUnit on a PC, dry runs'), which tells the agent the precondition of absent hardware. It stops short of naming a when-not condition or an alternative tool for the same goal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_linksBRead-only
Variable links of the PLC instance: every AT %I*/%Q* variable with its link target; lists the unlinked ones (the usual reason an output never moves).
| Name | Required | Description | Default |
|---|---|---|---|
| plc_project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value by disclosing that unlinked variables are enumerated alongside linked ones and why that matters, but says nothing about scope limits, permissions, or the PLC being online/attached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, front-loaded with the resource being reported, with no filler sentences. The trailing 'lists the unlinked ones' slightly interrupts the flow but earns its place as the diagnostic hook.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the diagnostic framing covers the 'why'. It is still incomplete for a tool sitting among ~90 siblings: no indication of required XAE/PLC session state and no guidance on the single undocumented parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter plc_project_path, so the description bears the burden and adds nothing: no path format, no hint whether it is a filesystem path, a project name, or an XAE handle. The self-describing name is the only aid, which is thin for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and output: the AT %I*/%Q* variable links of a PLC instance, plus the unlinked set. It is clear what an agent gets back, though it does not explicitly differentiate itself from lookalike siblings such as proj_variables or hmi_bindings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'the usual reason an output never moves' implies the diagnostic scenario (output not actuating) in which this tool is the right pick. However, it never states when to prefer it over alternatives or what prerequisites exist, so the routing guidance remains 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.
xae_list_commandsBRead-only
List DTE command names containing a substring (to discover what this shell exposes).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| contains | No | PLC |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds the introspection intent but says nothing about result volume, truncation, or how the limit interacts with a large command set — relevant context that annotations do not supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the filter scope stated before the parenthetical rationale. Nothing is wasted, though it is arguably too terse given the undocumented defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required. However, for a tool with two unannotated parameters and surprising defaults (contains='PLC', limit=200), the description leaves the agent guessing about default filtering and result capping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry both parameters. It conceptually explains 'contains', but ignores 'limit' entirely and never warns that 'contains' silently defaults to 'PLC', a non-obvious default that will filter results unexpectedly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List DTE command names') plus the filtering dimension ('containing a substring'), which is enough to distinguish it from a generic command executor. It gestures at the sibling relationship by framing this as discovering 'what this shell exposes', but never names xae_command as the tool that actually runs a command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'to discover what this shell exposes' implies the intended discovery/introspection use case. There is no explicit when-not guidance and no named alternative, so the agent must infer that this is the read-only precursor to xae_command.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_open_solutionBIdempotent
Open a .sln in the attached shell.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety/mutation profile is largely covered. The description adds only the implicit precondition that a shell must be attached; it says nothing about what happens on failure, whether the solution replaces the current project state, or whether it triggers a build/load.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and no filler. It is efficient, though brevity here shades into under-specification rather than tight, information-dense writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, but the lone parameter is undocumented and the dependency on a prior attach is only implied. For a simple one-parameter tool that is minimally adequate, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required 'path' parameter, so the description carries the full burden and fails to add anything: no expected format (.sln extension, absolute vs relative, escaping). An agent must guess what a valid path looks like.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Open) and resource (.sln solution file) and clarifies the operating context ('in the attached shell'). It does not, however, distinguish this from nearby siblings like xae_boot_project or xae_attach, so an agent must infer which entry point applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus xae_attach, xae_boot_project, or xae_activate_configuration, and no prerequisites (e.g. that a shell must already be attached). The phrase 'attached shell' hints at a precondition but never states it or tells the agent what to do if none exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_plcADestructive
PLC online actions through the shell: login | logout | start | stop | reset_cold | reset_origin | download. Command names vary by shell version; all candidates are tried. download/reset_cold/reset_origin are destructive-class, the rest control-class.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond the annotations by naming which specific actions are destructive-class (download/reset_cold/reset_origin) versus control-class, and discloses that command names vary by shell version with all candidates tried. This tells the agent more than the blanket destructiveHint flag does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the action list, with no filler. The version-variation and destructive-class notes are compact and earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values are covered, but for a destructive PLC-operation tool the confirmation flow is under-specified: the description never explains when confirm_token is required or how to obtain it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the burden. It enumerates the action values, effectively documenting the 'action' parameter, but says nothing about confirm_token, leaving half the parameters unexplained despite it clearly governing destructive operations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('PLC online actions through the shell') and enumerates the exact actions it performs. An agent can tell what it does, though it doesn't explicitly contrast itself with near-neighbors like ads_plc_state or xae_deploy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The action list implies usage, and the destructive-vs-control classification hints at when caution is needed, but there is no explicit 'use this when' or named alternative. The agent must infer fit from the sibling set on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_plcopen_exportBIdempotent
Export PLC objects ('POUs.FB_X', 'DUTs.ST_Y' — folder.object) to a PLCopen XML file.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| xml_file | Yes | ||
| plc_project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, and the description is consistent with a safe, repeatable file export. However, it adds no behavioral context beyond them – nothing about overwrite behavior if xml_file already exists, permissions, or partial-failure semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with an inline example; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but three required parameters at 0% coverage are largely undocumented and there is no usage or behavioral guidance for a write-to-file operation. The description is too thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains only the 'items' address syntax ('POUs.FB_X' — folder.object) with examples; xml_file and plc_project_path remain entirely undocumented, so it partially compensates at best.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export PLC objects') plus the output artifact ('PLCopen XML file'), and names the object-address format. It implicitly distinguishes itself from the sibling xae_plcopen_import, though it does not explicitly route the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use context, no prerequisite (e.g. an attached/open solution), and no comparison to related export tools such as ads_export, exp_template, or xae_plcopen_import. The agent must infer all of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_plcopen_importBIdempotent
Import a PLCopen XML file into a PLC project (path from xae_plc_projects). option: none | rename | replace | skip (conflict handling).
| Name | Required | Description | Default |
|---|---|---|---|
| option | No | none | |
| xml_file | Yes | ||
| plc_project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so safety is partly covered. The description adds the conflict-handling semantics of the option values, which is genuine behavioral context. However, 'replace' implies overwriting existing content while destructiveHint is false, a tension that goes unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded: purpose first, then the option enumeration. The dangling 'option:' on its own line is slightly awkward but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile. Still, with zero schema coverage the two required parameters are under-explained, leaving the definition only minimally complete for a mutating import tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It documents the option parameter well ('none | rename | replace | skip (conflict handling)') but says nothing about xml_file or plc_project_path beyond a passing hint about the path's source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Import) and resource (PLCopen XML file) plus a destination (PLC project), which the sibling xae_plcopen_export clearly mirrors in reverse. It stops short of explicitly naming the sibling, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'path from xae_plc_projects' gives an implicit hint about where the project path comes from, but there is no explicit when-to-use / when-not-to-use guidance or mention of the export counterpart. 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.
xae_plc_projectsARead-only
PLC projects in the TwinCAT project with their tree paths (needed by PLCopen / boot tools).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds that the returned data includes tree paths and that downstream tooling depends on it, but says nothing further about behavior. With annotations carrying the load, this is adequate at a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core resource front-loaded and the prerequisite note kept in a parenthetical. Every clause earns its place; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with an output schema already defined, the description supplies what an agent needs to select it. The only shortfall is naming which specific sibling tool consumes the tree paths, but the return format need not be restated given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate; per the rubric this is a baseline 4. The description appropriately adds no fictional parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource set (PLC projects in the TwinCAT project) and a distinguishing attribute (their tree paths), so an agent knows what it yields. The verb is implicit rather than stated ('list/retrieve'), but the scope is unambiguous. It does not explicitly contrast with the similarly named sibling xae_plc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(needed by PLCopen / boot tools)' implies a usage context — call this to obtain paths before xae_plcopen_import/export or xae_boot_project — but it never states when to use it directly or what alternatives exist. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_pou_createBIdempotent
Create a PLC object under a folder/POU: kind = program | fb | function | method | property | action | transition | struct | enum | union | alias | gvl | interface | itf_method | itf_property | folder | parameter_list. Optional code is set after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| access | No | ||
| extends | No | ||
| language | No | st | |
| implements | No | ||
| declaration | No | ||
| parent_path | Yes | ||
| return_type | No | ||
| implementation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, so the mutation and safety profile is partly covered. The description adds little beyond the workflow note — it does not say what happens when an object with that name already exists (notable given idempotentHint=true), nor what permissions or prerequisites are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the kind enumeration compactly listed. Dense but without filler; the only reason it is not a 5 is the long inline enumeration which is functional rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter creation tool with an output schema, the description covers only 'kind' and a workflow hint. With no annotation or schema text for the remaining nine parameters and no statement about conflict handling or prerequisites, an agent lacks enough to call this reliably beyond the trivial case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, so the description carries the full burden. It only documents the valid values for 'kind' (valuable, since the schema has no enum for it) and leaves parent_path, name, access, extends, implements, language, declaration, return_type and implementation entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: 'Create a PLC object under a folder/POU', and enumerates the exact kinds it can create, which is far more specific than the bare name. It does not explicitly contrast itself with nearby siblings like xae_tree_create_child or xae_pou_set, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Optional code is set after creation' implies a create-then-set workflow and hints at the existence of xae_pou_set, but there is no explicit when-to-use / when-not-to-use guidance and no guidance against the overlapping tree/child creation tool. 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.
xae_pou_getBRead-only
Declaration/implementation text of a POU/DUT/GVL/interface tree item and its methods/properties/actions.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| include_subitems | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read profile is covered. The description adds that the result spans declaration AND implementation text plus nested methods/properties/actions, which is genuinely useful scoping context, but it says nothing about path resolution or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though the absence of a verb makes the opening slightly less scannable than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and annotations cover safety. However, for a tool whose only required parameter is an undocumented path string, the definition is thinner than the task demands.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It hints at what 'subitems' means (methods/properties/actions), indirectly clarifying include_subitems, but leaves the required 'path' parameter completely unexplained—no format, root, or delimiter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (a POU/DUT/GVL/interface tree item) and specifies the returned content (declaration/implementation text, including methods/properties/actions). It is clear what the tool retrieves, though it never states a verb and does not distinguish itself from close siblings like xae_tree_get or proj_get_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use statement, no prerequisites, and no routing to alternatives despite many overlapping siblings (xae_tree_get, proj_get_code, infosys_declaration, xae_pou_set). The agent must infer the use case entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_pou_setAIdempotent
Replace declaration and/or implementation text of a POU item inside the live shell (no file round-trip, XAE keeps LineIds consistent). Build afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| declaration | No | ||
| implementation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, idempotent=true, destructive=false), so the bar is lower. The description still adds non-obvious behavior: edits happen in-place in the live shell, LineIds are kept consistent, and a build is required afterwards — useful context an agent would not get from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource, with the parenthetical and the 'Build afterwards' note each carrying distinct value. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description implies the POU must already exist and that a build follows, but omits failure behavior and path format, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the schema supplies no meaning. The description clarifies that declaration and implementation are the editable payloads and may be set individually or together, but says nothing about the required 'path' parameter or its expected format, leaving the most important parameter undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (replace) acting on a specific resource (declaration and/or implementation text of a POU item), and scopes it with 'inside the live shell (no file round-trip)'. This differentiates it from file-based siblings like proj_set_code, though it does not name an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'no file round-trip' implicitly signals when to prefer this over file-editing tools, and 'Build afterwards' gives the required follow-up step. However, no explicit when-not conditions or named alternative tools are given, so usage remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_restart_twincatCDestructive
StartRestartTwinCAT on the current target (runtime restarts in RUN mode). Destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent, so the 'Destructive-class' label largely repeats structured data. The description does add real behavioral context — the runtime restarts in RUN mode on the current target — but omits impact/downtime, permission needs, and how the confirm token gates execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the action front-loaded; no filler. Slight waste in 'Destructive-class,' which restates the destructiveHint annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but for a destructive restart of an industrial runtime the definition leaves key operational facts unexplained: the confirm-token requirement, downtime/state loss, and how to recover if the restart fails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (confirm_token) with 0% schema description coverage, so the description carries the full burden and says nothing about it. Given a sibling tc_request_confirmation exists, the omission of how the token is obtained and whether it is optional is a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the verb (restart) and the resource (TwinCAT runtime) and clarifies the target scope (current target). It is distinguishable from build/deploy/mode-setting siblings, though the odd casing of 'StartRestartTwinCAT' and the 'XAE' prefix add noise rather than precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus alternatives such as tc_set_mode, ads_system_mode, or xae_activate_configuration. No mention of preconditions (confirmation flow, project attachment) or when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_statusCRead-only
Shell version, open solution, projects, TwinCAT project name, target NetId, started flag.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and destructiveHint=false already establish that this is a safe read. The description then only enumerates return fields, which the existing output schema already carries, so it adds essentially no behavioral context beyond the annotations and structured output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single terse fragment with no wasted words, but it is only a comma-delimited list with no leading verb or framing, so it is under-structured rather than genuinely well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description duplicates that field list while omitting any statement of what the tool is for or when to invoke it. Adequate but with clear gaps for a zero-parameter status tool in a dense sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies; the schema fully covers the (empty) input surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a bare field list ('Shell version, open solution, projects, TwinCAT project name, target NetId, started flag') rather than a stated purpose. An agent can infer this returns status about the TwinCAT XAE shell, but there is no verb and no explicit scope statement, and no differentiation from the sibling xae_diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as xae_diagnostics or ads_status, which also surface status information. The agent is left to 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.
xae_targetBDestructive
Get (net_id=None) or set the target AMS NetId of the TwinCAT project. Setting is control-class.
| Name | Required | Description | Default |
|---|---|---|---|
| net_id | No | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Setting is control-class', which flags the mutation path as a higher-consequence control operation, useful context layered on top of destructiveHint=true. It does not, however, explain the destructive impact, any authorization/permission needs, or how the confirm_token confirmation flow behaves. Annotations cover the safety profile, so the lower bar is met but not exceeded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the dual-mode behavior is front-loaded and the control-class caveat trails directly after. Efficient without being truncated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained. But for a destructive, non-idempotent mutation tool, the confirm_token parameter and the meaning of 'control-class' are left unexplained, leaving the agent without enough to safely execute the set path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the full parameter burden. It does explain the meaningful net_id=None get semantics, but confirm_token is never mentioned at all, leaving a required-for-control-class-flow parameter completely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair (get/set the target AMS NetId of the TwinCAT project) and clarifies its dual-mode nature. It is comprehensible on its own, though it does not differentiate itself from the many sibling xae_* and tc_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the parameter pattern: 'net_id=None' triggers a get, providing net_id triggers a set. However, there is no explicit when/when-not guidance, no named alternatives, and no indication of the conditions under which the control-class set path should be exercised.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_tree_consume_xmlBIdempotent
ConsumeXml on a tree item — the generic write path for any configuration (add I/O boxes, link variables, set task cycle time, add project routes on TIRR …).
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description adds real value by enumerating the kinds of mutations this path performs, but it says nothing about failure behavior, partial application, or why a generic XML write is idempotent when it 'adds' elements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core action and then justified by concrete examples. The parenthetical list is long but every item earns its place by clarifying the breadth of 'any configuration'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described. But for a generic XML write against an engineering tree, the accepted XML dialect/format is the single most important thing an agent must know, and the description never addresses it even though schema coverage is 0%.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it documents neither parameter. 'On a tree item' loosely implies path is a tree node, and 'ConsumeXml' loosely implies xml is the configuration payload, but no format, encoding, or dialect for the XML is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair ('ConsumeXml on a tree item') and quantifies the scope as 'the generic write path for any configuration', which separates it from narrower siblings like xae_tree_set_values and xae_tree_create_child. It stops short of explicitly naming those siblings as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical examples (I/O boxes, variable links, task cycle time, TIRR routes) give a good feel for when this tool applies, and 'any configuration' signals broad applicability. However, it never says when NOT to use it or when the targeted siblings (xae_tree_set_values, xae_tree_create_child, xae_links) would be preferable, which an agent needs before defaulting to a generic write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_tree_create_childBIdempotent
Generic CreateChild (tree item types/subtypes per Infosys). For PLC objects prefer xae_pou_create.
| Name | Required | Description | Default |
|---|---|---|---|
| info | No | ||
| name | Yes | ||
| before | No | ||
| subtype | Yes | ||
| parent_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds only that subtypes come from an Infosys catalog; it says nothing about side effects, whether the parent must exist, or the notable idempotency claim for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the purpose and the sibling routing front-loaded. Terse to the point of under-specification, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but a 5-parameter creation tool with 0% schema coverage and only two lines of description leaves too much undocumented. The description does not compensate for the missing parameter semantics or creation preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all 5 parameters (info, name, before, subtype, parent_path), so the description must carry the burden and largely does not. The only hint is that subtype values follow 'Infosys' definitions, leaving parent_path, name, before, and the untyped 'info' object entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (create a child tree item) and explicitly routes PLC-object cases to xae_pou_create, which distinguishes it from at least one sibling. The parenthetical 'tree item types/subtypes per Infosys' is cryptic and leans on external catalog knowledge, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The one-line exclusion ('For PLC objects prefer xae_pou_create') gives real routing guidance, but there is no general statement of when to use this generic creator versus xae_tree_consume_xml, xae_plcopen_import, or other tree-construction tools. Implied usage rather than complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_tree_deleteCDestructive
Delete a tree item (POU, box, task …). Destructive-class.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent_path | Yes | ||
| confirm_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so 'Destructive-class' merely restates structured data and adds no new information. The description omits what actually matters beyond annotations: whether the delete is recoverable, whether children are cascaded, and how confirm_token must be supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the action and resource. Efficient, though the trailing 'Destructive-class' label earns little since the annotations already say it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with an undocumented confirmation token and zero schema descriptions, the definition is too thin. An agent cannot learn from it how to safely supply confirm_token or what the deletion cascades to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 3 parameters, so the description must carry the burden and does not. parent_path and confirm_token are never explained, and even 'name' is only obliquely hinted at by the list of item kinds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (tree item) and clarifies the domain with examples (POU, box, task). It is clear what the tool does, though it does not explicitly differentiate itself from sibling tree tools like xae_tree_create_child or xae_tree_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over other tree mutations, nor any preconditions for a destructive delete. The confirm_token parameter strongly implies a confirmation workflow, but the description never mentions it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_tree_getARead-only
System Manager tree item: properties, children to depth, and ProduceXml when xml=true.
Path syntax 'TIPC^Plc^Plc Project^POUs^MAIN'. Roots: TIID (I/O), TIPC (PLC), TIRC
(real-time/tasks), TIRR (routes), TINC (NC).
| Name | Required | Description | Default |
|---|---|---|---|
| xml | No | ||
| path | Yes | ||
| depth | No | ||
| max_items | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: xml=true triggers ProduceXml and depth bounds child recursion. It does not mention max_items truncation behavior or any cost/side effects of ProduceXml, so the added value is moderate rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the core capability before the syntax details. The root-code list is dense but each entry carries selector information an agent needs, so almost nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required. With path grammar, root codes, depth and xml semantics covered, an agent has enough to call the tool correctly; only max_items behavior and any exclusions remain unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It explains path syntax and valid roots, ties depth to child expansion, and ties xml to ProduceXml output, but max_items (default 2000) is never mentioned, leaving one of four parameters completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (get) and resource (System Manager tree item), and enumerates what comes back: properties, children to depth, and ProduceXml when xml=true. It is clearly a read tool, but it never names its siblings (xae_tree_set_values, xae_tree_create_child, xae_tree_delete), so the distinction is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the path syntax and root list ('TIPC^Plc^Plc Project^POUs^MAIN'; roots TIID/TIPC/TIRC/TIRR/TINC), which tells an agent how to address a node. However there is no explicit when-to-use versus when-not, and no pointer to xae_tree_consume_xml for xml output or to the write siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xae_tree_set_valuesBIdempotent
Set element texts in a tree item's XML by relative XPath, e.g. {'TaskDef/CycleTime': '10000'} (unit 100 ns).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| assignments | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a mutating (readOnlyHint=false), idempotent, non-destructive write, so the safety profile is covered. The description adds the unit semantics of the value (100 ns), which is genuinely useful, but says nothing about persistence, whether unlisted elements are preserved, or the required connection state — a notable gap for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence plus an inline example, front-loaded with the action and immediately followed by the concrete format. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema means return values need no explanation, and the value format is conveyed. However, for a mutation tool with a required `path` parameter at 0% schema coverage, the definition leaves the anchor of the XPath (which tree item, which document) unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It does document the `assignments` shape well via the example (relative XPath key → string value), but the required `path` parameter — what path, relative to which tree item — is never explained in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: sets element texts inside a tree item's XML via relative XPath, which is clearly distinct from read-oriented siblings (xae_tree_get, xae_tree_consume_xml) and the structural siblings (xae_tree_create_child, xae_tree_delete). It stops short of explicitly naming those siblings, so it is clear but not self-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example shows how to call it but gives no when-to-use guidance, no prerequisites (must a solution/project be attached?), and no pointer to the sibling to use for reading or bulk-consuming XML instead. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
139 tool updates
v0.6.0- First observed
ads_add_route_to_plc - First observed
ads_app_info - First observed
ads_call_method - First observed
ads_connect - First observed
ads_discover - First observed
ads_dump - First observed
ads_ethercat - First observed
ads_export - First observed
ads_io_read - First observed
ads_leaves - First observed
ads_list_symbols - First observed
ads_ping - First observed
ads_plc_state - First observed
ads_read - First observed
ads_read_many - First observed
ads_read_raw - First observed
ads_routes - First observed
ads_status - First observed
ads_symbol_info - First observed
ads_system_mode - First observed
ads_task_stats - First observed
ads_types - First observed
ads_wait_until - First observed
ads_watch - First observed
ads_write - First observed
ads_write_many - First observed
ads_write_raw - First observed
exp_abort - First observed
exp_compare - First observed
exp_evaluate - First observed
exp_get - First observed
exp_list - First observed
exp_report - First observed
exp_run - First observed
exp_runs - First observed
exp_save - First observed
exp_status - First observed
exp_template - First observed
exp_validate - First observed
hmi_bindings - First observed
hmi_scan - First observed
hmi_vs_runtime - First observed
infosys_books - First observed
infosys_declaration - First observed
infosys_get_page - First observed
infosys_index - First observed
infosys_search - First observed
infosys_search_code - First observed
infosys_search_symbols - First observed
ipc_delete_file - First observed
ipc_eventlog - First observed
ipc_list_dir - First observed
ipc_read_file - First observed
ipc_reboot - First observed
ipc_start_process - First observed
ipc_write_file - First observed
proj_call_graph - First observed
proj_changed - First observed
proj_get_code - First observed
proj_interface - First observed
proj_lint - First observed
proj_list - First observed
proj_read_file - First observed
proj_references - First observed
proj_resolve_symbol - First observed
proj_scan - First observed
proj_search - First observed
proj_set_code - First observed
proj_validate_xml - First observed
proj_variables - First observed
proj_vs_runtime - First observed
rec_compare - First observed
rec_delete - First observed
rec_export - First observed
rec_latency - First observed
rec_list - First observed
rec_profile_delete - First observed
rec_profile_get - First observed
rec_profile_list - First observed
rec_profile_save - First observed
rec_profile_start - First observed
rec_profile_stop - First observed
rec_pulses - First observed
rec_read - First observed
rec_scan - First observed
rec_snapshot - First observed
rec_start - First observed
rec_stats - First observed
rec_status - First observed
rec_stop - First observed
snap_apply - First observed
snap_compare - First observed
snap_list - First observed
snap_save - First observed
tc_audit_tail - First observed
tc_doctor - First observed
tc_request_confirmation - First observed
tc_safety_status - First observed
tc_session_report - First observed
tc_set_mode - First observed
tcunit_results - First observed
tcunit_run - First observed
tcunit_scaffold - First observed
test_expect - First observed
test_response - First observed
test_scenario - First observed
test_stable - First observed
wf_debug_symbol - First observed
wf_fb_profile - First observed
wf_project_overview - First observed
wf_release_check - First observed
xae_activate_configuration - First observed
xae_attach - First observed
xae_boot_project - First observed
xae_build - First observed
xae_command - First observed
xae_deploy - First observed
xae_diagnostics - First observed
xae_dialog_resolve - First observed
xae_dialogs - First observed
xae_io_disable - First observed
xae_links - First observed
xae_list_commands - First observed
xae_open_solution - First observed
xae_plc - First observed
xae_plc_projects - First observed
xae_plcopen_export - First observed
xae_plcopen_import - First observed
xae_pou_create - First observed
xae_pou_get - First observed
xae_pou_set - First observed
xae_restart_twincat - First observed
xae_status - First observed
xae_target - First observed
xae_tree_consume_xml - First observed
xae_tree_create_child - First observed
xae_tree_delete - First observed
xae_tree_get - First observed
xae_tree_set_values
TDQS
Scored across 139 tools
Tools are grouped into coherent families (ads_*, rec_*, proj_*, xae_*) and descriptions are unusually detailed, but multiple overlapping variants exist — ads_read vs ads_read_many vs ads_dump vs ads_leaves, several write paths, several recording/test entry points — so an agent must carefully read descriptions to avoid misselection.
Names consistently use snake_case with subsystem prefixes (ads_, proj_, xae_, rec_, exp_, infosys_), and most operations include a verb. Minor deviations are noun-only/stateful names (ads_status, proj_interface, xae_plc) and the workflow-layer wf_ prefix mixed with subsystem naming, but the pattern remains readable and predictable.
139 tools is far beyond the 3–15 well-scoped range and well past the 25+ 'too many' threshold. Even for the broad TwinCAT domain, the set is a kitchen sink with layered and overlapping capabilities, imposing severe selection overhead on an agent.
Coverage is extensive across the TwinCAT lifecycle: project indexing, code get/set, build/deploy/activate, runtime ADS read/write, recording, experiments, HMI, Infosys docs, IPC, safety and audit. Some minor lifecycle gaps remain (e.g. explicit experiment deletion, HMI editing), but there are few obvious dead ends.
Maintenance
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Securely control computers you explicitly pair through files, terminals, processes, screenshots, desktop UI/input, clipboard, browser automation, diagnostics, and document tools.
Context and control for any AI. Agent identity, scoped access, and proof across tools.
Related MCP Servers
- AlicenseBqualityFmaintenanceAn MCP server for validating, auto-fixing, and scaffolding TwinCAT 3 XML files using deterministic code quality tools and IEC 61131-3 OOP checks. It enables AI assistants to perform structural validation, apply safe fixes, and generate canonical code skeletons for industrial automation projects.1637MIT
- FlicenseNot gradedqualityBmaintenanceMCP server that connects AI assistants to Siemens TIA Portal via the Openness API. AI-assisted PLC programming, project management, hardware configuration, cross-reference analysis, and deployment. 19 tools, 230 actions.46-
- AlicenseBqualityAmaintenanceMCP server for Beckhoff TwinCAT XAE / TE1000 Automation Interface, enabling control of XAE Shell, TwinCAT tree manipulation, PLC operations, and build actions via natural language.2515MIT
- AlicenseNot gradedqualityDmaintenanceEnables read-only access to Beckhoff TwinCAT PLCs via ADS, allowing queries of device info, symbols, variables, and EtherCAT diagnostics through natural language.8MIT