ServiceNow MCP Server
This server connects AI assistants to ServiceNow, enabling natural-language interaction with records, CMDB, system information, and update sets.
Table API: List, get, create, update, and delete records in any table; aggregate data with COUNT, AVG, MIN, MAX, SUM, GROUP BY, and HAVING; support filtering, field selection, pagination, and sorting.
CMDB: List, get, create, and update configuration items (CIs); retrieve parent/child CI relationships.
System Administration: Query system properties, get current user info, and retrieve table schemas/data dictionary.
Update Sets: List, get, create, set as current, and list changes within update sets.
Resources: Read-only MCP resources for table schema, instance info, current update set, CMDB class hierarchy, and query syntax reference.
Auth & Transport: Supports Basic, OAuth 2.1+PKCE, and API key authentication; works over stdio or Streamable HTTP; deployable via Docker or Cloud Run.
Claude Code Integration: Plugin with slash commands, guided skills (CMDB health analysis, schema exploration, update set review, incident triage), and an autonomous admin agent for complex multi-step operations.
Compatibility: Works with ServiceNow Tokyo and later, no Now Assist SKU required.
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., "@ServiceNow MCP ServerList the 5 most recent incidents"
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.
Table API · CMDB · Update Sets · Aggregation · Resources · Read-only mode · Audit log · OAuth 2.1+PKCE · Streamable HTTP · Claude Code Plugin · 4 Skills
What This Does
This MCP server gives AI assistants the raw ServiceNow data plane: any table via the Table API, the data dictionary (with inherited fields), Stats API aggregates, CMDB classes and relationships, and update sets. 19 tools and 5 resources, with tool annotations, an optional read-only mode, table allow/deny lists, hardened encoded queries, and a JSON audit line per call.
Built with FastMCP 4.0 — speaks both the stateless MCP 2026-07-28 protocol and the legacy handshake, negotiated per connection.
Related MCP server: ServiceNow MCP Server
Alongside ServiceNow's native MCP Server
ServiceNow's MCP Server Console (Action Fabric) exposes Now Assist skills, Knowledge Graph, flows, scripted REST and playbooks as governed tools — and excludes the Table API by design ("cannot be converted to MCP tools regardless of configuration"). This project is the other half: the developer loop that native does not serve. ServiceNow's own CEG AI CoE guide lists uvx mcp-server-servicenow as its community "Path C".
Native MCP Server Console | This project | |
Tool sources | Now Assist skills, Knowledge Graph, subflows/actions, scripted REST (GET/POST/PUT), playbooks, MCP Apps | Table API CRUD, Stats API aggregates, |
Table API | Excluded by design | Any table, any field |
Minimum release | Zurich P9 / Australia P2 for custom tools | Tokyo+ |
Entitlement | Now Assist / AI-Native SKU (docs: Prime for inbound); metered in assists | MIT, $0, your own compute |
PDIs / GCC | Not available | Works |
Auth | OAuth 2.0 auth-code via Machine Identity Console (JWT, no DCR) | OAuth 2.1 + PKCE proxy (DCR + CIMD), static tokens, or a service account |
Governance | AI Control Tower / AI Gateway | Self-managed: |
Transport | Streamable HTTP only | stdio + Streamable HTTP |
Resources / prompts | Roadmap | 5 resources |
Run both. Native tells Claude what ServiceNow means (skills, summaries, semantic search); this server tells Claude what ServiceNow contains (rows, schema, aggregates, update sets). No tool-name collisions today.
Getting Started
1. Get a ServiceNow Instance
Sign up for a free Personal Developer Instance (PDI) — it comes pre-loaded with demo data. Wake it from the developer portal if it's hibernating.
Note: Instances with ServiceNow's basic-auth restriction enforced (the default on new PDIs since mid-2026) reject REST basic auth with
401 "Required to provide Auth information"unless the integration user has thesnc_basic_auth_api_accessrole. Grant it via User Administration → Users → your user → Roles.
2. Install
# From PyPI (recommended)
pip install mcp-server-servicenow
# Or run directly with uvx (no install needed)
uvx mcp-server-servicenow --help3. Configure Your MCP Client
Copy .mcp.json.example to .mcp.json and fill in your credentials, or use the Claude Code CLI:
claude mcp add servicenow -- uvx mcp-server-servicenow \
--instance-url https://your-instance.service-now.com \
--auth-type basic --username admin --password your-password4. Verify
Ask Claude: "List the 5 most recent incidents" — if it returns data, you're connected.
From Source
git clone https://github.com/jschuller/mcp-server-servicenow.git
cd mcp-server-servicenow
pip install -e .
# Run with stdio (Claude Desktop / Claude Code)
mcp-server-servicenow \
--instance-url https://your-instance.service-now.com \
--auth-type basic \
--username admin \
--password your-password
# Or run with HTTP (remote access / Cloud Run).
# An HTTP listener fails closed: it needs MCP endpoint auth on top of the
# ServiceNow credentials, otherwise the server refuses to start. Static
# bearer tokens below; see docs/deployment.md for OAuth 2.1 + PKCE.
mcp-server-servicenow \
--transport streamable-http \
--port 8080 \
--mcp-static-tokens "$(openssl rand -hex 32)" \
--instance-url https://your-instance.service-now.com \
--auth-type basic \
--username admin \
--password your-passwordAvailable Tools
Table API (6 tools)
Tool | Description |
| List records from any table with filtering, field selection, and pagination |
| Get a single record by sys_id |
| Create a new record in any table |
| Update an existing record (optional confirmation, see below) |
| Delete a record by sys_id (optional confirmation, see below) |
| COUNT, AVG, MIN, MAX, SUM with GROUP BY + HAVING via Stats API |
CMDB (5 tools)
Tool | Description |
| List configuration items with class and query filtering |
| Get a single CI by sys_id |
| Create a new configuration item |
| Update a configuration item (optional confirmation, see below) |
| Get parent/child relationships for a CI (paged: |
System (3 tools)
Tool | Description |
| Query system properties |
| Get authenticated user info |
| Table data dictionary incl. inherited fields ( |
Update Sets (5 tools)
Tool | Description |
| List update sets with state filtering |
| Get update set details |
| Create a new update set |
| Set the active update set |
| List changes within an update set |
Resources
MCP Resources provide read-only context that LLM clients can fetch without tool calls — reducing latency and token overhead.
Resource URI | Description |
| Field definitions (name, type, label, mandatory, reference, defined_in) for any table, parents included |
| Instance URL, platform version, logged-in user, timezone |
| Currently active update set name, sys_id, state |
| CMDB CI class hierarchy (names, labels, parent classes) |
| Encoded query operators reference (prevents hallucinated syntax) |
Safety & governance
Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) so clients such as Claude Code can apply their own permission policy. On top of that, the server ships its own guardrails — all off by default except the audit log:
Flag | Env var | Effect |
|
| Hides the 7 write tools from |
|
| Only these tables (exact or glob) may be accessed — applies to |
|
| These tables may never be accessed; wins over the allowlist |
(always on) | — | Table names, sys_ids, field lists and |
|
| Re-enable arbitrary |
|
| Ask the user before |
|
| One JSON line per tool call / resource read (default: stderr) |
An audit line (keys only — never values):
{"ts":"2026-08-22T19:04:11.512+00:00","run_id":"…","event":"tool_call","name":"update_record","user":"admin","auth_mode":"service-account","transport":"stdio","table":"incident","sys_id":"9d385017c611228701d22104cc95c371","data_keys":["state"],"tags":["table","write"],"outcome":"ok","duration_ms":212.4}Write confirmation (opt-in)
With --write-confirm, the three destructive tools fetch the record's current values and ask the user before writing:
Claude Code (stdio, handshake-era protocol) and Cursor render the prompt as a dialog (
elicitation/create). Decline stops the write; the assistant is told not to retry.2026-07-28 clients get the same prompt as a multi round-trip
InputRequiredResult; the server never sends one to a client that has not declared elicitation.Claude Desktop / Cowork, claude.ai connectors and headless runs cannot show the prompt (Desktop answers with a synthetic cancel). They receive a
confirmation_requirederror carrying the preview; the assistant shows it and re-runs withconfirm=true.
It is off by default because the MCP client's own permission prompt is the primary human-in-the-loop, and because automation cannot answer a dialog. Enable it where an AI Steward wants a second gate.
Architecture
graph TD
CC["MCP Client"]
subgraph SERVER["FastMCP 4.0"]
TT["table_tools (6)"]
CT["cmdb_tools (5)"]
ST["system_tools (3)"]
UT["update_set_tools (5)"]
RS["resources (5)"]
SNR["make_sn_request"]
end
subgraph AUTH["Auth + HTTP"]
AM["auth_manager"]
AR["api_request"]
end
SN["ServiceNow Instance"]
CC -->|"stdio / Streamable HTTP"| SERVER
TT --> SNR
CT --> SNR
ST --> SNR
UT --> SNR
RS --> SNR
SNR --> AR
AM -.->|"credentials"| AR
AR -->|"REST API"| SNConfiguration
Add to your MCP client config — copy the snippet for your tool:
claude mcp add servicenow -- uvx mcp-server-servicenow \
--instance-url https://your-instance.service-now.com \
--auth-type basic --username admin --password your-passwordAdd to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"servicenow": {
"command": "uvx",
"args": ["mcp-server-servicenow"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_AUTH_TYPE": "basic",
"SERVICENOW_USERNAME": "admin",
"SERVICENOW_PASSWORD": "your-password"
}
}
}
}Add to .cursor/mcp.json or .vscode/mcp.json:
{
"mcpServers": {
"servicenow": {
"command": "uvx",
"args": ["mcp-server-servicenow"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_AUTH_TYPE": "basic",
"SERVICENOW_USERNAME": "admin",
"SERVICENOW_PASSWORD": "your-password"
}
}
}
}See Configuration Guide for OAuth, multi-instance, and the full environment variable reference.
Deployment
See Deployment Guide — Docker, Cloud Run, HTTP transport verification, and the security model.
Troubleshooting
See TROUBLESHOOTING.md for common issues (hibernating instances, 401 errors, OAuth).
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run unit tests
python -m pytest tests/ -v --ignore=tests/integration
# Run integration tests (requires PDI credentials)
# Option 1: Create .env.test (gitignored, auto-loaded)
cp .env.example .env.test # then fill in your credentials
python -m pytest tests/integration/ -v
# Option 2: Inline env vars
SERVICENOW_INSTANCE_URL=https://your-pdi.service-now.com \
SERVICENOW_USERNAME=admin SERVICENOW_PASSWORD=your-password \
python -m pytest tests/integration/ -v
# Lint
ruff check src/ tests/Skills (Claude Code)
This project ships 4 Claude Code skills in skills/ (installed via the plugin, not the PyPI package) — guided workflows that chain MCP tools for common ServiceNow tasks. Skills auto-trigger from natural conversation or can be invoked directly.
Skill | What It Does | Try Saying |
servicenow-cmdb | CI classes, dependencies, CMDB health, data quality, CSDM compliance | "show me CMDB health" / "what depends on this server" |
exploring-tables | Schema discovery, field types, data profiling, table comparison | "what fields does incident have" / "find tables matching cmdb" |
reviewing-update-sets | Update set review, risk flagging, conflict detection, pre-promotion checks | "review my update sets" / "is this safe to promote" |
triaging-incidents | Incident triage, priority assessment, CI correlation, bulk analysis | "what's on fire" / "open P1 incidents" |
The update set reviewer is a unique differentiator — no other open-source ServiceNow MCP server provides guided update set review workflows with risk categorization and pre-promotion checklists.
Claude Code Plugin
Install as a Claude Code plugin for zero-config setup — the MCP server, skills, slash commands, and admin agent are bundled together.
Prerequisites
Set these environment variables (or add them to your shell profile):
export SERVICENOW_INSTANCE_URL="https://your-instance.service-now.com"
export SERVICENOW_AUTH_TYPE="basic" # or "oauth"
export SERVICENOW_USERNAME="admin"
export SERVICENOW_PASSWORD="your-password"
# For OAuth only:
export SERVICENOW_CLIENT_ID="your-client-id"
export SERVICENOW_CLIENT_SECRET="your-client-secret"Install from Git
claude plugin marketplace add jschuller/mcp-server-servicenow
claude plugin install servicenow@mcp-server-servicenowInstall Locally (development)
claude --plugin-dir /path/to/mcp-server-servicenowSlash Commands
Command | Description |
| Triage incidents — list, investigate, assess priority, analyze trends |
| Explore CMDB — CI hierarchy, dependencies, health, CSDM taxonomy |
| Review update sets — deep review, compare, pre-promotion checks |
| Explore tables — schema, fields, data profiling, table search |
Agent
The servicenow-admin agent handles complex multi-step tasks autonomously (CMDB audits, incident trend reports, batch update set reviews). Claude can spawn it as a background worker for long-running analysis.
Note: The plugin auto-configures the MCP server — no manual
.mcp.jsonsetup required.
Roadmap
Phase 1 ✅ Foundation — 18 tools, OAuth retry, structured error handling
Phase 2 ✅ Remote access — FastMCP 3.0, Streamable HTTP, Cloud Run deployment
Phase 3 ✅ Security — OAuth 2.1 + PKCE proxy, per-user SN auth, matches native Zurich model
Phase 4 ✅ Skills & workflows — 4 Claude Code skills (CMDB, table explorer, update set reviewer, incident triage)
Phase 4.5 ✅ Plugin packaging — Claude Code plugin with slash commands, admin agent, zero-config install
Phase 5 ✅ Distribution — PyPI package, MCP Registry, automated publish workflows
Sprint 2 ✅ FastMCP 3.1.1 — MultiAuth, token caching, connection pooling, response limiting, tool tags
Sprint 3 ✅ Resources + Aggregation — 5 MCP resources,
aggregate_recordsStats API toolv0.6.0 ✅ FastMCP 4.0 — MCP 2026-07-28 stateless protocol support, fail-closed HTTP hardening, community fixes
v0.6.1 ✅ OAuth ROPC timeout + refresh-token grant, mypy in CI, dependency refresh
v0.7.0 ✅ Safety & governance — tool annotations, read-only mode, table allow/deny lists, opt-in destructive-call confirmation, JSON audit log, schema inheritance
Next — "Run alongside native" guide, MCP prompts from the skills, per-token scopes over HTTP, developer-plane tools (system logs, health checks)
Related Projects
sn-app-template — ServiceNow scoped app template for Claude Code + now-sdk. Pairs with this MCP server for AI-assisted development.
License
Available Tools
19 toolsaggregate_recordsAggregate RecordsARead-onlyIdempotent
Aggregate records using COUNT, AVG, MIN, MAX, SUM with optional GROUP BY via the Stats API
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Include record count in results | |
| query | No | Encoded query string to filter records before aggregation | |
| having | No | Post-aggregation filter (e.g., 'COUNT>5') | |
| group_by | No | Comma-separated fields to group results by (e.g., 'priority,state') | |
| avg_fields | No | Comma-separated fields to average (e.g., 'reassignment_count,reopen_count') | |
| max_fields | No | Comma-separated fields to find maximum values | |
| min_fields | No | Comma-separated fields to find minimum values | |
| sum_fields | No | Comma-separated fields to sum | |
| table_name | Yes | The ServiceNow table name (e.g., 'incident', 'cmdb_ci') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as readOnly, idempotent, and non-destructive, and the description does not contradict these traits. The description adds 'via the Stats API' but does not describe side effects, response format, or other behavioral details beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that directly states the operation, supported aggregate functions, optional grouping, and underlying API. It contains no redundant words or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema and readOnly/idempotent annotations, the description is sufficient to select and invoke the tool for aggregate queries. It does not describe the exact Stats API response shape, but no output schema is provided and the input semantics are fully covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, including examples for fields like group_by and avg_fields, so the tool description adds little parameter-level meaning. The description's aggregate function list maps naturally to count/avg_fields/max_fields/min_fields/sum_fields, but this is already evident from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (aggregate), the target (records), and the supported operations (COUNT, AVG, MIN, MAX, SUM with optional GROUP BY). It is specific enough to distinguish this from sibling tools like list_records, get_record, create_record, update_record, and delete_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 summary statistics rather than raw record retrieval by mentioning aggregate functions and the Stats API. However, it does not explicitly contrast this with list_records/get_record or state when not to use the tool, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ciCreate CiA
Create a new CMDB configuration item
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | CI attributes as key-value pairs (must include 'name') | |
| class_name | No | CMDB class name | cmdb_ci |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint false, destructiveHint false) by indicating a write operation, but adds no additional behavioral details such as side effects, permissions, or idempotency beyond what the annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the tool's purpose without any unnecessary words or fluff, 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 create operation with a well-specified schema, the description is sufficient. It could mention the required 'name' field but that is already in the schema, so completeness is strong. The lack of an output schema means no return value explanation is needed.
Complex tools with many parameters or behaviors need more documentation. 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 already describes both parameters (data with 'must include name', class_name with default), achieving 100% coverage. The tool description adds no extra parameter semantics, keeping the baseline at 3.
Input schemas describe structure but not intent. Descriptions should explain non-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 'CMDB configuration item', distinguishing it from sibling tools like list_ci, get_ci, and update_ci. This is a specific and unambiguous 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 usage (when you need to create a new CI) but provides no explicit guidance on when to use this tool over alternatives like create_record or update_ci. The intent is clear from the wording but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recordCreate RecordB
Create a new record in any ServiceNow table
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Record field values as key-value pairs | |
| table_name | Yes | The ServiceNow table name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the write nature is known. The description adds no further behavioral context—no mention of idempotency, duplicate handling, required permissions, or side effects beyond creating a record.
Agents need to know what a tool does to the 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 zero extraneous content. It conveys the essential purpose 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 create operation with two parameters and no output schema, the description is minimally sufficient. However, it lacks any mention of return behavior or edge cases (e.g., what happens if the table doesn't exist), which would be useful given the tool's generic scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'data' and 'table_name' having clear descriptions. The tool description adds no parameter-specific guidance, so it 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 the action 'create' and the resource 'a new record in any ServiceNow table', which distinguishes it from specific create tools like create_ci. However, it does not explicitly name alternatives, so it misses the top tier for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as update_record or create_ci. It does not mention prerequisites, error conditions, or when a different tool 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.
create_update_setCreate Update SetA
Create a new update set for tracking customizations
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the update set | |
| parent | No | Parent update set sys_id (for batch sets) | |
| description | No | Description of the update set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is a write operation (readOnlyHint=false) and not idempotent (idempotentHint=false). The description adds no further behavioral context such as required permissions, duplicate handling, or side effects. It is not misleading but does not go beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no unnecessary words. It efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with no output schema, the description is mostly complete. It explains what the tool does and the purpose. However, it does not mention the return value (e.g., the new sys_id) or any potential failure modes, which would be useful but not essential for this straightforward operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters (name, parent, description) with descriptions, giving 100% coverage. The tool description provides no additional meaning or constraints beyond what is already in the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create), the resource (update set), and the purpose (tracking customizations). It is easily distinguished from sibling tools like get_update_set and list_update_sets, which are read operations, and create_record, which targets a different resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. While the resource type (update set) differentiates it from create_record or create_ci, there is no direct mention of when this should be preferred or what prerequisites exist (e.g., must have an active update set).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recordDelete RecordADestructiveIdempotent
Delete a record from a ServiceNow table by sys_id
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the record to delete | |
| confirm | No | Acknowledge this destructive change. Only consulted when the server runs with --write-confirm and the client cannot show a confirmation dialog; ignored otherwise. | |
| table_name | Yes | The ServiceNow table name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explaining the behavior of the confirm parameter, including the server condition and when it is ignored. It does not disclose other side effects (e.g., permanent deletion, cascade effects) but annotations already mark it as destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise purpose statement plus a brief, necessary clarification of the confirm parameter. No redundant information or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive operation, the description covers purpose, key parameters, and a behavioral nuance. It omits failure/return behavior, but this is acceptable given the absence of an output schema and the tool's straightforward nature.
Complex tools with many parameters or behaviors need more documentation. 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 table_name and sys_id adequately, and the tool description adds valuable detail about confirm behavior. However, no further semantics are provided for the other two 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 ('delete') and the resource ('a ServiceNow table by sys_id'), fully distinguishing it from sibling tools like list_records, get_record, create_record, and update_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 for removing a record but does not explicitly state when to prefer it over alternatives (e.g., updating a status flag) or mention any conditions for use. The verb 'delete' is intuitive but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ciGet CiARead-onlyIdempotent
Get a single CMDB configuration item by sys_id
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the CI | |
| class_name | No | CMDB class name | cmdb_ci |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior, so the bar is lower. The description does not add extra behavioral details (e.g., return format, errors) but does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary information. The schema is compact and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation, the description provides enough context. The absence of an output schema is acceptable for a get operation, and the tool's purpose is fully conveyed. A small addition about what it returns would make it 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?
Both parameters have descriptions (100% schema coverage), so baseline is 3. The descriptions are minimal but sufficient for understanding the parameters' purpose, though they lack details like format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('CMDB configuration item'), and the identifier method ('by sys_id'). This effectively distinguishes it from sibling tools like list_ci, create_ci, and get_ci_relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by sys_id' implies usage when the specific identifier is known, providing implicit guidance. However, it does not explicitly contrast with alternatives like get_record or list_ci, which would make the when-to-use even clearer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ci_relationshipsGet Ci RelationshipsARead-onlyIdempotent
Get relationships for a CMDB configuration item (parent and child)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of relationships to return | |
| offset | No | Number of relationships to skip | |
| sys_id | Yes | The sys_id of the CI | |
| relation_type | No | Filter by relationship type sys_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the annotations (readOnlyHint, idempotentHint, destructiveHint=false). It does not add extra behavioral detail beyond the annotations, but no contradiction exists, so it meets the baseline.
Agents need to know what a tool does to the 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. It efficiently captures the tool's purpose without extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While there is no output schema, the description gives context by mentioning 'parent and child', which helps understand the nature of the returned relationships. It is mostly complete for a straightforward get operation, though it does not specify the exact response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters (sys_id, relation_type, limit, offset) have descriptions in the schema, providing full coverage. The description does not add additional semantic meaning 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 clearly states the tool retrieves relationships for a CMDB configuration item, specifying both parent and child relationships. It is distinct from sibling tools like get_ci (which fetches a single CI) and list_ci (which lists CIs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the basic function but does not explicitly state when to use this tool over alternatives (e.g., when to use get_ci_relationships vs list_ci). It implies usage for relationship data but lacks explicit guidance on selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userGet Current UserARead-onlyIdempotent
Get the currently authenticated user's information
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return (default: user_name,name,email,roles) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, which cover the primary behavioral traits. The description adds no conflicting or additional side effects. However, it does not describe the exact return format (e.g., single object, field availability), but this is a minor gap given the simplicity of a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence that conveys the entire purpose without any fluff. It is appropriately brief for a simple getter tool, making it efficient for an agent 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?
Given the tool's simplicity and the absence of an output schema, the description is sufficient for an agent to understand its function. It does not mention edge cases like unauthenticated users, but such details are not critical for selecting and invoking this tool. Overall, the description provides complete context for its intended 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 schema fully describes the single optional 'fields' parameter, including its type, default value, and meaning. Since schema coverage is 100%, the description adds no extra semantic value beyond what is already provided, placing this at the baseline 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 explicitly states the tool's function: retrieving the currently authenticated user's information. This is a clear, specific action that distinguishes it from sibling tools like get_record or get_ci, which operate on different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but does not explicitly indicate when to prefer it over alternatives or mention any prerequisites (e.g., authentication required). While the name is self-explanatory, the lack of usage context or comparison to sibling tools leaves the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordGet RecordARead-onlyIdempotent
Get a single record from a ServiceNow table by sys_id
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated list of fields to return | |
| sys_id | Yes | The sys_id of the record | |
| table_name | Yes | The ServiceNow table name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint, idempotentHint, and destructiveHint annotations; it clearly indicates a read operation. It does not mention missing-record behavior or field selection defaults, but the annotations already cover the side-effect profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single focused sentence with no filler, repetitions, or unnecessary details. It gets straight to the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID operation with read-only annotations, the description is adequate. It lacks explicit return format or error behavior, but those are not critical given the low complexity and clear schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema, so the description adds no extra semantic detail beyond restating that lookup is by sys_id. Baseline 3 is appropriate given 100% 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?
Clearly states the action (Get), the resource (a single record from a ServiceNow table), and the key identifier (sys_id). This differentiates it from list_records, get_ci, and get_update_set without needing to inspect sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when fetching one record by sys_id, but it does not explicitly state when to prefer this tool over list_records or when not to use it. No alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_propertiesGet System PropertiesBRead-onlyIdempotent
Query ServiceNow system properties
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of properties to return | |
| query | No | Filter query (e.g., 'name=glide.servlet.uri' or 'nameLIKEglide') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not contradict the annotations (read-only, idempotent, non-destructive) and the verb 'query' aligns with them. However, it adds no additional behavioral context such as error handling, rate limits, or side effects, so it stays at the baseline.
Agents need to know what a tool does to the 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 that immediately conveys the tool's purpose. There is no unnecessary verbosity, and the core information 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 tool is straightforward and the description covers the basic action. However, it does not specify the return format (e.g., list vs. single object) or any pagination behavior, which could be relevant for an agent calling this tool. Given the simplicity, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for both parameters (limit and query), including an example for the query filter. The tool description adds no extra clarification, so it does not exceed the baseline expected from 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 the tool queries ServiceNow system properties, and the tool name reinforces this. However, it does not elaborate on what constitutes a system property or the shape of the response, leaving some 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 sibling tools such as list_records or get_record. While the tool name implies specificity to system properties, an agent might still be uncertain about the exact boundary of its applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_schemaGet Table SchemaARead-onlyIdempotent
Get the data dictionary (field definitions) for a ServiceNow table, including inherited fields
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of fields to return (own fields first, then inherited) | |
| table_name | Yes | The table name to get schema for | |
| include_inherited | No | Include fields inherited from parent tables (e.g. task fields on incident) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint: true, idempotentHint: true, destructiveHint: false) already disclose that this is a safe, read-only operation. The description adds behavioral context by specifying that inherited fields are included in the result, going slightly beyond the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately states the core purpose. It avoids unnecessary wording, includes the key qualifier (including inherited fields), and follows a clear structure without any redundancy or tangential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description indicates the output type (data dictionary / field definitions) but does not specify the exact structure or format of the returned data (e.g., list, object). Given that no output schema is provided, this slight gap is acceptable for a simple read-only operation, but a more explicit return format 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?
All three parameters have descriptive comments in the schema, fully covering their semantics. The limit parameter even explains ordering (own fields first, then inherited), and include_inherited is clarified with an example ('e.g. task fields on incident'). Schema coverage is 100%, and the descriptions are meaningful and unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving the data dictionary (field definitions) for a ServiceNow table. It uses a specific verb ('get') and a specific resource ('data dictionary'), and explicitly notes that inherited fields are included, which distinguishes it from record-fetching tools like get_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 mention when to use this tool versus alternatives, but the purpose is sufficiently distinct from sibling tools (such as get_record or list_records) that usage can be inferred. It lacks explicit conditional guidance like 'use this instead of X when…', so it falls short of the highest standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_update_setGet Update SetARead-onlyIdempotent
Get details of a specific update set by sys_id
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the update set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral details beyond confirming it is a read operation, which is consistent with annotations. It does not describe return format or error handling, but given the annotation coverage, a baseline 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the verb and resource. It contains no filler or redundant information, 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?
The tool has only one parameter and no output schema, and the description plus annotations fully convey its purpose and safety. An agent can correctly invoke it with just the sys_id, and the read-only, idempotent nature is already declared. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter 'sys_id' is fully documented in the schema. The description mentions 'by sys_id' but does not add additional meaning, such as format requirements or special cases. With high coverage, the baseline of 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-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 'Get details' with the specific resource 'update set' and identifies the key parameter 'sys_id'. It distinguishes itself from sibling tools like 'list_update_sets' (which lists) and 'get_record' (generic), 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 the tool is used to retrieve details of a specific update set, but it does not explicitly mention when to use it over alternatives or provide exclusions. There is no guidance on how it compares to sibling tools like 'list_update_sets' or 'get_record'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ciList CiARead-onlyIdempotent
List CMDB configuration items with optional class and query filtering
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of CIs to return | |
| query | No | Encoded query string (e.g., 'operational_status=1') | |
| fields | No | Comma-separated list of fields to return | |
| offset | No | Number of records to skip | |
| class_name | No | CMDB class name (e.g., 'cmdb_ci', 'cmdb_ci_server', 'cmdb_ci_computer') | cmdb_ci |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint false. The description simply says 'List', which is consistent but adds no additional behavioral context. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly conveys the tool's purpose without unnecessary detail or 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?
For a simple list operation, the description is adequate. It doesn't specify return format, but the tool name and description imply a list of CIs. Since there is no output schema, this is not a critical omission, though a note on pagination could be helpful.
Complex tools with many parameters or behaviors need more documentation. 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 provides full descriptions for all five parameters (limit, query, fields, offset, class_name), covering 100% of the parameters. The description text does not add extra meaning beyond what the schema already conveys, so a baseline score 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 tool's function: listing CMDB configuration items. It specifies the resource (CMDB configuration items) and the action (List), and mentions optional class and query filtering, which distinguishes it from generic list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing CIs with class or query filters, but does not explicitly state when to use it over alternatives like list_records. However, the mention of class and query filtering provides clear context for its specialized purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recordsList RecordsARead-onlyIdempotent
List records from any ServiceNow table with optional filtering, field selection, and pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return | |
| query | No | Encoded query string (e.g., 'active=true^priority=1') | |
| fields | No | Comma-separated list of fields to return | |
| offset | No | Number of records to skip | |
| order_by | No | Field to order results by (prefix with '-' for descending) | |
| table_name | Yes | The ServiceNow table name (e.g., 'incident', 'sys_user', 'cmdb_ci') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior; the description aligns with this. It does not add extra context about authentication, rate limits, or other side effects, but no contradictions 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 sentence that efficiently summarizes the tool's purpose and key capabilities without unnecessary wording or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple shape of the tool, the fully described parameters, and the read-only annotations, the description is complete enough for an agent to understand what the tool does and how to invoke it. No output schema is present, but 'List records' sufficiently implies the return style.
Complex tools with many parameters or behaviors need more documentation. 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 covers 100% of parameters with descriptions, so the baseline applies. The description adds a high-level summary of filtering, field selection, and pagination but does not provide additional detail beyond the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists records from any ServiceNow table and mentions optional filtering, field selection, and pagination. This distinguishes it from sibling tools like get_record, create_record, list_ci, and list_update_sets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 conveys the tool's capabilities but does not explicitly explain when to use it versus sibling list tools or get_record. There is no direct when-to-use or when-not-to-use guidance beyond the general 'any ServiceNow table' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_update_set_changesList Update Set ChangesARead-onlyIdempotent
List all customer updates (changes) within an update set
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of changes to return | |
| update_set_sys_id | Yes | The sys_id of the update set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description's 'List' wording is consistent with those. It adds the scope ('within an update set') without contradicting annotations, though it does not provide extra behavioral detail such as ordering or empty-result 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, direct sentence with no redundant or promotional language. It is appropriately concise for the tool's simple 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 two-parameter read-only listing tool, the description is mostly sufficient. However, with no output schema, it does not clarify the return format, fields, or pagination behavior, which could leave some ambiguity about what 'changes' includes.
Complex tools with many parameters or behaviors need more documentation. 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 covers both parameters with concise descriptions, so the description adds little beyond the schema. The semantics of 'update_set_sys_id' are fairly self-explanatory, but no additional context is given about how the limit affects results or what kind of identifier is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('customer updates within an update set'), which distinguishes it from sibling tools like list_update_sets and list_records. The term 'customer updates (changes)' is slightly jargon-heavy but understandable in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as list_records or get_update_set. The description implies a straightforward listing operation but does not state conditions or contexts where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_update_setsList Update SetsARead-onlyIdempotent
List update sets with optional state and query filtering
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of update sets to return | |
| query | No | Filter query (e.g., 'state=in progress', 'nameLIKErelease') | |
| state | No | Filter by state: 'in progress', 'complete', 'ignore', or 'default' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description is consistent with readOnlyHint and idempotentHint, but adds no extra behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence, directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Clearly indicates the purpose and scope, though it does not describe the output format; acceptable for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers parameter descriptions fully, so the tool description adds minimal extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists update sets and mentions optional filtering, distinguishing it from related tools like list_update_set_changes and get_update_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides basic context on filtering options but does not explicitly guide when to choose this over alternative listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_current_update_setSet Current Update SetAIdempotent
Set an update set as the current active update set
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the update set to make current |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is a non-readonly, idempotent, non-destructive operation. The description adds no further behavioral details, such as whether the change is persistent or affects the current session, which could be useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It is well-structured and immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description is largely sufficient. It could be slightly more informative about what constitutes 'current active' or any side effects, but overall it provides enough 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?
The only parameter sys_id is described directly in the schema, and the description does not add extra semantic meaning beyond what is already provided. Since schema coverage is 100%, 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 clearly states the action: setting an update set as the current active one. The verb 'set' and the resource 'update set' are explicit, and the tool is easily distinguished from siblings like create_update_set or list_update_sets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
When to use this tool versus alternatives is implied by the name and description, but not explicitly stated. The description does not say 'use this to switch the active update set' or mention that create_update_set is for new ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ciUpdate CiCDestructiveIdempotent
Update a CMDB configuration item
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | CI attributes to update | |
| sys_id | Yes | The sys_id of the CI to update | |
| confirm | No | Acknowledge this destructive change. Only consulted when the server runs with --write-confirm and the client cannot show a confirmation dialog; ignored otherwise. | |
| class_name | No | CMDB class name | cmdb_ci |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveness and read-only status, but the description adds nothing about side effects, confirmation behavior, or idempotency. It relies entirely on 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?
Single, concise sentence that is front-loaded with the action and object. Efficient, though it provides minimal information beyond the bare 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?
Lacks any mention of expected output, error conditions, or confirmation flow. The nested 'data' object and destructive hint are not addressed in the description, leaving significant gaps for an AI 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 covers all four parameters with descriptions, but the description does not clarify whether 'data' is a partial update or full replacement, or how 'confirm' interacts with destructive changes. Meets baseline for full schema coverage but no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('update') and resource ('CMDB configuration item'), but does not differentiate from the generic 'update_record' sibling tool. It is clear enough for a CI-specific 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?
No guidance on when to use this vs. alternatives like 'update_record' or 'create_ci'. The description lacks any context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recordUpdate RecordADestructiveIdempotent
Update an existing record in a ServiceNow table
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Fields to update as key-value pairs | |
| sys_id | Yes | The sys_id of the record to update | |
| confirm | No | Acknowledge this destructive change. Only consulted when the server runs with --write-confirm and the client cannot show a confirmation dialog; ignored otherwise. | |
| table_name | Yes | The ServiceNow table name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=true, and the description action 'Update' aligns with those. However, the description itself adds no extra behavioral context, such as side effects, confirmation behavior, or whether the record must already exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler or redundant information. It efficiently conveys the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a basic update operation, but it omits details about the return value, error behavior, or any post-update effects. Given there is no output schema, some mention of what the caller should expect 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 each parameter individually described in the input schema. The tool description adds no extra parameter meaning beyond what the schema already provides, so a baseline score 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 a specific action ('Update') and resource ('existing record in a ServiceNow table'), which distinguishes it from sibling tools like create_record, get_record, and delete_record without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to prefer this tool over alternatives, such as using create_record for new records or delete_record for removals. It also does not mention the destructive nature or confirmation flow, leaving the agent to infer usage context.
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.
19 tool updates
v0.7.0- Changed
aggregate_records1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
create_ci1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
create_record1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
create_update_set1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
delete_record2 fields changed- added
Input schema / properties / confirmAdded value: +{ + "default": false, + "description": "Acknowledge this destructive change. Only consulted when the server runs with --write-confirm and the client cannot show a confirmation dialog; ignored otherwise.", + "type": "boolean" +} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
get_ci1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
get_ci_relationships3 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 100, + "description": "Maximum number of relationships to return", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Number of relationships to skip", + "minimum": 0, + "type": "integer" +} - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
get_current_user1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
get_record1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
get_system_properties1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
get_table_schema5 fields changed- added
Input schema / properties / include_inheritedAdded value: +{ + "default": true, + "description": "Include fields inherited from parent tables (e.g. task fields on incident)", + "type": "boolean" +} - changed
Input schema / properties / limit / defaultPrevious value: -50New value: +200 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of fields to return"New value: +"Maximum number of fields to return (own fields first, then inherited)" - changed
Input schema / properties / limit / maximumPrevious value: -500New value: +1000 - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
get_update_set1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
list_ci1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
list_records1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
list_update_set_changes1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
list_update_sets1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
set_current_update_set1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
update_ci2 fields changed- added
Input schema / properties / confirmAdded value: +{ + "default": false, + "description": "Acknowledge this destructive change. Only consulted when the server runs with --write-confirm and the client cannot show a confirmation dialog; ignored otherwise.", + "type": "boolean" +} - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
- Changed
update_record2 fields changed- added
Input schema / properties / confirmAdded value: +{ + "default": false, + "description": "Acknowledge this destructive change. Only consulted when the server runs with --write-confirm and the client cannot show a confirmation dialog; ignored otherwise.", + "type": "boolean" +} - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "type": "object" -}New value: +null
19 tool updates
v0.5.1- First observed
aggregate_records - First observed
create_ci - First observed
create_record - First observed
create_update_set - First observed
delete_record - First observed
get_ci - First observed
get_ci_relationships - First observed
get_current_user - First observed
get_record - First observed
get_system_properties - First observed
get_table_schema - First observed
get_update_set - First observed
list_ci - First observed
list_records - First observed
list_update_set_changes - First observed
list_update_sets - First observed
set_current_update_set - First observed
update_ci - First observed
update_record
TDQS
Scored across 19 tools
Tools are mostly distinct, with clear separation between generic record operations and specialized update set/CI operations. Some potential overlap exists (e.g., list_records vs list_update_set_changes) but descriptions clarify intent.
All tools follow a consistent verb_noun pattern (create, set, list, get, update, delete, aggregate). Even complex nouns like update_set_changes maintain the pattern. No mixed conventions.
At 19 tools, the count is slightly above the typical 3-15 range but justified by covering generic record CRUD, update set lifecycle, CI management, and system utilities. Each tool serves a clear purpose, though a few could be merged without loss.
The service covers core CRUD for records, update sets, and CIs, plus schema, user, and property access. Minor gaps include lack of update set deletion and no mutation for CI relationships, but primary workflows are well supported.
Maintenance
Related MCP Connectors
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
AI Visibility and Content Intelligence tools for Claude and MCP-compatible agents.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables Claude to interact with ServiceNow instances through comprehensive API integration. Supports incident management, service catalog operations, change requests, knowledge base management, user administration, and agile project management with multiple authentication methods.82MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API, allowing data retrieval, record management, and workflow execution. Supports multiple authentication methods and tool packaging for role-based access control.MIT
- AlicenseCqualityAmaintenanceEnables AI to interact with ServiceNow instances via MCP, providing 400+ tools across all modules for automation, development, and management.500805 npm17Elastic 2.0
- AlicenseCqualityBmaintenanceEnables natural language control of ServiceNow from AI clients like Claude and Cursor. Provides 400+ tools for incidents, changes, CMDB, and scripts via MCP protocol.100286 npm2MIT