sn-mcp
This MCP server gives an AI assistant read/write access to a ServiceNow Personal Developer Instance across six domains (reports, incidents, users/groups, service catalog, change management, and knowledge base), with everything scoped to Basic Auth and a single service account.
Run read-only reports — pull
syslogwarnings/errors for a given day (get_syslog_report), and developer change activity grouped by author/update set over a date range (get_developer_work_report).Work incidents end-to-end — create, update, comment on (customer comment vs. internal work note), resolve with a resolution code, list with filters, or fetch by number like
INC0010001.Manage users and groups — create/update/fetch/list users (including role assignment, manager, department, password), create/update/list groups, and add or remove group members in bulk.
Administer the service catalog — browse items and categories, create/update categories, move items between categories, and create/update/list catalog item variables (form fields).
Get catalog optimization advice — though the
low_usage/high_abandonment/slow_fulfillmentoutput is randomly fabricated and must never be presented as real analysis.Handle change management — create/update/list/fetch change requests and their tasks, list and fetch changesets (update sets), create/update/commit changesets, and run approval flows.
Publish knowledge — create knowledge bases and categories, create/update articles, list/fetch articles, and change an article's workflow state.
Caveats worth knowing: several change-approval, changeset-publish, add-file-to-changeset, and article-publish tools are documented as likely to fail or silently no-op because of platform business rules, ACLs, or Flow Designer governance on this instance; list_* tools return one bounded page at a time rather than a full table; and the schema provided here covers 49 of the 78 tools the README describes (docs search, story/scrum/project, script include, and workflow tools aren't shown).
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., "@sn-mcpShow me update set changes from the last week."
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.
sn-mcp
Local MCP server for ServiceNow: 78 tools across 15 domains — incidents, changes, catalog, knowledge base,
users/groups, script includes, Agile (story/scrum task/project), classic Workflow, and the two original
on-demand reports the project started as. Most of that surface is a full read/write port of
echelon-ai-labs/servicenow-mcp, a larger Python/FastMCP
ServiceNow server. Built from a plan kept in the author's private Obsidian vault ("ServiceNow MCP Server —
Syslog & Dev Work Reports (Plan)"); the full read/write port that took this from 2 tools to 78 followed its
own separate plan, preserved at C:\Users\willr\.claude\plans\structured-spinning-rain.md. Setup narrative
and troubleshooting also live in that vault, in a matching "(Setup Guide)" note — not included in this repo.
Borrowed from the reference project: a remote-reachable HTTP transport alongside stdio (step 7 below) — it
exposes both stdio and SSE, this project uses stdio and the modern Streamable HTTP equivalent; ServiceNow's
own relative-date keywords informed comparing against this project's own date-range query style, which is
what originally surfaced the timezone bug described in step 4/Troubleshooting; and (from the full port) its
82-tool inventory across 14 domains, ported with full read/write parity per an explicit user decision — not
its AuthManager (Basic/OAuth/API-key behind one interface), which stays out of scope; this project remains
Basic-only.
Build history
Commit | What |
| Original build: |
| Batch 0+1 of 8 — write CRUD layer ( |
| Batch 2 of 8 — User & Group tools. |
| Batch 3 of 8 — Catalog tools. |
| Batch 4 of 8 — Change & Changeset tools. |
| Batch 5 of 8 — Knowledge Base tools. |
| Batch 6 of 8 — Story, Scrum Task & Project tools; epic tools dropped (see gap list below). |
| Batch 7 of 8 — Script Include tools. |
| Batch 8 of 8 (final) — classic Workflow tools; 3 tools dropped (see gap list below). Port complete: 76/82 reference tools shipped. |
| Full README documentation pass: per-domain tool reference, dropped-tool rationale, corrected account-provisioning guidance. |
Each batch was verified end-to-end through real MCP tool calls (not just direct function tests) before
committing — create/update/list at minimum, with test data tagged [MCP-TEST] and cleaned up afterward.
Full per-batch build notes, gotchas, and platform-specific findings live in project memory, not this file.
Of the reference's 82 tools, 76 were ported (giving 78 total with the 2 original report tools). 6 were deliberately not ported — not porting mistakes, each confirmed against this PDI's live schema before being dropped:
create_epic/update_epic/list_epics—rm_epicis not a valid table on this PDI (confirmed viasys_db_object; this instance's Agile plugin install is scrum-only, no Epic/Project-portfolio linkage).activate_workflow/deactivate_workflow—wf_workflowhas noactivefield on this PDI at all (confirmed by dumping every element on the table).reorder_workflow_activities—wf_activityhas noorderfield either; classic Workflow ordering here is driven by a visual transition graph, not a simple integer.
get_optimization_recommendations is ported but partially simulated — see its entry below.
percent_complete on the project tools is intentionally renamed from the reference's percentage_complete,
which is a genuine bug in the reference project (doesn't match the real pm_project column, so it silently
no-ops there). Full per-batch build notes, gotchas, and platform gaps live in project memory
(project_servicenow_mcp_reports.md) and in code comments at each domain file (src/tools/*.ts).
Related MCP server: ServiceNow MCP Server
Tools
Reports (read-only)
Both are read-only GET queries against the Table API — neither tool ever writes to the instance. Both
return raw/grouped rows only; analysis (suggested fixes, flagged concerns) happens in conversation with
Claude, not inside the tool. Both paginate automatically (queryTableAll in servicenow-client.ts, 1000
rows/page, 10,000-row safety cap) instead of a hardcoded single-page sysparm_limit — if a query hits the
cap, the response leads with an explicit ⚠ Truncated text block before the JSON, rather than silently
returning a partial report. Registered for both entrypoints from the same src/create-server.ts.
get_syslog_report
Fetch syslog rows for a single day, filtered to warning/error by default.
Parameter | Type | Required | Default | Notes |
|
| no | yesterday |
|
|
| no |
| Friendly names ( |
Returns a JSON array of:
{
"sys_created_on": "2026-08-25 17:30:24",
"message": "SG-Azure Request failed with statusCode: 403 Code: AccessDenied ...",
"source": "sn_sg_azure_integ",
"level": "2",
"node": "..."
}get_developer_work_report
Fetch sys_update_xml changes between two dates, grouped by author and update set.
Parameter | Type | Required | Default | Notes |
|
| yes | — |
|
|
| yes | — |
|
Returns a JSON array of:
{
"author": "system",
"updateSet": "Default",
"isDefaultUpdateSet": true,
"changeCount": 2,
"changes": [
{ "name": "...", "type": "Service Graph Connections State", "created": "2026-08-25 10:30:30" }
]
}ServiceNow Docs (src/tools/docs.ts + src/docs/docs-client.ts, 3 tools)
Read-only full-text search over the official ServiceNow product documentation, served from a local
SQLite FTS5 index (one ServiceNow release per index). The index is built by the one canonical
builder, ServiceNowDocs/tools/build_index.py — this server never re-implements indexing; it reads
the DB that builder produces, and (via docs_reindex) calls that builder to rebuild it.
One source of truth, no drift. The index shape — columns, porter unicode61 tokenizer, bm25
weights (title 10 > breadcrumb 6 > description 4 > body 1), and the query tokeniser — is
defined once in ServiceNowDocs/tools/index_schema.json. build_index.py and query_index.py read
it through index_schema.py; the builder also writes a copy (a sidecar, index_schema.json)
next to every DB it produces, and docs-client.ts reads that sidecar. So a DB always carries the
exact schema it was built with, and the TypeScript reader can never disagree with the Python builder.
If no sidecar/schema is found, the reader falls back to a built-in default that mirrors the JSON.
Every hit carries a citation URL baked into the index at build time
(https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/<branch>/<path>). Snippets are for
ranking only — call docs_get to read a doc in full before quoting it.
Env: SN_DOCS_DB (path to the docsearch.db; baked in the container, point at your checkout
locally), SN_DOCS_SCHEMA (schema location; defaults to the sidecar beside the DB), SN_DOCS_BRANCH
(release label for responses), and for docs_reindex: SN_DOCS_REPO (a ServiceNowDocs checkout),
SN_DOCS_BUILDER / SN_DOCS_PYTHON (overrides). See .env.example.
docs_search
Ranked full-text search. Returns hits with title, citation URL, path, publication, topic_type, last_updated, and a snippet.
Parameter | Type | Required | Default | Notes |
|
| yes | — | Plain query ANDs all terms; hyphens/colons are quoted for you. |
|
| no |
| 1–25. |
|
| no |
| Pass the query as literal FTS5 syntax ( |
docs_get
Fetch one indexed doc in full (frontmatter fields + body) by its repo-relative path from a
docs_search hit.
Parameter | Type | Required | Default | Notes |
|
| yes | — | e.g. |
docs_reindex
Rebuild the index by running build_index.py against a local ServiceNowDocs checkout, then reopen
the DB so searches use the fresh index. Takes minutes (~46k files). Needs SN_DOCS_REPO — not
available in the baked container image (it ships one release's index and drops the markdown tree).
Parameter | Type | Required | Default | Notes |
|
| no | checkout's git branch | Only stamps citation URLs. It does not switch release — |
Incident (src/tools/incident.ts, 6 tools)
assigned_to/assignment_group/caller_id accept a username, email, or sys_id, written as display
values. resolve_incident's resolution_code is a choice field — verified against sys_choice on this PDI
rather than guessed (see project memory for the confirmed value list).
Tool | Description |
| Create a new incident. |
| Update an existing incident (accepts sys_id or incident number). |
| Add a comment or work note to an incident. |
| Resolve an incident (sets state to Resolved with a resolution code and notes). |
| List incidents, most recent first. One bounded page per call, not the full table. |
| Fetch a single incident by its number (e.g. INC0010001). |
User & Group (src/tools/user.ts, 9 tools)
user_id/group_id accept a raw sys_id, username/email, or group name. Group-membership adds dedupe
against existing rows before inserting (a deliberate improvement over the reference, which doesn't).
Tool | Description |
| Create a new user. |
| Update an existing user (accepts sys_id, username, or email). |
| Fetch a single user by sys_id, username, or email. |
| List users, most recent first. One bounded page per call. |
| Create a new group, optionally with initial members. |
| Update an existing group (accepts sys_id or name). |
| Add one or more members to a group. |
| Remove one or more members from a group. |
| List groups. One bounded page per call. |
Catalog (src/tools/catalog.ts + catalog-variables.ts + catalog-optimization.ts, 11 tools)
get_optimization_recommendations is partially simulated: low_usage/high_abandonment/
slow_fulfillment are randomly fabricated (no real usage-tracking data source exists on this PDI, matching
the reference project's own use of Python's random), while inactive_items/description_quality reflect
real instance data — the whole response is still labeled simulated: true rather than splitting the
labeling per-type, a deliberate choice. Never present this tool's output as real analysis.
Tool | Description |
| List service catalog items. One bounded page per call. |
| Fetch a single catalog item by sys_id, including its variables (form fields). |
| List service catalog categories. One bounded page per call. |
| Create a new service catalog category. |
| Update an existing service catalog category. |
| Move one or more catalog items to a different category. |
| Create a new variable (form field) on a catalog item. |
| List the variables (form fields) defined on a catalog item. |
| Update an existing catalog item variable. |
| SIMULATED optimization recommendations — see note above. |
| Update an existing catalog item's core fields. |
Change & Changeset (src/tools/change.ts + changeset.ts, 15 tools)
Known platform gaps on this PDI (not porting bugs — confirmed empirically, documented in each tool's own
MCP description): submit_change_for_approval/approve_change/reject_change's state transitions are
blocked by a Change Model business rule, and sysapproval_approver.document_id doesn't persist via direct
write — approval records are meant to come from ServiceNow's own Approval Engine. add_file_to_changeset
is blocked by ACL on sys_update_xml. publish_changeset's "published" state doesn't exist as a
sys_update_set choice on this PDI (silently no-ops rather than erroring). All four tools are still
implemented as faithful ports — the gaps are platform behavior, not something this project codes around.
Tool | Description |
| Create a new change request. |
| Update an existing change request (accepts sys_id or change number). |
| List change requests. One bounded page per call. |
| Fetch a single change request with its associated change tasks. |
| Add a task to a change request. |
| Submit for approval. NOTE: may fail — see gaps above. |
| Approve a pending approval record and move to Implement. NOTE: may fail — see gaps above. |
| Reject a pending approval record and cancel the change. NOTE: may fail — see gaps above. |
| List changesets (update sets). One bounded page per call. |
| Fetch a single changeset with the changes it contains. |
| Create a new changeset. |
| Update an existing changeset (accepts sys_id or name). |
| Commit a changeset (sets state to complete). |
| Publish a changeset. NOTE: may silently no-op — see gaps above. |
| Add a file to a changeset. NOTE: often ACL-blocked — see gaps above. |
Knowledge Base (src/tools/knowledge-base.ts, 9 tools)
publish_article's direct workflow_state write silently reverts to draft on this PDI — modern instances
drive publish through Flow Designer (kb_publish_flow), not a bare Table API write; documented in the
tool's own description rather than fixed, since resolving the flow is out of scope. kb_category/
kb_knowledge_base block direct deletes via ACL even for this admin-scoped account — no cleanup path exists
through the Table API for those two tables.
Tool | Description |
| Create a new knowledge base. |
| List knowledge bases. One bounded page per call. |
| Create a new category in a knowledge base. |
| Create a new knowledge article. |
| Update an existing knowledge article. |
| Change an article's workflow state. NOTE: silently reverts to draft — see note above. |
| List knowledge articles. One bounded page per call. |
| Fetch a single knowledge article by sys_id. |
| List knowledge base categories. One bounded page per call. |
Story, Scrum Task & Project (src/tools/story.ts + scrum-task.ts + project.ts, 12 tools)
Epic tools and story.epic/story.project/scrum_task.type params dropped — see the top-of-file gap list.
percent_complete on the project tools is renamed from the reference's percentage_complete (a genuine bug
in the reference — that name doesn't match the real pm_project column).
Tool | Description |
| Create a new story. |
| Update an existing story (accepts sys_id or story number). |
| List stories. One bounded page per call. |
| List dependencies between stories. |
| Create a dependency between two stories. |
| Delete a story dependency record. |
| Create a new scrum task under a story. |
| Update an existing scrum task (accepts sys_id or scrum task number). |
| List scrum tasks. One bounded page per call. |
| Create a new project. |
| Update an existing project (accepts sys_id or project number). |
| List projects. One bounded page per call. |
Script Include (src/tools/script-include.ts, 5 tools)
Highest-care domain in this project — script is live, executable server-side JavaScript. Never write
code from an untrusted source through these tools. script_include_id accepts a name, or a sys_id prefixed
with sys_id: to bypass name lookup.
Tool | Description |
| List script includes (metadata only, not script bodies). One bounded page per call. |
| Fetch a single script include, including its full script body. |
| Create a new script include. WARNING: live executable code. |
| Update an existing script include. WARNING: live executable code. |
| Delete a script include. |
Workflow (src/tools/workflow.ts, 9 tools)
Classic Workflow — legacy, superseded by Flow Designer on modern instances. Confirmed live and queryable on
this PDI before porting. activate_workflow/deactivate_workflow/reorder_workflow_activities are not
ported — see the top-of-file gap list. add_workflow_activity's activity_type resolves by name against
wf_activity_definition (the real reference field), not a flat string as the reference project assumes.
Known reference-project gap, ported as-is: add_workflow_activity requires a real workflow_version_id
that no tool in this domain creates — create_workflow makes an empty wf_workflow row with no version;
get one via list_workflow_versions against a pre-existing workflow, or create one directly via the Table
API (not exposed as a tool here, matching the reference's own scope).
Tool | Description |
| List classic Workflow definitions. One bounded page per call. |
| Fetch a single workflow definition, optionally including its versions. |
| List the versions of a workflow. |
| Fetch activities for a workflow version, defaulting to the latest published version. |
| Create a new (empty) workflow definition. |
| Update an existing workflow definition (accepts name or sys_id). |
| Add an activity to a workflow version. See gap note above. |
| Update an existing workflow activity's name or extra fields. |
| Delete a workflow activity. |
1. Provision a ServiceNow service account (manual, one-time)
Do this in the PDI (https://dev203275.service-now.com), logged in as an admin:
User Administration → Users → New
User ID:
claude_mcp_readonlySet a password, uncheck "Password needs reset"
Check "Web service access only" — required. Without it, ServiceNow's
SNCRestrictBasicAuthUserAuthenticationGateblocks Basic Auth over REST for this account even with a correct password, because the account is also permitted interactive UI login. Symptom if missed: every REST call 401s with"User is not authenticated"while logging into the UI with the same credentials works fine. See Troubleshooting.
On that user record → Roles related list → Edit → add roles for whichever tools you actually need (see below).
Copy
.env.exampleto.envand fill inSN_USER/SN_PASSwith this new account.
Role scope has changed since the original 2-tool build. The account was originally intentionally
read-only (rest_api_explorer plus read access to syslog/sys_update_xml/sys_update_set). Once the
full read/write port (82 reference tools → 76 shipped) was added, the user explicitly decided to elevate
this same account — claude_mcp_readonly — with write roles rather than create a second dedicated write
account or reuse the separate admin claude_automation account (see project memory for the full decision
record). On this PDI, claude_mcp_readonly ended up carrying user_admin and admin — turned out to
already be present on this instance's default service-account role set, not something granted
incrementally batch-by-batch as the original plan assumed (confirmed via sys_user_has_role before each
batch, only surfaced to the user when a real 403 actually occurred). If provisioning this fresh on a new
instance: don't assume a broad role set will already be there — start read-only per the original steps
above if you only want the 2 report tools; grant roles per domain as each write tool is actually needed
(the account name stays misleading either way — renaming a live ServiceNow username is more hassle than
it's worth). Script include writes in particular are effectively code-execution capability and deserve the
most scrutiny of any grant in this project — see the Script Include tools section above.
2. Build
cd C:\Users\willr\projects\sn-mcp
npm install
npm run build3. Verify credentials before wiring into a client
$env:SN_INSTANCE="https://dev203275.service-now.com"; $env:SN_USER="claude_mcp_readonly"; $env:SN_PASS="<password>"
node -e "fetch(process.env.SN_INSTANCE+'/api/now/table/sys_user?sysparm_limit=1',{headers:{Authorization:'Basic '+Buffer.from(process.env.SN_USER+':'+process.env.SN_PASS).toString('base64')}}).then(r=>console.log(r.status))"Should print 200. If 401, check the password; if 403, the role doesn't cover that table yet.
4. syslog table name, level values, and date filtering (resolved)
Confirmed against this instance on 2026-08-26:
The table is
syslog, notsys_log(sys_logreturns400 Invalid table sys_log).syslog.levelis numeric, not the strings"warning"/"error":-2=Trace, -1=Debug, 0=Information, 1=Warning, 2=Error, 3=Fatal(confirmed viaGET /api/now/table/sys_choice?sysparm_query=name=syslog^element=level).The date-range filter must use plain literal datetimes (
'<date> 00:00:00'@'<date> 23:59:59'), notjavascript:gs.dateGenerate(...)— see Troubleshooting for why the latter silently shifted results onto the wrong day.
src/tools/syslog.ts maps friendly level names ("warning", "error", etc.) to these codes internally, so
callers can keep passing names — this only matters if you extend the tool or point it at a different
instance, where the mapping should be re-verified with the same sys_choice query.
5. Register with Claude Code CLI
claude mcp add --scope user sn-mcp -- "C:\Program Files\nodejs\node.exe" C:\Users\willr\projects\sn-mcp\dist\index.jsUse the absolute path to node.exe, not bare node — a Claude Code session started before Node was on
PATH won't be able to resolve a bare node command when spawning the server (claude mcp list will show
CONNECTION_CLOSED). Verify with claude mcp list.
Claude Code CLI reads SN_INSTANCE/SN_USER/SN_PASS from .env in this project folder — no extra env
config is needed on the CLI side as long as .env exists here. This relies on src/index.ts resolving
.env's path relative to the compiled script itself (import.meta.url), not process.cwd() — plain
import "dotenv/config" would fail, because Claude Code spawns this server from an unrelated working
directory. See Troubleshooting if .env ever seems to stop loading.
6. Register with Claude Desktop
Add to %APPDATA%\Claude\claude_desktop_config.json (created fresh — didn't exist on this machine):
{
"mcpServers": {
"sn-mcp": {
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": ["C:\\Users\\willr\\projects\\sn-mcp\\dist\\index.js"],
"env": {
"SN_INSTANCE": "https://dev203275.service-now.com",
"SN_USER": "claude_mcp_readonly",
"SN_PASS": "<password>"
}
}
}
}Desktop launches the server as its own process without inheriting this project's .env, so credentials
are repeated here explicitly. Restart Claude Desktop after editing, then check the 🔌 connector icon to
confirm it connected.
7. Optional: remote-reachable HTTP transport
Steps 5–6 use stdio, which only works for a client that can spawn a local process (Claude Code, Claude
Desktop). A client that can't — e.g. claude.ai's hosted Scheduled Tasks — needs an HTTP endpoint instead.
src/http.ts exposes the same two tools over MCP's Streamable HTTP transport at POST/GET /mcp.
npm run build
$env:MCP_HTTP_TOKEN="<pick something random>"; npm run start:httpDefaults: binds 127.0.0.1:3535 (override with MCP_HTTP_HOST / MCP_HTTP_PORT in .env). If
MCP_HTTP_TOKEN is set, every request must send Authorization: Bearer <token> or gets 401; if unset,
the server logs a warning and accepts unauthenticated requests — fine while bound to localhost only, not
fine if this ever sits behind a public tunnel. createMcpExpressApp() (from the SDK) also enables DNS-rebinding
protection automatically whenever bound to a localhost host.
To actually reach this from claude.ai's hosted Scheduled Tasks, 127.0.0.1 isn't enough — it needs a
public URL (e.g. a tunnel: ngrok http 3535, or a real deployment). That's a separate step, not done here;
this just adds the capability. Smoke test locally first:
curl.exe -s -X POST http://127.0.0.1:3535/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -H "Authorization: Bearer $env:MCP_HTTP_TOKEN" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoketest","version":"0.0.1"}}}'Should return 200 with a mcp-session-id response header and a JSON-RPC result body.
Troubleshooting
401 on every REST call despite a correct password, but logging into the ServiceNow UI with the same credentials works — this is
SNCRestrictBasicAuthUserAuthenticationGate: it blocks Basic Auth over REST for accounts that can also log in interactively. Fix: check "Web service access only" on the user record (step 1). Don't waste time resetting the password again — that pattern (UI login OK, REST 401,"User is not authenticated"/"Required to provide Auth information") is this gate, not a bad credential. Diagnosable directly from System Logs (/syslog_list.do, filter for the account name).Invalid table sys_log(HTTP 400) — the table issyslog, no underscore.Report comes back empty even though logs exist for that day —
levelis numeric on this instance (see step 4), not the strings"warning"/"error". Re-check the mapping via thesys_choicequery if pointing this at a different instance.Missing SN_INSTANCE, SN_USER, or SN_PASS environment variables"when launched as a real MCP server, even though.envexists and a directnode dist/index.jstest from this folder works fine — that direct test succeeds because itsprocess.cwd()happens to be the project folder; Claude Code launches the server from elsewhere, so plaindotenv/configfails silently. Confirmsrc/index.tsresolves.envviaimport.meta.url, not cwd (see step 5). Always verify with a real MCP tool call, not just a direct script run — the two can disagree.get_syslog_reportsilently returns the wrong day / is missing several hours — was a real bug, found 2026-08-26 via a spot-check comparison against echelon-ai-labs/servicenow-mcp's query patterns.src/tools/syslog.tsused to build the date filter withsys_created_onBETWEENjavascript:gs.dateGenerate('<date>','00:00:00')@javascript:gs.dateGenerate(...).gs.dateGenerate()evaluates in the instance's configured timezone, butsys_created_oncomes back as a raw UTC value over the Table API — so the window was silently offset by the instance's UTC delta (~7h on this PDI), pulling in the tail of the wrong day and missing early hours of the right one. Fixed by dropping thejavascript:gs.dateGenerate(...)wrapper entirely and passing plain literal'<date> 00:00:00'@'<date> 23:59:59'strings, which compare directly against the raw stored value with no timezone conversion. Verified: 834 rows across all 24 hours for 2026-08-25, vs. 366 rows across 17 hours before the fix. If this instance's timezone config ever changes, re-verify with the same full-hour-coverage check (see step 4-style spot check) rather than assuming.CONNECTION_CLOSEDinclaude mcp list— the CLI session started before Node.js was on PATH. Register withnode.exe's absolute path (already done in step 5) or start a fresh session.Edited the code, rebuilt, but behavior didn't change — an already-running Claude Code session keeps the old
dist/loaded over its stdio connection. Run/mcpin that session to reconnect; no restart needed.
Files
src/servicenow-client.ts— Table API wrapper (Basic Auth):queryTable/getRecord/createRecord/updateRecord/deleteRecord, plusqueryTableAll, the "fetch everything up to a safety cap" pagination loop the two report tools use (1000 rows/page, 10,000-row safety cap, returns{ rows, truncated }) — not used by anylist_*tool, which paginate one caller-controlled page at a time via plainqueryTable. Swap Basic Auth for OAuth here later if moving off the PDI.src/register-tool.ts—registerTool()/jsonResult(): shared response framing (JSON content block, prepends a⚠ Truncatednote when a result carries{truncated: true}) so every domain file doesn't hand-roll it.src/tools/shared.ts— cross-domain helpers:resolveUserSysId/resolveRoleSysId/resolveGroupSysId/assignRoleToUser(user/group/role lookups, reused byuser.tsand beyond) andbuildTimeframeQuery(theupcoming/in-progress/completedfilter shared bychange.ts/story.ts/scrum-task.ts/project.ts— deliberately built from a literal UTC timestamp, notjavascript:gs.now(), to avoid the timezone bug class described in Troubleshooting below).src/tools/syslog.ts,src/tools/dev-work-report.ts— the two original report queries.src/tools/incident.ts,user.ts,catalog.ts,catalog-variables.ts,catalog-optimization.ts,change.ts,changeset.ts,knowledge-base.ts,story.ts,scrum-task.ts,project.ts,script-include.ts,workflow.ts— the 76 ported tools, one file per reference domain; see the Tools section above for what's in each and project memory for the batch-by-batch build history.src/create-server.ts— builds anMcpServerand registers all 78 tools, grouped by domain with a comment header per section; shared by both entrypoints below.src/index.ts— stdio entrypoint (Claude Code/Desktop); resolves.envrelative to itself (not cwd).src/http.ts— Streamable HTTP entrypoint (step 7); bearer-token auth, one server+transport per session.
Available Tools
52 toolsadd_change_taskC
Add a task to a change request.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | sys_id or change number | |
| assigned_to | No | Username, email, or sys_id | |
| description | No | ||
| planned_end_date | No | YYYY-MM-DD HH:MM:SS | |
| short_description | Yes | ||
| planned_start_date | No | YYYY-MM-DD HH:MM:SS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Add a task' implies mutation but the description discloses nothing about validation behavior (e.g., what happens if the change_id doesn't exist), authorization requirements, or whether the change request itself is modified. Minimal disclosure relative to an un-annotated mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that names the action with zero filler words. It earns its place. Not a 5 because for a 6-parameter mutation tool the brevity crosses into under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 6-parameter mutation tool with no annotations and no output schema, yet the description is only 7 words. It omits return values, validation/error behavior, task semantics, and any prerequisites. Insufficient for an agent to call it correctly in full 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 67% (4 of 6 parameters documented). The description adds zero parameter meaning and does not compensate for the two undocumented parameters (description, short_description), which remain unexplained in both places. At moderate coverage the description provides no additional value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Add a task to a change request' states a specific verb (add), resource (task), and target (change request). It distinguishes from siblings like create_change_request and add_comment because the resource and destination object are explicit. It's not a 5 because it doesn't explicitly position itself against the other change-management tools, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs. alternatives. No mention of prerequisites, exclusions, or how this differs from update_change_request, add_comment, or other change-related siblings. The agent must infer the appropriate call context 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.
add_commentB
Add a comment or work note to an incident.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | ||
| incident_id | Yes | sys_id or incident number | |
| is_work_note | No | true = internal work note, false = customer-visible comment (default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it adds a comment or work note, but doesn't mention permissions, reversibility, side effects on the incident, or what the response looks like. Minimal behavioral info.
Agents need to know what a tool does to the 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, clear sentence that is front-loaded with the action and resource. No wasted words or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 3 parameters and no output schema, the description is incomplete. It doesn't explain the difference between comment and work note in practice, any prerequisites, or expected return values. An agent would need to guess about these aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (incident_id and is_work_note are documented, comment is not). The tool description adds no parameter meaning beyond the schema. The comment parameter remains undocumented, and the description does not compensate for that 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 clearly states the verb 'Add' and the resource 'comment or work note to an incident', which is specific and distinct from sibling tools like resolve_incident or update_incident. It distinguishes the two modes (comment vs work note) which is helpful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance on when to use this tool versus other incident-related tools, nor does it indicate when to use a comment versus a work note. This is left entirely to the agent's inference from the parameter descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_file_to_changesetB
Add a file (sys_update_xml record) to a changeset. NOTE: sys_update_xml often blocks direct inserts via ACL (confirmed on this PDI) since it normally holds system-generated content.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| changeset_id | Yes | sys_id or name of the changeset | |
| file_content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses a known failure mode (ACL blocking on sys_update_xml inserts), which is valuable. However, it does not describe the success behavior, return value, side effects, or permissions required beyond that caution, leaving significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. The core action and record type are front-loaded, and the critical ACL warning is concise and useful. Every word earns its place, making it a model of efficient 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?
For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks information about what the tool returns, how to format the file content, what constitutes a valid file_path, and any additional restrictions beyond the ACL note. An agent would have to guess or experiment to use it correctly, which is inadequate given 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 only 33% (only changeset_id is described). The description does not explain file_path or file_content semantics at all, nor does it add detail about the changeset_id. The phrase 'Add a file' implies the parameters but provides no format, constraints, or examples. The description fails to compensate for the low schema 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 clearly states the action: add a file (a sys_update_xml record) to a changeset. It specifies the resource and the specific record type, making the tool's function distinct from similar sibling tools like update_changeset or commit_changeset. However, it does not explicitly name alternatives or draw a contrast, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings. It does not mention any prerequisites or situations where this tool is preferred. The note about ACL blocking is a caution, not a usage guideline, and does not help an agent decide between this and other changeset-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_group_membersA
Add one or more members to a group.
| Name | Required | Description | Default |
|---|---|---|---|
| members | Yes | Usernames, emails, or sys_id:<id>-prefixed sys_ids | |
| group_id | Yes | Group name or sys_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Add one or more members' without explaining side effects such as handling of duplicates, nonexistent groups, or idempotency. It also omits any mention of return values or error conditions, which is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and contains no filler. Every word earns its place, making it highly 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 simple two-parameter mutation, the description is minimally adequate. However, it lacks any mention of return values, error handling, or prerequisites such as group existence. Since there is no output schema, the description should at least hint at expected outcomes, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover both parameters fully (100% coverage), so the tool description adds no additional parameter information. The baseline of 3 applies because the schema already documents the accepted formats and meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Add one or more members to a group' uses a specific verb and resource, clearly distinguishing it from the sibling remove_group_members. The intent is unambiguous and directly states the action performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the use case (adding members to a group) but does not explicitly mention when not to use it or list alternatives like remove_group_members. Context is sufficient, but exclusions are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_changeA
Approve a change request's pending approval record and move the change to Implement. NOTE: may fail on instances with Change Model governance — confirmed on this PDI.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | sys_id or change number | |
| approver_id | No | Username, email, or sys_id of the approver | |
| approval_comments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the side effect (moving to Implement) and a known failure condition (Change Model governance), which is useful. However, it does not mention permissions, reversibility, or what happens if the approval is already processed, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action is front-loaded, and the critical failure note is appended succinctly. Every word 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 simple tool with three parameters and no output schema, the description covers the core action and a key risk. It could be more explicit about prerequisites (e.g., change must be in pending approval status) but the 'pending approval record' phrasing implies this condition. Overall, it is mostly 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 67% (change_id and approver_id have descriptions; approval_comments does not). The description does not add any parameter-specific meaning beyond the schema, so it sits at the baseline for moderate 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 ('Approve') and resource ('a change request's pending approval record') and includes the outcome ('move the change to Implement'). This clearly distinguishes it from siblings like reject_change (opposite action) and submit_change_for_approval (submission 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?
The description implies the use case (approving a pending approval) but does not explicitly contrast with alternatives such as reject_change or explain when to avoid this tool. The governance failure note is a caution, not a usage guideline, and no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commit_changesetC
Commit a changeset (sets state to complete).
| Name | Required | Description | Default |
|---|---|---|---|
| changeset_id | Yes | sys_id or name of the changeset | |
| commit_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the operation sets state to complete, which is a key side effect, but it does not mention whether the operation is destructive, requires approval, is reversible, or has any other consequences. For a finalizing action, this is minimal and incomplete.
Agents need to know what a tool does to the 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 sentence with no fluff, front-loading the action and outcome. It is efficiently structured, though it is so brief that it borders on under-specification. Still, the conciseness itself is appropriate; the issue lies in missing content rather than unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of publish_changeset and update_changeset as siblings, the description lacks enough context to distinguish when to commit vs. publish or update. It also doesn't mention return values or side effects beyond the state change. For a tool with side effects and no annotations, this is incomplete for an agent to use 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?
The schema description coverage is only 50% (changeset_id has a description, commit_message does not). The tool description adds no parameter-level meaning and does not compensate for the missing documentation of commit_message. An agent would not know what commit_message is for or whether it is required or optional from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Commit' and resource 'changeset', and adds a parenthetical that it sets state to complete, which provides a specific outcome. While it doesn't explicitly differentiate from publish_changeset or update_changeset, the state-change detail gives a clear functional identity. Not a tautology; it adds meaningful information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the closely related publish_changeset or update_changeset. The description does not mention prerequisites, conditions, or alternatives. The agent is left to infer usage context from the name alone, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_articleC
Create a new knowledge article.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Main body, HTML or wiki markup depending on article_type | |
| title | Yes | Title of the article — always wins over short_description if both are given, matching the reference project's own behavior | |
| category | Yes | Category title or sys_id | |
| keywords | No | ||
| article_type | No | HTML or Wiki | HTML |
| knowledge_base | Yes | Knowledge base title or sys_id | |
| short_description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Create a new knowledge article' and reveals nothing about side effects, required permissions, or what counts as a successful creation. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise in length but severely under-specified. It omits essential context, making it an under-specification rather than a model of 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?
With 7 parameters (5 required), no output schema, and no annotations, the description is far too minimal. An agent cannot infer what constitutes a valid article, what fields are required beyond the schema, or what to expect in response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, partially documenting parameters like title, text, category, article_type, and knowledge_base, but keywords and short_description remain undocumented. The description adds no additional meaning about parameters, so it does not 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?
The description 'Create a new knowledge article' states a specific verb and resource, making the core purpose clear. However, it does not differentiate from sibling tools like update_article or publish_article, so it lacks explicit 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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, conditions, or when not to use it, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_catalog_categoryC
Create a new service catalog category.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | ||
| order | No | ||
| title | Yes | ||
| active | No | ||
| parent | No | Parent category title or sys_id | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose all behavioral traits. It only states that a category is created, implying mutation but giving no details on side effects, permissions, idempotency, or return behavior. This is inadequate 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?
The description is a single, front-loaded sentence with no fluff. It is appropriately brief, though the brevity borders on under-specification rather than effective 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?
For a tool with 6 parameters, no output schema, and no annotations, this description is severely incomplete. It provides no information on return values, required fields beyond what the schema already shows, or any operational context needed to correctly invoke the 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 only 17% (only 'parent' has a description), yet the description adds no parameter information whatsoever. It does not compensate for the five undocumented parameters, leaving the agent without meaning for title, icon, order, active, or description beyond their types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new service catalog category' clearly states a specific verb (create) and resource (service catalog category). It is distinguishable from the sibling 'create_category' by the explicit 'service catalog' qualifier, though it does not actively contrast itself against that similar 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?
No guidance is provided on when to use this tool versus alternatives like 'create_category' or other create operations. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_catalog_item_variableC
Create a new variable (form field) on a catalog item.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | ||
| min | No | ||
| name | Yes | Internal name of the variable | |
| type | Yes | Variable type, e.g. string, integer, boolean, reference | |
| label | Yes | Display label (question text) | |
| order | No | ||
| help_text | No | ||
| mandatory | No | ||
| max_length | No | ||
| description | No | ||
| default_value | No | ||
| catalog_item_id | Yes | sys_id or name of the catalog item | |
| reference_table | No | For reference-type variables, the table to reference | |
| reference_qualifier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description should disclose behavioral traits such as mutating effects, potential errors, or validation requirements. The description only states the action without any behavioral details. It does not mention permissions, idempotency, or consequences. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that succinctly states the tool's purpose with no fluff. It is front-loaded with the primary action and resource. However, it is perhaps too terse given the tool's complexity, though conciseness itself is not penalized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 14 parameters, no output schema, and no annotations, the description is severely incomplete. It lacks information about how to use the tool effectively, what the expected inputs are, or what happens after creation. The description provides no context beyond the basic purpose, which is insufficient for an agent to call this tool correctly without additional 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?
The description does not elaborate on any parameters. The input schema has only 36% description coverage, leaving many parameters (max, min, order, help_text, mandatory, max_length, default_value, reference_qualifier) undocumented. The description does not compensate for this gap, providing no guidance on required vs optional fields or relationships between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create) and the resource (a new variable/form field on a catalog item). While it doesn't explicitly name sibling tools, the verb and object differentiate it from list/update operations. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for adding new variables, but provides no explicit guidance on when to choose this over update_catalog_item_variable or list_catalog_item_variables. No alternative tools are mentioned, and no conditions are given. Usage is only implied by the word 'Create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_categoryB
Create a new category in a knowledge base.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| active | No | ||
| description | No | ||
| parent_table | No | Table name where the parent category is defined | |
| knowledge_base | Yes | Knowledge base title or sys_id | |
| parent_category | No | Parent category title or sys_id, for a subcategory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It only states the action without mentioning side effects, permissions, uniqueness constraints, or response behavior. For a mutation tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at one sentence, which is efficient. However, it is under-specified rather than concise in a valuable way—it could include a brief note on parameters or usage. Still, it has no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, no output schema, and no annotations, the description is too sparse. An agent would not know what the tool returns (e.g., created category details), how errors are handled, or the difference from catalog categories. Additional context is needed 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 only 50%, and the description adds no parameter-level meaning beyond the schema. Three parameters (title, active, description) are undocumented in the schema, and the description does not help clarify them. 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?
The description clearly states the verb 'Create' and the resource 'a new category in a knowledge base', which distinguishes it from siblings like create_catalog_category and create_knowledge_base. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for creating categories within a knowledge base context, which is clear enough. However, it does not explicitly mention when to use this tool versus the similar create_catalog_category, nor any exclusions or prerequisites. Some guidance on distinguishing from catalog categories would improve it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_change_requestC
Create a new change request.
| Name | Required | Description | Default |
|---|---|---|---|
| risk | No | ||
| type | Yes | normal, standard, emergency, or model | |
| impact | No | ||
| category | No | ||
| end_date | No | YYYY-MM-DD HH:MM:SS | |
| start_date | No | YYYY-MM-DD HH:MM:SS | |
| description | No | ||
| requested_by | No | Username, email, or sys_id | |
| assignment_group | No | Group name or sys_id | |
| short_description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits but does so not at all. It does not mention side effects (e.g., triggering approval workflows, sending notifications), required permissions, or constraints. The single sentence only states the action without any behavioral implications, leaving the agent blind to consequences.
Agents need to know what a tool does to the 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 wasted words. It is appropriately concise in terms of verbosity, but this brevity comes at the cost of missing essential information. Conciseness itself is handled well; the lack of content is penalized under 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?
For a tool with 10 parameters, no output schema, and no annotations, this description is grossly incomplete. It fails to explain what the tool returns, any required fields beyond the schema, or operational context such as whether the change request is immediately effective. An agent cannot call it correctly with only this information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, so the description must compensate by explaining parameter meanings or usage. It does not. The description adds nothing beyond the schema's own partial descriptions. For example, it does not clarify how risk/impact are used or how to format dates beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (create) and resource (change request), which straightforwardly indicates the tool's purpose. It implicitly differentiates from sibling tools like update_change_request or list_change_requests, though it does not explicitly name them. The purpose is unambiguous but lacks any nuance or scope details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance on when this tool should be used relative to alternatives. There is no mention of prerequisites, typical scenarios, or exclusions (e.g., when to use create_incident instead). An agent must infer usage purely from the tool name, which is insufficient for distinguishing among many creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_changesetC
Create a new changeset (update set).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| developer | No | Username or sys_id | |
| application | Yes | Application name or sys_id | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Create a new changeset,' which is a restatement of the tool's name and adds minimal new information beyond the parenthetical 'update set.' It does not mention permissions required, whether the operation is reversible, what the response contains, or any side effects. For a write operation with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence with no redundant words. The verb and resource are front-loaded, making it instantly scannable. However, its brevity borders on under-specification—it is concise but lacks valuable context that could be added without much length, so it does not earn the highest 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?
For a simple creation tool with no annotations and no output schema, the description leaves agents without essential context. There is no mention of what the tool returns, whether it requires any prerequisites (e.g., an existing application), or how it relates to the change-management workflow (e.g., that it precedes commit/publish). Given the absence of annotations and output schema, the description should carry more explanatory weight than it does.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 50% (developer and application have descriptions, but name and description do not). The tool description adds no parameter information whatsoever—it merely restates the action. Since the description does not compensate for the half of parameters that lack schema descriptions, and provides no additional context for any parameter, it falls below the baseline 3 expected for moderate 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 clearly states the action ('Create') and the resource ('a new changeset'), and even provides a parenthetical clarification that a changeset is an 'update set.' This is specific and unambiguous, and it distinguishes the tool from sibling operations like update_changeset, commit_changeset, and publish_changeset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention that this is only for creating new changesets and that update_changeset should be used for modifications, or that commit_changeset follows creation. The description implicitly suggests creation, but an agent gets no explicit routing instructions relative to the many related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_groupC
Create a new group, optionally with initial members.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | ||
| No | |||
| active | No | ||
| parent | No | Parent group name or sys_id | |
| manager | No | Username or sys_id of the group manager | |
| members | No | Usernames, emails, or sys_id:<id>-prefixed sys_ids to add as members | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states the obvious creation action and optional member inclusion; it does not mention side effects, permission requirements, duplicate name handling, default values for fields like 'active' or 'type', or the result of the operation. This is minimal but not misleading.
Agents need to know what a tool does to the 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 concise and front-loaded, but it is under-specified. While it avoids verbosity, the brevity leads to missing critical details about parameters and behavior, making it minimal rather than appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 8 parameters and no output schema or annotations, the description is notably incomplete. It does not explain the purpose of most parameters, clarify required versus optional fields beyond the schema, or describe the expected response or errors. An agent would lack enough context to call this tool correctly and may need to inspect the schema and 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 only 38% (3 of 8 parameters have descriptions). The tool description adds no explanation for parameters like 'type', 'email', 'active', or 'description', and only implicitly references 'members'. It does not compensate for the low schema coverage, leaving agents without understanding of required or optional fields beyond 'name' being required.
Input schemas describe structure but not intent. Descriptions should explain 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 action ('Create a new group') and the optional ability to include initial members, which distinguishes it from update_group and add_group_members. It is specific, unambiguous, and names the primary resource and operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus related siblings such as update_group, add_group_members, or remove_group_members. The description does not mention alternatives or conditions for selecting this tool over others, leaving the agent to infer usage solely from the verb 'create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_incidentC
Create a new incident.
| Name | Required | Description | Default |
|---|---|---|---|
| impact | No | ||
| urgency | No | ||
| category | No | ||
| priority | No | ||
| caller_id | No | Username, email, or sys_id of the caller | |
| assigned_to | No | Username, email, or sys_id | |
| description | No | ||
| subcategory | No | ||
| assignment_group | No | Group name or sys_id | |
| short_description | Yes | Short summary of the incident |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Create a new incident' gives no information about side effects (e.g., whether it triggers notifications, requires specific permissions, or is irreversible), return value, or failure modes. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, making it front-loaded and free of fluff. However, it is under-specified to the point of being minimally informative. It is not overly verbose, but the extreme brevity reduces its usefulness, warranting a middle score rather than a high one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters, no output schema, and zero annotations, this description is severely incomplete. The agent has no idea what inputs are essential beyond the one required field, what the response will look like, or what behaviors result from creation. It fails to provide any necessary context for reliable 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 only 40%, with descriptions for only 4 of 10 parameters (caller_id, assigned_to, assignment_group, short_description). The tool description adds nothing about parameter meaning, formats, or relationships. Since schema coverage is low, the description should compensate but fails to, leaving the agent to guess about fields like impact, urgency, and priority.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Create') and resource ('a new incident'), making it obvious what the tool does. However, it does not differentiate from sibling tools like update_incident or resolve_incident, relying on the tool name's distinctiveness. The verb and resource are specific enough for a 4, but the lack of differentiation prevents a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. No mention of prerequisites (e.g., requiring a user or assignment group), nor when to choose create over update or resolve. The description is a bare imperative with no context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_knowledge_baseD
Create a new knowledge base.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Admin user or group name | |
| title | Yes | ||
| managers | No | Group name of users who can manage this knowledge base | |
| description | No | ||
| retire_workflow | No | Knowledge - Instant Retire | |
| publish_workflow | No | Knowledge - Instant Publish |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states 'create', which implies mutation, but does not mention side effects, required permissions, potential failures, or what happens on success. The description adds no value beyond the name, failing to inform the agent about the operation's actual behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, but it is under-specified rather than appropriately concise. It omits essential information about parameters and creation semantics, so the brevity is a deficiency, not a strength. There is no front-loading of actionable content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters, a required field, no output schema, and no annotations. The description provides none of the necessary context—what a knowledge base is, how parameters affect the creation, what the response contains, or any side effects. This is completely inadequate for an agent to correctly invoke the 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 only 33% (owner and managers have descriptions, but title, description, retire_workflow, and publish_workflow do not). The tool description itself mentions no parameters or their meanings, so it does not compensate for the schema's gaps. An agent has no idea what 'title' or 'retire_workflow' represent.
Input schemas describe structure but not intent. Descriptions should explain 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 'Create a new knowledge base' is essentially a rephrasing of the tool name 'create_knowledge_base'. It restates the verb and resource without adding any distinguishing information about the knowledge base's purpose or scope, making it a borderline tautology rather than a clear, standalone definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., list_knowledge_bases for reading, create_article for content). It lacks any context about prerequisites, conditions, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_userC
Create a new user.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| phone | No | ||
| roles | No | Role names to assign after creation | |
| title | No | ||
| active | No | ||
| manager | No | Username or sys_id of the user's manager | |
| location | No | ||
| password | No | ||
| last_name | Yes | ||
| user_name | Yes | ||
| department | No | Department name or sys_id | |
| first_name | Yes | ||
| mobile_phone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, yet it only states the action without mentioning side effects, permissions, or any constraints (e.g., mandatory fields, possible duplicates). This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundant information, achieving maximum brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 13 parameters, no output schema, and no annotations, the description is far too minimal. It omits return values, error conditions, and any operational context, making it incomplete for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 23%, and the tool description adds no parameter information beyond what the schema already provides. Many parameters lack descriptions, and the tool description does not compensate, leaving agents to guess semantics like 'manager' expecting a sys_id or username.
Input schemas describe structure but not intent. Descriptions should explain 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's function—creating a new user—which is distinct from sibling tools like update_user and get_user. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives, such as update_user for existing users, nor any prerequisites like authentication or data requirements. This leaves the agent to infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_articleB
Fetch a single knowledge article by sys_id.
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | Yes | sys_id of the article |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of behavioral disclosure. 'Fetch' implies a read operation, but it does not state what happens when the sys_id does not exist, whether the result exposes variables/body content, or any other non-obvious behavior. Safety cannot be inferred from structured data here, leaving a gap despite the operation being a simple retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero wasted words, fully front-loaded with the subject and intent. Every element earns its place and no filler 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?
For a simple single-fetch tool with one schema-covered parameter and no output schema, the one-liner is largely sufficient. It is missing only marginal details such as the not-found behavior and explicit differentiation from sibling retrieval tools, which keeps it just short of 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 100% — the parameter article_id is already documented as 'sys_id of the article'. The description's mention of 'by sys_id' restates what the schema conveys without adding syntax, constraints, or format details, so it does not meaningfully exceed the baseline it is already 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?
'Fetch a single knowledge article by sys_id' names a specific verb (Fetch), a resource (knowledge article), a cardinality (single), and an accessor (sys_id). It clearly distinguishes itself from the sibling list_articles by the 'single' qualifier, so an agent can tell this from list/create/update/publish variants without extra 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?
No guidance is provided on when to choose this tool over alternatives such as list_articles for multiple articles or get_catalog_item for a different resource type. There are no exclusions, prerequisites, or situational notes, so the agent must infer usage context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalog_itemA
Fetch a single catalog item by sys_id, including its variables (form fields).
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | Catalog item sys_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly indicates a read operation ('Fetch') with no side effects, and specifies the returned data includes variables. While it doesn't disclose error handling or exact return structure, for a simple single-object fetch it is adequately transparent. No contradictions with annotations (none exist).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential action, scope, and included data with no wasted words. It is efficient and easily parsed by 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?
For a simple single-parameter read tool with high schema coverage and no output schema, the description gives enough context: what it fetches and what is included. It could specify the return format or behavior on missing items, but those are minor gaps given the tool's simplicity. The distinction from sibling variable tools is also clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the only parameter 'item_id' with the description 'Catalog item sys_id' (100% coverage). The tool description adds no extra meaning about the parameter beyond what the schema provides, so it meets the baseline of 3 without bonus 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 clearly states the verb 'Fetch', the resource ('a single catalog item'), and the distinguishing scope ('by sys_id, including its variables (form fields)'). It differentiates from siblings like list_catalog_items (which lists many) and list_catalog_item_variables (which lists variables separately), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: when you need a complete single catalog item with its variables. It contrasts with list_catalog_items and list_catalog_item_variables by stating the inclusion of variables, giving context for when to select this tool. However, it does not explicitly state when NOT to use it or mention alternatives by name, 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.
get_change_request_detailsB
Fetch a single change request with its associated change tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | sys_id or change number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It indicates a read operation ('Fetch') and implies a safe, non-destructive action, but it does not describe edge cases (e.g., what happens if the change_id is invalid) or any limitations. While the description is not misleading, it adds minimal behavioral context beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action and resource. It is concise with no redundant wording, though it could potentially be more detailed without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, no output schema), the description is minimally sufficient. It states the tool's output (change request with tasks) but does not cover error scenarios or any special conditions. For a simple getter this is adequate, but it leaves out nothing critical. The lack of an output schema means the description does not need to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single parameter (change_id) as 'sys_id or change number' with 100% coverage. The description adds no additional parameter-specific meaning, so the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain 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 action (Fetch) and the resource (single change request) and specifies that it includes associated change tasks. This distinguishes it from list_change_requests which fetches multiple, so the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like list_change_requests or get_changeset_details. There is no mention of preferred contexts, exclusions, or when the list variant should be chosen, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changeset_detailsA
Fetch a single changeset with the changes (sys_update_xml rows) it contains.
| Name | Required | Description | Default |
|---|---|---|---|
| changeset_id | Yes | sys_id or name of the changeset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Fetch' implies a read operation, and the description discloses that it returns the changes (sys_update_xml rows), which is useful behavioral context. However, it does not explicitly state that the operation is read-only, does not mention permissions, error cases, or the full response structure. The description is adequate but not rich in behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and result. Every word contributes value, with no fluff or redundant phrasing. It is concise without sacrificing the key 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?
For a simple single-fetch tool with one parameter, the description covers the essential purpose and the inclusion of changes. It does not specify the full return structure, but given the lack of an output schema, it still gives enough for an agent to call it correctly. Minor gaps like error handling and response format do not significantly hinder correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple 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 100% — the only parameter changeset_id already has a clear description ('sys_id or name of the changeset'). The tool description adds no additional semantic detail beyond the schema; it does not clarify preferred format, validation, or edge cases. Since the schema covers the parameter fully, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch'), a specific resource ('a single changeset'), and clarifies that it includes the changes as sys_update_xml rows. This clearly distinguishes it from sibling tools like list_changesets (which lists many), update_changeset (which modifies), and commit/publish (which are mutations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. It does not mention that list_changesets is for listing multiple changesets or that update_changeset is for modifications, nor does it state criteria for choosing this tool. The purpose implies it is for retrieving details of a single changeset, but the description leaves this entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_developer_work_reportA
Fetch developer work (sys_update_xml changes) between two dates, grouped by author and update set. Returns structured rows only — the caller (Claude) flags concerns narratively (e.g. changes in the Default update set, unnamed sets, unusually large sets, off-hours activity).
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date, YYYY-MM-DD | |
| start_date | Yes | Start date, YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It explicitly states the tool returns structured rows only and that the caller flags concerns narratively, clarifying that it does not perform analysis. The 'Fetch' verb implies read-only behavior, but it does not detail error handling or rate limits, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both necessary: the first establishes the tool's purpose and grouping; the second clarifies the return behavior and division of responsibility. No wasted words, and the key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 omits details about the exact fields in the structured rows. While it indicates grouping by author and update set, it does not specify metrics like change counts or sizes. Since there is no output schema, an agent may not know the shape of the returned rows. The two-parameter simplicity helps, but more detail would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters documented as YYYY-MM-DD dates. The description adds only that they are 'between two dates,' which is redundant. Per rubric, high schema coverage yields a baseline of 3, and the description adds no meaningful new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (fetch), a precise resource (developer work, sys_update_xml changes), a date range, and grouping by author and update set. This clearly distinguishes it from sibling tools like get_syslog_report or get_optimization_recommendations, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for analyzing developer work between dates and notes that the caller handles narrative analysis, but it does not explicitly state when to prefer this tool over alternatives (e.g., get_syslog_report) or when not to use it. It provides context but lacks explicit exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incident_by_numberA
Fetch a single incident by its number (e.g. INC0010001).
| Name | Required | Description | Default |
|---|---|---|---|
| incident_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the operation is a fetch (implying read-only), but does not disclose error behavior (e.g., not-found handling), pagination, or any side effects. It adds minimal behavioral context beyond the name and 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?
A single, front-loaded sentence with no filler. Every word earns its place, and the example is integrated naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 one simple parameter and no nested objects, and given the tool's name implies the return type (the incident itself), the description is sufficiently complete for correct invocation. It does not explicitly state the return format, but the omitted details are minor for such a straightforward getter.
Complex tools with many parameters or behaviors need more documentation. Simple 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 provides a concrete example format ('INC0010001'), which adds meaningful guidance beyond the raw schema. It lacks details like validation rules or behavior on invalid input, but for a single required parameter, this is helpful.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Fetch'), a specific resource ('a single incident'), and the key identifier ('by its number'), with an example format. This clearly distinguishes it from sibling tools like list_incidents (which fetches multiple) and create/update/resolve (which mutate).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a specific incident number, and the contrast with list_incidents is self-evident. However, it does not explicitly mention when not to use it or name alternative tools, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_optimization_recommendationsA
SIMULATED catalog optimization recommendations — low_usage/high_abandonment/slow_fulfillment stats are randomly fabricated (no real usage-tracking data source exists), matching the reference project's own use of Python's random module. inactive_items and description_quality reflect real instance data. Never present this as real analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | No | ||
| recommendation_types | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is a standout disclosure. The description explicitly states that low_usage/high_abandonment/slow_fulfillment stats are randomly fabricated, with no real data source, and warns against presenting it as real analysis. It also clarifies which fields (inactive_items, description_quality) are real. This is critical behavioral transparency beyond any annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the critical 'SIMULATED' warning front-loaded. It packs necessary caveats and data-source distinctions without verbosity. The structure is logical: first the simulation warning, then the distinction between real and fabricated fields, then a usage caution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, the simulated nature, and which fields are real. However, it does not describe the return structure (e.g., what format the recommendations take, whether they are per item or aggregated), and there is no output schema to compensate. An agent might not know how to interpret the response. Still, the core context is present, so it's above minimal viability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 2 parameters (category_id optional, recommendation_types required array of enums). The description lists all five enum values in prose (low_usage, high_abandonment, slow_fulfillment, inactive_items, description_quality), which indirectly maps to the recommendation_types parameter. However, it never explicitly mentions the parameter names or explains category_id's role as a filter. With 0% schema coverage, this partial mapping earns a middle score.
Input schemas describe structure but not intent. Descriptions should explain 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 (catalog optimization recommendations) and the action (get/receive), with a prominent 'SIMULATED' qualifier. It lists the specific types of recommendations offered. It is distinct from sibling tools like get_syslog_report or get_catalog_item, though it doesn't explicitly name a sibling differing from 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?
Usage is implied: the tool provides optimization recommendations for catalog items. However, there is no explicit statement about when to use it versus other reporting tools, nor any conditions like 'use when you need to analyze catalog performance.' The caution about never presenting as real analysis is a usage warning but not a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_syslog_reportA
Fetch sys_log rows (warnings/errors by default) for a given date, defaulting to yesterday. Returns raw rows only — the caller (Claude) does the 'suggested fixes' analysis in conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. Defaults to yesterday. | |
| levels | No | sys_log level values to filter on, e.g. ['warning','error']. Defaults to ['warning','error'] — verify these match this instance's actual level choice values if the report comes back empty unexpectedly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and meets it well by disclosing the non-obvious trait: it returns raw rows only and intentionally defers 'suggested fixes' analysis to the caller. That is a critical expectation-setting disclosure. It does not cover response format, volume limits, or empty-result behavior, but the disclosed role split is the most important trait for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the purpose and defaults are front-loaded, and the role-split note carries real information rather than padding. Lacks any section structure, but for a short description none is needed. Efficient and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 0 required params and fully documented schema, the description covers purpose, defaults, filtering, and division of labor. The main omission is the return shape (no output schema exists to cover it), but an agent can call this correctly from what is provided — which is the essential bar.
Complex tools with many parameters or behaviors need more documentation. Simple 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 100%, so the baseline is 3. The description adds little to the date parameter beyond duplicating the yesterday default already in the schema, but it does enrich the levels parameter with a genuine operational tip (verify level choice values against the instance if empty). This modest value-add keeps it at baseline rather than below.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch sys_log rows'), then narrows scope with filtering ('warnings/errors by default') and a temporal default (yesterday). The resource is distinct from every sibling (developer work report, optimization recommendations, catalog items), so an agent can pick it unambiguously. This is a fully specified read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Confers clear context — the tool returns raw rows and the caller performs the analysis — which tells the agent when the tool fits (gathering log evidence) rather than doing reasoning itself. However, no sibling is named for exclusion (e.g., get_optimization_recommendations could plausibly overlap on 'what's wrong'), so when-not-to-use is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userA
Fetch a single user by sys_id, username, or email.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| user_id | No | sys_id | |
| user_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits, but it only says 'Fetch a single user.' It does not mention authentication requirements, behavior on multiple matches, whether all parameters are mutually exclusive, or what the response looks like. Minimal behavioral insight is given.
Agents need to know what a tool does to the 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, concise sentence that conveys the essential purpose without any filler. Every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with no output schema and no annotations, the description is adequate but leaves gaps: it does not explain error handling (e.g., user not found), behavior when multiple identifiers are given, or whether any identifier is preferred. It covers the basic call pattern but lacks richer context that an agent might need for edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple 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 only 33% (only user_id has a description). The description adds meaning by explicitly naming the three identifier fields (sys_id, username, email), which compensates for the missing schema descriptions. However, it does not clarify whether parameters can be combined, precedence, or requiredness, 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 states a specific action (Fetch), a clear resource (single user), and the three identification methods (sys_id, username, email). This unambiguously distinguishes it from list_users and other user-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies it is for retrieving a single user, but does not explicitly name alternatives or state when not to use it. The context is clear enough for an agent to select it when a single user is needed, though no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_articlesA
List knowledge articles. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matched against short_description or text | |
| offset | No | ||
| category | No | Category sys_id | |
| knowledge_base | No | Knowledge base sys_id | |
| workflow_state | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of behavioral disclosure. It transparently discloses the pagination behavior (returns one bounded page), which is a key operational trait. It implies a read-only list operation but does not explicitly state safety, side effects, auth, or rate limits. For a simple list tool this is adequate but not rich; the pagination note is the main 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?
The description is a single, concise sentence that front-loads the core action ('List knowledge articles') and then adds the critical pagination caveat. There is no wasted wording, and the most important operational detail is placed immediately after the action, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and no output schema, the description gives only the pagination behavior. It does not mention how filters combine, ordering, or any prerequisites for use. Since the schema itself documents query/category/knowledge_base matching, the description is adequate for a straightforward list call but leaves agents to infer behavior for multi-parameter calls. It is not comprehensive but meets a baseline.
Complex tools with many parameters or behaviors need more documentation. Simple 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 50% (query, category, and knowledge_base have descriptions; limit, offset, and workflow_state do not). The description explains that limit/offset paginate, clarifying their effect and purpose beyond the schema's default values. However, it does not address workflow_state or other parameters' roles, so it only partially compensates for the coverage gap. The value added is real but limited to pagination context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'knowledge articles'. While there are sibling list tools for other resources (e.g., list_catalog_categories, list_knowledge_bases), the resource name is distinctive enough to avoid ambiguity. However, it does not explicitly call out that this is the only tool for listing articles, so it misses a chance to differentiate from get_article which fetches a single article.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 useful usage context by noting that limit/offset paginate and that this returns a bounded page, not the full table. This tells agents to expect pagination and not assume all results come back at once. However, it does not mention alternatives (like get_article for a single article) or when not to use this tool, so guidance on scenario selection is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_categoriesB
List service catalog categories. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matched against title or description | |
| active | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose one meaningful behavioral trait: results are bounded to a single page via limit/offset. However, it omits another behavior visible in the schema — active defaults to true, meaning only active categories are returned unless actively overridden — and the response shape is unspecified. Partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the purpose is front-loaded and the constraint phrase, 'returns one bounded page, not the full table,' is economically worded and earns its place as a guard against a common mis-assumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter listing tool with no annotations and no output schema, the description covers the core purpose and pagination but leaves out the default active=true filtering behavior and does not clarify query/offset semantics. It's functional but has real gaps for a tool that otherwise carries the full informational 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 coverage is only 25% (only 'query' has a description), so the description must compensate. It addresses limit/offset through the pagination note, but says nothing about the 'active' boolean filter or the 'query' matching semantics beyond what the schema already states. The description adds only marginal parameter value and fails to fill 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 'List service catalog categories' with a precise verb and resource, and the 'service catalog' qualifier helps distinguish it from the sibling list_categories (likely knowledge-base categories). It doesn't explicitly name the sibling to differentiate against, but the resource specification is clear enough that an agent can infer scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about pagination ('this returns one bounded page, not the full table'), which tells agents the tool is meant for paged browsing. It does not name alternatives or state when to prefer a different listing tool, leaving when-to-use vs. siblings implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_itemsC
List service catalog items. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matched against short_description or name | |
| active | No | ||
| offset | No | ||
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly discloses the pagination trait — 'limit/offset paginate — this returns one bounded page, not the full table' — which is the key behavior for a list operation. However, it omits other meaningful behaviors, such as the fact that 'active' defaults to true (silently excluding inactive items) and the return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded. The pagination sentence is nearly redundant ('limit/offset paginate' and 'returns one bounded page, not the full table' restate the same idea), but it is compact and wastes little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, no-annotation, no-output-schema tool, the description is thin. It explains pagination but not the filtering semantics (query, active, category) or the default filtering behavior. With no output schema, the absence of any return-format hint leaves the agent guessing at what fields a page contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low at 20% (only 'query' is documented in the schema), so the description must compensate. It adds meaning to limit/offset by explaining they paginate the result, but it contributes nothing for 'active' or 'category', which remain completely undocumented in both schema and description. 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 verb and resource ('List service catalog items'), which clearly identifies the operation. The plural 'items' distinguishes it from sibling get_catalog_item, and the resource type separates it from list_catalog_categories or list_incidents. It doesn't explicitly name the alternative, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_catalog_item, update_catalog_item, or the change/users listing siblings. The pagination note ('returns one bounded page, not the full table') describes behavior but does not address tool selection or exclusions. Usage context is only implied by the 'list' verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_item_variablesC
List the variables (form fields) defined on a catalog item.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| catalog_item_id | Yes | sys_id or name of the catalog item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of disclosing behavior. It does not mention that the operation is read-only, the response format, pagination semantics of limit/offset, error handling, or permission requirements. Only the basic act of listing is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that front-loads the key action 'List' and the resource. There is no fluff or redundancy, making it efficient 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?
For a tool with three parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain what the response contains, how limit/offset affect results, or what happens when the catalog_item_id is invalid. The description alone is insufficient for an agent to call the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not reference any parameters. With schema description coverage at only 33% (only catalog_item_id has a description), the description fails to compensate for the undocumented limit and offset parameters. No additional meaning beyond the schema is provided.
Input schemas describe structure but not intent. Descriptions should explain 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 ('List') and a specific resource ('variables (form fields) defined on a catalog item'), making the purpose clear. It implicitly distinguishes from sibling tools like create_catalog_item_variable and update_catalog_item_variable by using the 'list' action, but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description states only what the tool does, with no mention of when to use it versus other tools, prerequisites, or scenarios where it should not be used. Agents receive no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesB
List knowledge base categories. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matched against label or description | |
| active | No | ||
| offset | No | ||
| knowledge_base | No | Knowledge base sys_id | |
| parent_category | No | Parent category sys_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add the pagination behavior ('returns one bounded page, not the full table'), which is valuable and not present in the schema. However, it does not mention the read-only nature, sorting, or error behavior, so it only partially covers behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary purpose and immediately adding the key pagination trait. No wasted words, easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too sparse for a 6-parameter tool with no output schema and no annotations. It fails to explain the return format, filter semantics (e.g., how query matches, what active means), or the category hierarchy. While pagination is noted, the overall context remains incomplete for an agent to call it correctly without further 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 50% (query, knowledge_base, parent_category are described), and limit/offset are not described in the schema. The description adds that limit/offset paginate, giving those parameters meaning, but it does not explain 'active' or the interplay of filters. It 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?
The description clearly states the action ('List') and the resource ('knowledge base categories'), which distinguishes it from the sibling list_catalog_categories by specifying 'knowledge base' implicitly. It is not a tautology, but it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the resource type (knowledge base categories), but the description offers no explicit guidance on when to use this tool versus alternatives like list_catalog_categories or other listing tools. It lacks any 'when not to use' or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_change_requestsC
List change requests. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| query | No | Additional raw encoded query, ANDed with the filters above | |
| state | No | ||
| offset | No | ||
| category | No | ||
| timeframe | No | ||
| assignment_group | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It adds useful pagination context: 'limit/offset paginate — this returns one bounded page, not the full table.' However, it does not mention that this is a read-only operation, the return format, default limit values, or error behavior, leaving significant gaps in behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two short sentences with no filler. The main action is front-loaded, and the pagination caveat is clearly stated. While it is effective in brevity, it omits important context that could be added without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 optional parameters, only 13% schema coverage, no output schema, and no annotations, this description is far from complete. It does not explain any filtering parameters, default behavior, or return value structure. An agent would struggle to call this tool correctly beyond basic pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% (only the 'query' parameter has a description). The tool description only adds meaning for limit and offset via the pagination note, but does not explain 'type', 'state', 'category', 'timeframe', or 'assignment_group'. Since coverage is low, the description must compensate, and it fails to do so 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?
The description clearly states the action 'List' and the resource 'change requests', making the tool's purpose unambiguous. However, it does not differentiate this list tool from siblings like get_change_request_details or list_incidents, so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention filters, intended use cases, or when a different tool like get_change_request_details would be more appropriate. This leaves the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_changesetsB
List changesets (update sets). limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Additional raw encoded query, ANDed with the filters above | |
| state | No | ||
| offset | No | ||
| developer | No | ||
| timeframe | No | ||
| application | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure, and it does add one key behavior: 'limit/offset paginate — this returns one bounded page, not the full table.' This alerts the agent that pagination is required for full results. However, it omits other relevant behaviors such as whether results are sorted, whether filters (state, developer, timeframe, application) combine with AND, and any rate limits or read-only guarantees. A score of 3 reflects that it adds some value but is far from comprehensive.
Agents need to know what a tool does to the 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 wasted words. The purpose is stated first, and the critical pagination caveat is front-loaded immediately after. This is an exemplar of concise, structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, no output schema, and no annotations, the description is drastically under-specified. It covers only pagination, not the semantics of the filters, default sorting, output format, or any constraints like authorization. An agent would be unable to reliably construct a correct call without inspecting the schema (which is also sparse) or making assumptions. The description is insufficient 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 only 14% (only 'query' has a description). The tool description mentions 'limit/offset' but does not explain any of the other five parameters. There is no compensation for the undocumented parameters, leaving the agent to guess the meaning and acceptable values for state, developer, timeframe, and application. The description adds minimal value beyond the schema's own limit/offset defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List changesets (update sets).' It also clarifies the pagination behavior, which distinguishes it from related tools like get_changeset_details (which focuses on a single changeset) and mutation tools (update_changeset, commit_changeset, etc.). The purpose is unambiguous and well-scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit guidance on when to use this tool versus alternatives. It does not mention that for detailed views of a specific changeset one should use get_changeset_details, or that mutation tools are for modifications. The only implicit guidance is 'list' suggests a read operation, but there is no direct routing or context about selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsA
List groups. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| query | No | Case-insensitive search matched against group name or description | |
| active | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose pagination behavior—'returns one bounded page, not the full table'—which is useful. However, it does not mention order, side effects, or any other behavioral nuances that an agent might need to know for correctly interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence with a clear subject and an important behavioral note. It is front-loaded with the core purpose and adds only essential context. Every word 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?
The tool is relatively simple, but the description omits details about the output format, default behavior, or filtering options beyond the mention of pagination. With no output schema and low parameter descriptions, agents may not have enough information to fully understand the tool's behavior, especially for parameters like 'type' and 'active'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% (only 'query' is described). The description only vaguely references 'limit/offset paginate' without explaining the parameters' semantics. It does not compensate for the low schema coverage by clarifying 'type' or 'active' parameters, leaving agents with insufficient information to use them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List groups', which is a specific verb and resource. It is unambiguous and distinguishes from siblings like create_group, update_group, and other list_* tools by naming the exact resource being listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool lists groups, which implies when to use it. However, it does not explicitly mention alternatives or when not to use it. Since the resource is specific, the context is clear but exclusions are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_incidentsC
List incidents, most recent first. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Additional raw encoded query, ANDed with the filters above | |
| state | No | ||
| offset | No | ||
| category | No | ||
| assigned_to | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose two key behaviors: ordering (most recent first) and pagination (returns a bounded page, not the full table). However, it does not mention whether the operation is read-only, any authentication or permission requirements, or what happens when no results match. These gaps are notable but partially offset by the explicit pagination note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the purpose and ordering are stated first, followed by the pagination behavior. Every word earns its place, and it avoids repetition. It could be slightly more detailed without becoming verbose, but as-is 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?
Given six parameters, no output schema, and no annotations, the description leaves significant gaps. It does not explain the filter parameters, the shape of the response (e.g., what fields are returned per incident), or error behavior. An agent calling this tool would likely need to inspect the schema further or infer from other tools to know how to filter correctly. The description is too sparse for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (only the 'query' field has a description). The tool description clarifies that 'limit/offset' are used for pagination, which adds value beyond the schema. However, it provides no explanation for 'state', 'category', or 'assigned_to' filters, even though they likely serve as filtering criteria. With such low schema coverage, the description should compensate more thoroughly but only touches two of the six parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List incidents') and the resource ('incidents'), and specifies the ordering ('most recent first'). It is distinct from other incident tools like create/update/get by number, though it does not name them explicitly. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not guide the agent on when to use this tool versus alternatives such as get_incident_by_number or resolve_incident. It only mentions pagination, implying it is for listing multiple incidents, but there is no explicit when-to-use or when-not-to-use guidance, and no mention of the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_knowledge_basesB
List knowledge bases. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matched against title or description | |
| active | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add one useful behavioral trait: 'this returns one bounded page, not the full table', which clarifies pagination semantics beyond what the schema alone implies. However, it does not disclose whether the operation is read-only, whether authentication is required, or if there are side effects. Given the absence of annotations, a score of 3 reflects that it provides some valuable behavioral context but is not comprehensive.
Agents need to know what a tool does to the 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 exceptionally concise: two sentences with no filler. It front-loads the core purpose ('List knowledge bases') and then immediately adds the critical pagination detail. Every word earns its place, and there is no redundant 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 the absence of an output schema and annotations, the description must provide a complete context for the agent to call the tool correctly. It covers pagination behavior but leaves 'active' undefined, does not describe the return format or structure, and does not mention any prerequisites or side effects. For a tool with four optional parameters and no output schema, this is insufficient for reliable agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only 'query' has a description). The description partially compensates by explaining that 'limit/offset paginate' and that it returns a bounded page, giving meaning to 'limit' and 'offset'. However, it does not clarify the 'active' parameter, leaving it unexplained. Since the coverage is low, the description should do more to clarify all parameters; it adds value for two but remains incomplete.
Input schemas describe structure but not intent. Descriptions should explain 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 ('List') and resource ('knowledge bases'), which precisely identifies what the tool does and clearly differentiates it from sibling tools like 'create_knowledge_base' or 'list_articles'. There is no ambiguity or tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or references to sibling tools (e.g., when to prefer this over 'list_articles' or 'list_catalog_categories'). The only context is a pagination note, which is behavioral rather than a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersA
List users, most recent first. limit/offset paginate — this returns one bounded page, not the full table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Case-insensitive search matched against name, username, or email | |
| active | No | ||
| offset | No | ||
| department | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses ordering (most recent first) and pagination behavior (bounded page, not full table), which is useful. However, it omits the response structure (fields returned), filtering semantics beyond the schema, and any side effects or auth requirements. The disclosure is incomplete for a tool with no 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 with no fluff. The primary purpose is front-loaded, and the pagination caveat is stated concisely. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description is sparse. It does not describe the shape of returned user objects, default values, or how query/active/department affect results. While the list operation is simple, the lack of output schema and low parameter coverage leaves gaps that a more thorough description could fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% (only 'query' has a description). The description adds meaning to limit/offset by explaining their role in pagination, but does not comment on 'active' or 'department' parameters. Since coverage is low, the description should compensate but only partially does, leaving two parameters semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List users, most recent first' – a specific verb and resource with ordering. It distinguishes from the sibling get_user by plurality and from create_user/update_user by verb. The pagination note adds precision about the scope of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for paginated listing by explaining limit/offset behavior and that it returns a bounded page. However, it does not explicitly state when to prefer this over get_user (single user) or how to combine with filters. No exclusion guidance is given, so the usage context is only partially conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_catalog_itemsC
Move one or more catalog items to a different category.
| Name | Required | Description | Default |
|---|---|---|---|
| item_ids | Yes | Catalog item sys_ids to move | |
| target_category_id | Yes | Target category title or sys_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action 'move', implying mutation, but does not elaborate on side effects, reversibility, required permissions, or what happens to moved items. This is significantly under-specified for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded with the core action and resource. However, it lacks structure or additional helpful detail, so it misses a 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?
Given there is no output schema and no annotations, the description is insufficiently complete. It provides no information about expected outcomes, errors, or prerequisites. For a two-parameter mutation tool, this leaves too much unsaid for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides complete descriptions for both parameters (item_ids and target_category_id), achieving 100% coverage. The description adds no additional meaning or nuance beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Move'), the resource ('catalog items'), and scope ('one or more'), which distinguishes it from related tools like update_catalog_item. However, it does not explicitly call out sibling differentiation, and the phrasing is direct enough to be 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 is provided on when to use this tool versus alternatives. There are no mentions of prerequisites, exclusions, or when not to use it. The usage is implied but not explicit, leaving the agent to infer 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.
publish_articleA
Change a knowledge article's workflow state (defaults to published). NOTE: confirmed on this PDI that a direct field write silently reverts to draft — article state appears governed by the platform's own publish flow, not settable via a bare Table API write.
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | Yes | sys_id of the article to publish | |
| workflow_state | No | Choice label/value: draft, review, scheduled_publish, published, pending_retirement, retired, outdated | published |
| workflow_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals a critical platform quirk—that a direct field write reverts to draft and that state is governed by the platform's own flow—which is valuable context. It also states the default state. However, it does not mention permissions, side effects, or return behavior, so it is not fully comprehensive.
Agents need to know what a tool does to the 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 concise and front-loaded with the main action and default. The note about the platform behavior is useful but slightly verbose, yet still fits in two sentences with no wasted words. Overall 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?
The tool has 3 params (1 required) and no output schema. The description covers the purpose and a key pitfall, but misses the meaning of workflow_version and any side effects or prerequisites. For a simple tool, it is adequate but not complete enough to fully prepare an agent without further investigation.
Complex tools with many parameters or behaviors need more documentation. Simple 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 67% (article_id and workflow_state have descriptions; workflow_version does not). The description adds little beyond the schema: the 'defaults to published' is already in the schema, and it does not elaborate on workflow_version. The third parameter remains undocumented in both schema and description, and the description does not compensate for that 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 clearly states a specific verb ('Change') and a specific resource ('knowledge article's workflow state'), with an additional default of 'published'. This distinguishes it from siblings like update_article (generic article update) and publish_changeset (changeset publication), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is the correct way to change article workflow state, noting that a direct field write silently reverts to draft. However, it does not explicitly name alternatives (like update_article) nor state when not to use this tool, leaving the selection guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_changesetC
Publish a changeset. NOTE: requires a 'published' state choice to exist on sys_update_set — not present on every instance (confirmed absent on this PDI).
| Name | Required | Description | Default |
|---|---|---|---|
| changeset_id | Yes | sys_id or name of the changeset | |
| publish_notes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal a key prerequisite—the 'published' state choice must exist—and even notes it's absent on the current PDI, which is valuable. However, it omits other behavioral aspects like side effects, reversibility, or what happens if the prerequisite is missing, so it is only moderately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short—one action sentence plus a note—and it front-loads the core action. It is concise and efficient, though the note about the prerequisite makes it slightly longer than the bare minimum. Still, every word earns its place, so it scores well on 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?
For a mutation tool with no annotations and no output schema, the description is incomplete. It mentions a prerequisite but does not describe return values, error behavior, idempotency, or what publishing actually entails. The agent is left without enough context to predict the outcome, so completeness is low.
Complex tools with many parameters or behaviors need more documentation. 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 describes changeset_id ('sys_id or name of the changeset') but publish_notes has no description, giving 50% coverage. The description adds no parameter information beyond the schema; it does not explain publish_notes or provide format hints. Since coverage is only 50%, the description should compensate but does not, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: 'Publish a changeset.' It is specific and understandable, but it does not differentiate from siblings like commit_changeset or update_changeset, which could be confused. The purpose is clear but lacks explicit sibling distinction, 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 guidance on when to use this tool versus alternatives. The only extra information is a prerequisite about the 'published' state choice, which is a technical requirement, not a usage directive. No mention of when commit_changeset or update_changeset would be more appropriate, so agents receive no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_changeA
Reject a change request's pending approval record and cancel the change. NOTE: may fail on instances with Change Model governance — confirmed on this PDI.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | sys_id or change number | |
| approver_id | No | Username, email, or sys_id of the approver | |
| rejection_reason | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a destructive mutation (rejecting and canceling) and includes a useful failure warning about Change Model governance. However, it does not describe the response format, side effects on the approval record, or permission requirements, leaving gaps for the agent.
Agents need to know what a tool does to the 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 extremely concise: one sentence for the main action and one short warning. It is front-loaded with the core purpose and includes a critical environmental note without any fluff, making it easy for an agent to parse efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with no output schema, the description covers the primary action and an important failure condition. However, it does not explain what happens to the pending approval record, how rejection_reason is used, or any return value expectations. The failure warning is valuable, but the lack of parameter guidance and side-effect detail leaves some 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?
The schema description coverage is 67%, and the description adds no parameter-specific detail. rejection_reason is required but lacks a description in both schema and tool description, and the description does not clarify how to use approver_id or the acceptable format of change_id. The description provides no meaningful parameter semantics beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action 'Reject' on 'a change request's pending approval record' and the resulting effect 'cancel the change'. This is distinct from siblings like approve_change and submit_change_for_approval, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or specific conditions for use. The purpose makes the primary use obvious, but no additional guidance is given beyond a failure warning that applies to certain environments, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_group_membersB
Remove one or more members from a group.
| Name | Required | Description | Default |
|---|---|---|---|
| members | Yes | Usernames, emails, or sys_id:<id>-prefixed sys_ids | |
| group_id | Yes | Group name or sys_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states the mutation ('Remove') but offers no details on idempotency, error handling, permissions, side effects, or what happens to non-existent members. The agent is left without knowledge of important behaviors beyond the basic 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 with no redundancy. The verb and resource are front-loaded, and there is zero wasted wording. For a tool of this simplicity, the length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with two parameters and no output schema, the description is minimal. It does not mention return values, success/failure indicators, or edge cases, which could be important for an agent to handle correctly. The basic purpose is clear, but behavioral context is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for both parameters (group_id and members) with 100% coverage. The description adds no extra parameter information, so the schema fully handles parameter meaning. This meets the baseline for high schema 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 clearly states 'Remove one or more members from a group' – a specific verb and resource. It differentiates from the sibling 'add_group_members' via the verb 'remove', though it does not explicitly name the alternative or expand on scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provided on when to use this tool versus alternatives or any exclusions. The description simply states the action without context, prerequisites, or conditions for use. There is no mention of when to prefer this over adding members or other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_incidentC
Resolve an incident (sets state to Resolved with a resolution code and notes).
| Name | Required | Description | Default |
|---|---|---|---|
| incident_id | Yes | sys_id or incident number | |
| resolution_code | Yes | ||
| resolution_notes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the state transition to Resolved and the required inputs, but fails to mention side effects, reversibility, permission requirements, or what happens after resolution. This is insufficient for a state-changing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the primary action and outcome. There is zero wasted text, and the parenthetical efficiently conveys the key details. It is appropriately concise for a straightforward operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with three required parameters, no output schema, and no annotations, this description is incomplete. It omits guidance on valid resolution codes, the impact of resolution on related records, and how it differs from update_incident. An agent would lack critical context to invoke this tool 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 only 33% (only incident_id is described). The description mentions 'resolution code and notes' but does not clarify valid values for resolution_code, the format or purpose of resolution_notes, or how incident_id should be specified beyond the schema's generic hint. It adds minimal meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Resolve' and the resource 'incident', and adds the specific outcome: 'sets state to Resolved with a resolution code and notes'. This is specific and distinguishable from generic update operations, though it does not explicitly differentiate from sibling tools like update_incident beyond the state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as update_incident or add_comment. No prerequisites, context, or conditions for resolution are mentioned. An agent would have to infer the appropriate scenario 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.
submit_change_for_approvalA
Submit a change request for approval (sets state to Assess and creates an approval record). NOTE: may fail on instances with Change Model governance (state transition business rules) or where sysapproval_approver doesn't accept direct inserts — confirmed on this PDI.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | sys_id or change number | |
| approval_comments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It states the state transition (to Assess), the side effect (creates an approval record), and explicit failure conditions (Change Model governance, sysapproval_approver direct inserts). This is notably transparent, even if it doesn't cover reversibility or permissions. The only minor gap is the lack of mention about return values or success behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first front-loads the main action and effect, the second adds a warning note. No redundant filler, and the structure is efficient. It loses a point only because the note, while important, is slightly tangential to the core 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?
The description covers the core action, side effects, and known failure modes, but omits the purpose of approval_comments and any expectations about the success response. For a simple two-parameter tool, this is decent, yet the missing parameter info creates a real gap that an agent must resolve through inference or trial.
Complex tools with many parameters or behaviors need more documentation. 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 describes only one of two parameters (change_id), and the description adds no clarification about approval_comments – its purpose, format, or whether it's used to populate the approval record. Since the description could easily have explained approval_comments but didn't, it fails to compensate for the 50% schema coverage. The agent must guess what to pass for approval_comments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb and resource: 'Submit a change request for approval', and describes the immediate effects (sets state to Assess, creates an approval record). This differentiates it from sibling tools like approve_change, which would handle an existing approval record. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly contrast with sibling tools such as approve_change or reject_change, nor does it state when this tool is preferred over them. It implies usage by naming its action, but leaves the agent to infer the decision boundary (e.g., 'use this to submit a new change, use approve_change to respond to an approval request'). No explicit exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_articleC
Update an existing knowledge article.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| title | No | ||
| category | No | Category title or sys_id | |
| keywords | No | ||
| article_id | Yes | sys_id of the article to update | |
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it updates an existing article, but does not mention whether it is a partial update, what happens to unspecified fields, required permissions, reversibility, or response format. This is a mutation tool with zero annotation coverage, so these gaps are significant.
Agents need to know what a tool does to the 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 sentence, highly concise and front-loaded. However, the brevity comes at the cost of essential information. While the sentence is not redundant, it is under-specified, making this 'conciseness' more like minimalism than effective compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and zero annotations, the description is completely inadequate. It does not explain the effect of the update, which fields are updatable, or any behavioral details. An agent would have to rely on parameter names and external knowledge to use it correctly, which is insufficient for a production environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only article_id and category have schema descriptions). The description does not add any parameter semantics beyond what the schema provides. It fails to explain the meaning of text, title, keywords, short_description, or the update behavior for these fields, leaving the agent to guess from parameter names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('update') on a specific resource ('knowledge article'), which distinguishes it from create_article, get_article, list_articles, and publish_article. However, it does not explicitly differentiate it from similar update tools for other resources (e.g., update_catalog_item), though the resource name makes the scope obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance on when to use this tool versus alternatives like create_article or publish_article. There is no mention of prerequisites, conditions, or exclusions. An agent cannot tell whether this tool is appropriate for a given task without inferring from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_catalog_categoryC
Update an existing service catalog category.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | ||
| order | No | ||
| title | No | ||
| active | No | ||
| parent | No | Parent category title or sys_id | |
| category_id | Yes | Category sys_id | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavioral traits. 'Update' implies mutation, but nothing is mentioned about partial update semantics, required fields alongside category_id, permissions needed, side effects on related items, or whether the operation is reversible. This is a significant gap for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise in form but fails to convey substantive information. It does not earn its place because it only restates the tool name's meaning without adding guidance or context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update tool with 7 parameters, no output schema, and no annotations, the combination of a vague description and sparse schema makes it impossible for an agent to understand field semantics, required versus optional updates, or the impact of the operation. Contextual completeness is severely lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29% (only category_id and parent have descriptions). The tool description adds no parameter details beyond their names, leaving 5 parameters (icon, order, title, active, description) completely unexplained. The low coverage requires the description to compensate, but 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 clearly states the action (update) and the target (existing service catalog category), which distinguishes it from create_catalog_category and list_catalog_categories. It is specific enough to identify the tool's core purpose, though it does not enumerate what fields can be updated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provided on when to use this tool versus alternatives, such as prerequisites (e.g., needing an existing category), or when not to use it. There is no mention of scenarios where create or list would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_catalog_itemC
Update an existing catalog item's core fields (name, description, category, price, active, order).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| order | No | ||
| price | No | ||
| active | No | ||
| item_id | Yes | Catalog item sys_id | |
| category | No | Category title or sys_id | |
| description | No | ||
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Update' implies mutation, but there's no disclosure of side effects, whether the update is partial (likely, but unstated), required permissions, or what happens to unspecified fields. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, which is efficient. However, it is very thin—it lists fields but no nuance. It's not verbose, but the brevity comes at the cost of omitted useful information. It is structured adequately for the little it says.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, 8 parameters, and no explanation of partial update behavior, return values, or error conditions. An agent cannot tell whether all fields are optional beyond item_id, how category accepts title vs sys_id, or what the response looks like. The description is insufficient 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?
Only 25% of parameters have schema descriptions (item_id and category). The description lists core fields but adds no semantic detail: price is a string (currency/format unknown), order is numeric (sort order?), active is boolean, and short_description is omitted entirely. It doesn't compensate for the poor schema coverage, leaving many parameters vague.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing catalog item and lists the core fields (name, description, category, price, active, order). It distinguishes from create_catalog_item by saying 'existing', but doesn't differentiate among sibling update tools like update_catalog_category or update_catalog_item_variable. The resource is unambiguous, so it's above average but not perfect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 vs alternatives such as create_catalog_item or move_catalog_items. It doesn't state prerequisites (e.g., needing an existing item_id) or exclusions. The description only says 'update', implying use for modifications, but offers no explicit context or routing to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_catalog_item_variableC
Update an existing catalog item variable.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | ||
| min | No | ||
| label | No | ||
| order | No | ||
| help_text | No | ||
| mandatory | No | ||
| max_length | No | ||
| description | No | ||
| variable_id | Yes | sys_id of the variable to update | |
| default_value | No | ||
| reference_qualifier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention side effects, idempotency, permissions, error conditions, or return values. The single statement is purely functional with no added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no fluff. It is appropriately concise and front-loaded with the core action. However, it might be too minimal, but conciseness alone is well achieved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 11 parameters and no output schema, the description is grossly incomplete. It does not explain required vs optional fields (beyond schema), update semantics, or relationships to other catalog components. An agent would have insufficient information to call it correctly beyond a 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 only 9% (only variable_id has a description). The tool description adds zero explanation for the other 10 parameters. It does not compensate for the low coverage; no parameter semantics beyond the bare names are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Update') and a specific resource ('existing catalog item variable'), which distinguishes it from sibling tools like create_catalog_item_variable and list_catalog_item_variables. No ambiguity about the primary action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like create_catalog_item_variable. It simply states what it does without context on selection criteria, prerequisites, or when updating is appropriate over creating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_change_requestB
Update an existing change request (accepts sys_id or change number).
| Name | Required | Description | Default |
|---|---|---|---|
| risk | No | ||
| state | No | Choice label, e.g. Assess, Authorize, Scheduled, Implement, Review, Closed, Canceled | |
| impact | No | ||
| category | No | ||
| end_date | No | ||
| change_id | Yes | sys_id or change number (e.g. CHG0010001) | |
| start_date | No | ||
| work_notes | No | ||
| description | No | ||
| assignment_group | No | ||
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only says 'update,' which implies mutation, but it does not mention permissions, reversibility, response behavior, or that fields are optional. This is a significant gap for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that delivers the core action and the key identifier nuance without any wasted words. It is concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no annotations, no output schema, and only 18% schema coverage, this description is far from complete. The agent needs to know field value formats (e.g., date syntax, choice values for state, impact, risk) and typical usage patterns. None of that is provided, so the tool cannot be reliably invoked beyond passing an identifier.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18%, so the schema provides little meaning. The description adds value only for `change_id` (explicitly stating sys_id or change number). The other 10 parameters (risk, impact, category, dates, work_notes, etc.) are completely undocumented by both schema and description, leaving the agent to guess formats and allowed values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('an existing change request'), and adds that it accepts either sys_id or change number. This distinguishes it from related tools like create_change_request and get_change_request_details, so an agent can readily identify its 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?
The description implies it is for modifying existing change requests, but it does not explicitly state when to use it over alternatives such as submit_change_for_approval, approve_change, or reject_change. No exclusions or prerequisites are mentioned, so the guidance is thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_changesetC
Update an existing changeset (accepts sys_id or name).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| state | No | in progress, complete, or ignore | |
| developer | No | ||
| description | No | ||
| changeset_id | Yes | sys_id or name of the changeset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It indicates mutation ('update') but does not disclose reversibility, permission requirements, side effects on linked files, or validation constraints. This is a significant gap for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. However, it is under-specified for a five-parameter mutation tool, so while concise, it lacks the substance needed to be appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with five parameters, no annotations, and no output schema, the description provides only the basic verb and resource. It does not explain which fields are updatable, constrained values, or expected outcomes, making it far from complete 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 coverage is only 40% (state and changeset_id have descriptions); the remaining parameters (name, developer, description) are undocumented. The description adds no meaning beyond the schema, such as allowed values or relationships between fields, and does not offset 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?
The description states a clear action ('update') on a specific resource ('changeset') and adds a useful detail about identifier formats ('accepts sys_id or name'). This distinguishes it from create_changeset and specialized operations like commit_changeset, but it does not explicitly contrast with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use on existing changesets but gives no explicit guidance on when to choose this over create_changeset, commit_changeset, or publish_changeset. No alternatives or exclusions are mentioned, leaving the agent to infer usage from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_groupC
Update an existing group (accepts sys_id or name).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| No | |||
| active | No | ||
| parent | No | ||
| manager | No | ||
| group_id | Yes | Group sys_id or name to update | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that the tool updates a group and accepts an identifier. It does not disclose side effects (e.g., whether fields not specified are retained or reset), permission requirements, error behavior (e.g., if the group does not exist), or whether the update is partial or full. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with zero filler. It front-loads the core action and includes the key identifier detail. There is no unnecessary verbiage, and the structure is appropriate for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with eight parameters, no output schema, and no annotations, the description is severely incomplete. It does not convey expected call patterns, handling of edge cases, or any update semantics beyond the basic action. An agent would need to inspect the schema and possibly other documentation to use it correctly, which the description fails to provide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% (group_id is described, but the other seven parameters are not). The description adds no extra meaning for these parameters—it only restates the group_id flexibility already present in the schema. It does not compensate for the low coverage by explaining what 'name', 'type', 'email', 'active', etc., mean or how they should be used. Essentially, the description provides no value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('an existing group'), and specifies that it accepts either sys_id or name. This unambiguously distinguishes it from sibling tools like create_group, add_group_members, and list_groups. It is a specific verb+resource statement with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or context such as 'use this to modify group properties; use add_group_members to manage membership.' There is no explicit or even implicit comparison to sibling tools, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_incidentC
Update an existing incident (accepts sys_id or incident number).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | ||
| impact | No | ||
| urgency | No | ||
| category | No | ||
| priority | No | ||
| close_code | No | ||
| work_notes | No | ||
| assigned_to | No | ||
| close_notes | No | ||
| description | No | ||
| incident_id | Yes | sys_id or incident number (e.g. INC0010001) | |
| subcategory | No | ||
| assignment_group | No | ||
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden of behavioral disclosure. It only states that the tool 'updates' an incident, implying mutation, but does not reveal what side effects occur (e.g., whether all provided fields are updated, what happens if the incident does not exist, whether permissions are required, or what the response format is). This is a significant gap for a mutating tool with no other behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no fluff, and the key identifier info (sys_id or number) is front-loaded. However, it is arguably too terse for a tool with this many parameters; it omits necessary detail. It is well-structured but under-informative, earning a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, no annotations, no output schema, and only 7% schema coverage, the description is severely incomplete. It does not explain which fields are updatable, how they should be formatted, any relationships between fields (e.g., state transitions), or expected behavior. An agent cannot reliably call this tool correctly based on the current description and schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 7% (only 'incident_id' has a description). The tool has 14 parameters, and the description adds no information about the other 13 (state, impact, urgency, etc.). It merely repeats the incident_id description already present in the schema. With such low coverage, the description should have listed or explained the updatable fields, but it does not, leaving agents without guidance on how to fill them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('an existing incident'), and specifies that it accepts sys_id or incident number. This is a clear purpose. However, it does not differentiate from the sibling tool 'resolve_incident', which is also an update operation but specific to resolution. The generic nature of 'update' is implied but not contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidance is provided beyond the action itself. The description does not state when to use this tool versus 'resolve_incident' or other incident-related tools, nor does it mention any prerequisites (e.g., requiring an existing incident ID) or context. An agent would have to infer when this is the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_userC
Update an existing user (accepts sys_id, username, or email).
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| roles | No | Role names to assign (additive, not a replace-all) | |
| title | No | ||
| active | No | ||
| manager | No | ||
| user_id | Yes | sys_id, username, or email of the user to update | |
| location | No | ||
| password | No | ||
| last_name | No | ||
| user_name | No | ||
| department | No | ||
| first_name | No | ||
| mobile_phone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It states it updates a user, implying mutation, but does not disclose failure behavior (e.g., what happens if the user is not found), whether only provided fields are updated or all fields are reset, or any auth/rate-limit requirements. For a mutation tool with 14 parameters and no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words—hence it is concise. However, it is under-specified, not merely efficient. It lacks essential behavioral details and parameter guidance, so the brevity works against its usefulness. It's a borderline case: conciseness in structure but not in content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, mutation, no annotations, no output schema), the description is woefully incomplete. It does not mention return values, error handling, field update semantics (partial vs replace), or any constraints. The only saving grace is the identifier-format note, but that is insufficient for safe and correct invocation by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 14% (only roles and user_id have descriptions). The description adds a note about user_id accepting sys_id, username, or email, but this duplicates the schema's own description for that field. It provides no additional meaning for the other 13 parameters, many of which (e.g., password, manager, location) could benefit from clarification. The description fails to compensate for the low schema 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 clearly states the action 'Update an existing user' with a specific verb and resource. It also specifies that the user can be identified by sys_id, username, or email, which distinguishes it from sibling tools like create_user (creation) and get_user (read). No ambiguity remains about the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit guidance on when to use this tool versus alternatives, such as create_user for new users or get_user for read-only access. It also doesn't mention any prerequisites or conditions (e.g., the user must already exist). The only hint is the word 'existing', but that's implicit and not a clear routing instruction.
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.
52 tool updates
v1.0.0- First observed
add_change_task - First observed
add_comment - First observed
add_file_to_changeset - First observed
add_group_members - First observed
approve_change - First observed
commit_changeset - First observed
create_article - First observed
create_catalog_category - First observed
create_catalog_item_variable - First observed
create_category - First observed
create_change_request - First observed
create_changeset - First observed
create_group - First observed
create_incident - First observed
create_knowledge_base - First observed
create_user - First observed
get_article - First observed
get_catalog_item - First observed
get_change_request_details - First observed
get_changeset_details - First observed
get_developer_work_report - First observed
get_incident_by_number - First observed
get_optimization_recommendations - First observed
get_syslog_report - First observed
get_user - First observed
list_articles - First observed
list_catalog_categories - First observed
list_catalog_item_variables - First observed
list_catalog_items - First observed
list_categories - First observed
list_change_requests - First observed
list_changesets - First observed
list_groups - First observed
list_incidents - First observed
list_knowledge_bases - First observed
list_users - First observed
move_catalog_items - First observed
publish_article - First observed
publish_changeset - First observed
reject_change - First observed
remove_group_members - First observed
resolve_incident - First observed
submit_change_for_approval - First observed
update_article - First observed
update_catalog_category - First observed
update_catalog_item - First observed
update_catalog_item_variable - First observed
update_change_request - First observed
update_changeset - First observed
update_group - First observed
update_incident - First observed
update_user
TDQS
Scored across 52 tools
Each tool targets a distinct resource and action. Even similar-sounding tools like create_catalog_category versus create_category are clearly separated by context in their descriptions. The report tools are also distinct from CRUD operations.
Tool names follow a consistent verb_noun pattern (e.g., list_incidents, create_incident, update_incident, get_incident_by_number). Minor deviations like create_category are still unambiguous due to domain context, and the overall style is uniform.
With 52 tools, the server is heavily overloaded, even though it covers multiple ServiceNow domains. This exceeds the 25-tool threshold for 'too many' and risks making tool selection more complex. While the breadth justifies a higher count, the sheer number is excessive for coherence.
The tool surface covers full CRUD and lifecycle operations for most domains: incidents, users, groups, changesets, catalog, knowledge, and change requests. Minor gaps exist (no delete operations for several resources, no incident approval workflow), but these are acceptable and do not hinder core workflows.
Maintenance
Related MCP Connectors
Query PanDev Metrics analytics and reporting data
Read-only NuMetric.work accounting & ERP data: statements, KPIs, reports, invoices, documents.
Provide seamless access to Appfolio Property Manager Reporting API through a standardized MCP serv…
Provides access to Civic Plus - See Click Fix, allowing you to interact with your data via an LLM.…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides AI assistants with read access to ServiceNow instances to aid in building and debugging applications. It enables users to query tables, retrieve specific records, and inspect table schemas using standard ServiceNow encoded query strings.-
- AlicenseNot gradedqualityDmaintenanceEnables authenticated interaction with ServiceNow via its REST API using per-user OAuth 2.0 tokens. It provides tools for managing incidents, tasks, knowledge articles, and service catalog requests while maintaining user-specific permissions.16 npm4MIT
- AlicenseAqualityCmaintenanceA read-only MCP server that enables AI assistants to query ServiceNow instances—incidents, changes, users, CMDB—with malformed query linting and injection protection.7MIT
- FlicenseNot gradedqualityDmaintenanceExposes Azure Log Analytics workspace data with tools for querying AuditLogs and AzureActivity tables, supporting custom KQL queries, time range filters, and pagination.-