now-sdk-ext-mcp
Script Execution: Execute server-side JavaScript with full GlideSystem API access, supporting scope selection and parameter substitution.
Data Operations: Query any table with encoded queries; perform CRUD, batch create/update/delete, bulk operations with dry-run; run aggregate functions (MIN, MAX, SUM, AVG, COUNT) with grouping; import/export XML.
Schema & Metadata Discovery: Look up tables, columns, and full schemas; explain fields; list all instance tables with filtering.
Application & Plugin Management: Install, update, and publish applications from/to ServiceNow Store and company repositories; validate installations; list and search apps and plugins.
Update Sets: Create, clone, inspect, and manage update sets; move records between them.
Code Management: Search code instance-wide; manage code search groups; pull and push scripts (Script Includes, Business Rules, UI scripts, etc.) between local and ServiceNow.
CMDB: Retrieve direct CI relationships (upstream/downstream) and traverse the CMDB graph up to 5 levels for impact analysis.
ITSM Tasks: Add comments/work notes to tasks; assign tasks; resolve/close incidents; approve change requests; find tasks by number.
Knowledge Management: Manage knowledge bases, categories, and articles; create, update, and publish articles.
Service Catalog: List and search catalog items and categories; view item details and variables; submit catalog requests.
Flow Designer: Execute, test (including draft), copy, and monitor flows, subflows, and actions; retrieve execution logs and diagnostics; cancel running flows.
ATF: Run individual tests or entire test suites; find tests by name, description, or category.
Monitoring & Health: Query system logs; run instance health checks (version, cluster, stuck jobs, semaphores, operational metrics).
Attachments: List, get metadata, and upload attachments to records.
Workflows (Legacy): Create workflows with activities, transitions, and optional publishing.
Click on "Install 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., "@now-sdk-ext-mcpCount all active incidents by priority on myinstance"
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.
now-sdk-ext-mcp
An MCP (Model Context Protocol) server that enables AI assistants to interact directly with ServiceNow instances — executing background scripts, querying data, running ATF tests, tailing logs, and more.
Built on @modelcontextprotocol/sdk and @sonisoft/now-sdk-ext-core.
Quick Start
Prerequisites
Node.js >= 22
ServiceNow CLI credentials configured via
now-sdk auth --add
Install and Build
git clone <repo-url>
cd now-sdk-ext-mcp
npm install
npm run buildConfigure Credentials
This server uses the same credential store as the ServiceNow CLI. If you haven't already, configure your instance credentials:
now-sdk auth --add <instance_alias>This stores credentials locally so the MCP server can authenticate without prompting.
Breaking Change in v2.0.0 (ServiceNow SDK 4.3.0)
v2.0.0 upgrades the underlying ServiceNow SDK from 4.2.x to 4.3.0, which changed how credential aliases are stored (replacing the previous
keytar-based credential store with a new implementation).If you are upgrading from v1.x:
Credential aliases created with ServiceNow SDK 4.2.x cannot be read by SDK 4.3.x
You must re-create all instance aliases after upgrading
# 1. Update the global CLI npm install -g @servicenow/sdk@4.3.0 # 2. Re-add each instance alias now-sdk auth --add <your-alias> # 3. Verify your aliases work now-sdk auth --list
Run the Server
node dist/index.jsThe server communicates over stdio (standard input/output) using the MCP JSON-RPC protocol. It is not meant to be run interactively — it's designed to be launched by an MCP client (Claude Desktop, VS Code, Cursor, etc.).
Related MCP server: snow-mcp
Connecting to an MCP Client
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"servicenow": {
"command": "node",
"args": ["/absolute/path/to/now-sdk-ext-mcp/dist/index.js"]
}
}
}To set a default instance (so you don't have to specify it every time):
{
"mcpServers": {
"servicenow": {
"command": "node",
"args": ["/absolute/path/to/now-sdk-ext-mcp/dist/index.js"],
"env": {
"SN_AUTH_ALIAS": "myinstance"
}
}
}
}VS Code / Cursor
Add to your .vscode/mcp.json or Cursor MCP settings:
{
"servers": {
"servicenow": {
"command": "node",
"args": ["/absolute/path/to/now-sdk-ext-mcp/dist/index.js"],
"env": {
"SN_AUTH_ALIAS": "myinstance"
}
}
}
}Claude Code
Add to your .claude/settings.json or project-level .mcp.json:
{
"mcpServers": {
"servicenow": {
"command": "node",
"args": ["/absolute/path/to/now-sdk-ext-mcp/dist/index.js"],
"env": {
"SN_AUTH_ALIAS": "myinstance"
}
}
}
}Opencode
Add to your .config/opencode/opencode.json or project-level opencode.jsonc
{
"mcp": {
"servicenow": {
"type": "local",
"command": ["node", "/absolute/path/to/now-sdk-ext-mcp/dist/index.js"],
"enabled": true,
"environment": {
"SN_AUTH_ALIAS": "myinstance"
}
}
}
}How It Works
Once connected, you can talk to your AI assistant naturally:
"Find all CMDB CI records in the computer class on my myinstance instance"
"Run a script on myinstance that counts all active incidents by priority"
"Query the sys_user table for users with the admin role on prod"
The AI will:
Write the appropriate ServiceNow server-side JavaScript
Call the
execute_scripttool with the instance alias and scriptReturn the results in a readable format
The instance parameter can be passed explicitly per-request or defaulted via the SN_AUTH_ALIAS environment variable, so if you only work with one instance you can set-and-forget.
Available Tools
See TOOLS.md for the full list of available tools with parameters and examples.
Environment Variables
Variable | Default | Description |
| (none) | Default ServiceNow auth alias. Used when a tool call doesn't specify an |
Development
Project Structure
src/
├── index.ts # Server entry point — registers tools, starts stdio transport
├── tools/ # MCP tool implementations (one file per tool)
│ └── execute-script.ts # execute_script tool
└── common/
└── connection.ts # ServiceNow connection manager (credential resolution + caching)
test/
├── __mocks__/ # Manual mocks for external dependencies
├── helpers/ # Shared test utilities and factories
├── unit/ # Unit tests (mocked external deps)
│ ├── common/
│ └── tools/
└── integration/ # Integration tests (full MCP protocol, no real SN calls)Scripts
Command | Description |
| Clean and compile TypeScript to |
| Build and run the server |
| Run unit tests |
| Run unit tests with coverage and junit reporting |
| Run MCP protocol integration tests |
| Run all tests |
| Type-check with |
Adding a New Tool
Create a new file in
src/resources/ # servicenow:// read-only resources src/tools/(e.g.,src/tools/query-table.ts).Export a registration function:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; import { getServiceNowInstance } from "../common/connection.js"; export function registerQueryTableTool(server: McpServer): void { server.registerTool( "query_table", { title: "Query Table", description: "Query records from a ServiceNow table.", inputSchema: { instance: z.string().optional().describe("ServiceNow instance auth alias"), table: z.string().describe("Table name to query"), // ... more params }, }, async ({ instance, table }) => { const snInstance = await getServiceNowInstance(instance); // ... use core library to query return { content: [{ type: "text" as const, text: "results here" }], }; } ); }Register it in
src/index.ts:import { registerQueryTableTool } from "./tools/query-table.js"; registerQueryTableTool(server);Add tests in
test/unit/tools/following the existing pattern.Document the tool in
TOOLS.md.
Testing Approach
Tests use the MCP SDK's InMemoryTransport to create linked client+server pairs entirely in-process. This means tests go through the full MCP protocol stack (JSON-RPC serialization, schema validation, handler dispatch) without spawning processes or touching the network.
Unit tests (
test/unit/): Mock external dependencies (@sonisoft/now-sdk-ext-core,@servicenow/sdk-cli) usingjest.unstable_mockModule()for ESM compatibility. Test tool behavior through the MCP client.Integration tests (
test/integration/): Verify the MCP protocol lifecycle (handshake, tool listing, sequential calls) without mocking.
Sibling Projects
This MCP server wraps the same core library used by the CLI:
Core library:
@sonisoft/now-sdk-ext-core— all ServiceNow communication (auth, HTTP, WebSocket, script execution, ATF, syslog)CLI:
@sonisoft/now-sdk-ext-cli— thenexCLI that wraps the core library with oclif
When adding new MCP tools, reference the corresponding CLI command in now-sdk-ext-cli/src/commands/ for the expected behavior and data flow.
Restricting what can be changed
Instance changes are permitted by default. Set NEX_POLICY_DENY in the server's
environment to refuse them:
{
"mcpServers": {
"now-sdk-ext": {
"command": "now-sdk-ext-mcp",
"env": { "NEX_POLICY_DENY": "all" }
}
}
}Refused tools return an error result explaining that nothing was changed; read-only tools are unaffected. There is deliberately no tool parameter to grant permission — on this surface the caller is the model, so a parameter it can set would not be a control.
NEX_POLICY_DENYonly holds when set somewhere the model cannot write. The config file above usually lives in the workspace, and an agent with file-write access can edit it. For a real lockdown set it in the environment that launches the client — a shell profile, a systemd unit, or a container env.This is a guardrail, not a security boundary. Anything holding the credential can reach the instance directly.
Contributing
Testing
There are three layers of testing for this project:
1. Automated Tests (Jest)
Unit and integration tests run entirely in-process using the MCP SDK's InMemoryTransport — no server process, no network, no credentials needed.
npm test # Unit tests (default, fast)
npm run test:unit # Unit tests with coverage + junit
npm run test:integration # MCP protocol integration tests
npm run test:all # EverythingUnit tests mock all external dependencies (@sonisoft/now-sdk-ext-core, @servicenow/sdk-cli) so they are fast and deterministic. Integration tests verify the MCP protocol lifecycle (handshake, tool listing, tool calls, error responses) without hitting real ServiceNow instances.
Always run npm test before committing.
2. MCP Inspector (Interactive Testing)
The official MCP Inspector is a web UI that acts as an MCP client, letting you interactively browse tools, invoke them with custom inputs, and see results — without connecting to Claude or any AI client.
# Build first
npm run build
# Launch the inspector (opens a browser UI at http://localhost:6274)
npx @modelcontextprotocol/inspector node dist/index.js
# Pass env vars to the server (e.g., default instance alias)
npx @modelcontextprotocol/inspector -e SN_AUTH_ALIAS=myinstance node dist/index.jsIn the inspector UI you can:
Browse registered tools and their input schemas in the Tools tab
Fill in parameters and invoke tools
See the JSON-RPC request/response and tool output
View server stderr logs in the Notifications pane
The inspector also has a headless CLI mode for scripting:
# List all tools
npx @modelcontextprotocol/inspector --cli node dist/index.js --method tools/list
# Call a specific tool
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name execute_script \
--tool-arg instance=myinstance \
--tool-arg script='gs.print("hello")' \
--tool-arg scope=global3. Testing with Claude Code
To test the server end-to-end with Claude Code as the MCP client:
Add the server:
# From the now-sdk-ext-mcp project root (after building):
claude mcp add --transport stdio --env SN_AUTH_ALIAS=myinstance servicenow \
-- node /absolute/path/to/now-sdk-ext-mcp/dist/index.jsOr create a .mcp.json at your project root (this is shareable via version control):
{
"mcpServers": {
"servicenow": {
"command": "node",
"args": ["/absolute/path/to/now-sdk-ext-mcp/dist/index.js"],
"env": {
"SN_AUTH_ALIAS": "myinstance"
}
}
}
}Verify the connection:
Inside a Claude Code session, run /mcp to see all connected servers and their status. The servicenow server should show as connected.
Test it:
Ask Claude something like:
"Run a script on myinstance that prints the current user's name using gs.print(gs.getUserName())"
Claude should call the execute_script tool and return the result.
Manage servers:
claude mcp list # List all configured servers
claude mcp get servicenow # Show details for the servicenow server
claude mcp remove servicenow # Remove itManual stdin Testing
Since the server communicates via JSON-RPC over stdio, you can pipe messages directly for quick smoke tests:
# List tools (single-message shortcut — works for basic inspection)
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' \
| node dist/index.js 2>/dev/null \
| jq '.result.tools[].name'For a full protocol exchange (initialize handshake + tool call):
printf '%s\n%s\n%s\n' \
'{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":0}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","method":"tools/list","id":1}' \
| node dist/index.js 2>/dev/null \
| jqDebugging
Since stdout is reserved for JSON-RPC, never use console.log() in server code — it corrupts the protocol stream. Use these approaches instead:
console.error()— writes to stderr, which is safe and visible in the MCP Inspector's Notifications pane and in Claude Desktop's log files (~/Library/Logs/Claude/mcp*.log).MCP Inspector — run the server under the inspector to see all JSON-RPC messages and stderr output in real time.
File logging — off by default. This server's working directory is chosen by whoever launched it, so it writes no files unless asked. Configure with environment variables:
Variable
Effect
NEX_LOG_FILE1/truewrites a log file to$XDG_STATE_HOME/now-sdk-ext/logs(~/.local/state/...)NEX_LOG_DIRWrite log files to this directory instead. Implies
NEX_LOG_FILENEX_LOG_LEVELerror,warn,info(default),http,verbose,debug,sillyNEX_POLICY_DENYwrite,execute, orall— refuses matching instance changes. Malformed values fail closedNEX_POLICY_ALLOWGrants verbs. Inert while changes are permitted by default
Diagnostics always go to stderr, never stdout — stdout carries JSON-RPC. Credential material is stripped from both metadata and message text before anything is written.
Code Conventions
ES Modules (
"type": "module"in package.json)TypeScript strict mode
Target ES2022, module Node16
Match the patterns and style of the sibling
now-sdk-ext-coreandnow-sdk-ext-cliprojectsEvery tool that talks to ServiceNow should accept an optional
instanceparameterTest every tool through the MCP client (not by calling handler functions directly) so the full protocol stack is exercised
License
MIT
Available Tools
87 toolsadd_code_search_tableAdd Code Search TableAIdempotent
Add a new table to an existing code search group, expanding what gets searched. After adding a table, code searches using that group will also search the specified fields on the new table.
Requires the search group's sys_id (get it from list_code_search_groups) and the table name and fields to search.
IMPORTANT: This modifies the code search configuration on the instance. Verify the table name and fields before adding.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table name to add to the search group (e.g., "sys_script_include", "sys_ui_script"). Use `lookup_table` to verify the table name exists. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| search_group | Yes | The sys_id of the target code search group. Get this from `list_code_search_groups`. | |
| search_fields | Yes | Comma-separated field names to search on this table (e.g., "script,name", "script"). Use `lookup_columns` to find available fields on the table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool 'modifies the code search configuration on the instance' and includes a warning to verify table name and fields. This adds context beyond the annotations, which already indicate readOnlyHint=false and destructiveHint=false. The behavioral effect on future searches is also explained.
Agents need to know what a tool does to the world 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, with three sentences: purpose, prerequisites, and warning. It is front-loaded and every sentence contributes operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple 4-parameter tool with annotations and full schema coverage, the description covers the action, the prerequisite sys_id lookup, the effect on searches, and a safety warning. No output schema is needed, and the description adequately prepares the agent for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with detailed descriptions, including examples and references to lookup_table/lookup_columns. The tool description adds minimal param-specific detail beyond the schema, summarizing requirements but not enriching the semantics further.
Input schemas describe structure but not intent. Descriptions should explain non-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 new table to an existing code search group') and its effect ('expanding what gets searched'). It distinguishes from sibling tools like list_code_search_groups and code_search by focusing on the modification 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?
It provides explicit prerequisites: 'Requires the search group's sys_id (get it from list_code_search_groups) and the table name and fields to search.' This tells the agent when to use it and what preparatory steps are needed. However, it doesn't explicitly contrast with alternatives for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_task_commentAdd Task CommentA
Add a comment or work note to any task-based record (incident, change_request, problem, etc.). Comments are customer-visible by default; set is_work_note to true for internal work notes visible only to fulfiller staff.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table name of the task record (e.g., "incident", "change_request", "problem", "sc_task"). | |
| comment | Yes | The comment text to add to the record. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| is_work_note | No | If true, adds a work note (internal, visible to fulfillers only) instead of a customer-visible comment. Defaults to false. | |
| record_sys_id | Yes | The sys_id of the task record to add the comment to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as mutating and non-idempotent. The description adds valuable behavioral context: comments are customer-visible by default, while work notes are internal to fulfiller staff. It does not contradict the annotations and goes beyond their basics.
Agents need to know what a tool does to the world 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 exactly two sentences: the first states the core function and scope, the second clarifies the key parameter behavior. It is concise, front-loaded, and contains no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with no output schema, the description covers the essential context: what the tool does, what record types it applies to, and how to switch visibility. It doesn't mention return values or error handling, but those are less critical for this kind of tool and the schema documentation fills in the parameter gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the baseline is 3. The description reinforces the is_work_note parameter's effect but adds no new details beyond what the schema already states (e.g., visibility semantics). No additional parameter-level insight 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 states a specific verb ('Add') and resource ('a comment or work note to any task-based record'), and explicitly names example record types. It clearly distinguishes the tool's function from sibling tools like assign_task or close_incident by focusing solely on adding comments/notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool's purpose and the two modes (comment vs. work note), so an agent knows when to use it. However, it does not explicitly mention when not to use it or point to alternative tools for other record modifications, leaving the differentiation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aggregate_groupedGrouped Aggregate QueryARead-only
Run aggregate functions (COUNT, AVG, MIN, MAX, SUM) grouped by a field on any ServiceNow table. Returns per-group statistics — ideal for breakdowns and dashboards.
Examples: count of incidents grouped by priority, average resolution time grouped by category, sum of story points grouped by assignee.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | When true, include a COUNT per group. | |
| query | No | An encoded query string to filter records before aggregation. | |
| table | Yes | The ServiceNow table name (e.g., "incident", "change_request"). | |
| having | No | A HAVING clause to filter groups after aggregation (e.g., "COUNT>10" to only return groups with more than 10 records). | |
| group_by | Yes | The field name(s) to group by (e.g., ["priority"], ["state", "category"]). Pass a single-element array for simple grouping. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| avg_fields | No | Field names to compute AVG on per group. | |
| max_fields | No | Field names to compute MAX on per group. | |
| min_fields | No | Field names to compute MIN on per group. | |
| sum_fields | No | Field names to compute SUM on per group. | |
| display_value | No | Display value handling: "true" returns display values, "false" returns internal values, "all" returns both. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the bar is lower. The description adds that it 'returns per-group statistics' and works on 'any' table, reinforcing but not substantially expanding beyond annotation-driven expectations. It omits details like default behavior if no aggregate functions are specified.
Agents need to know what a tool does to the world 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 tight sentences plus a list of examples. It is front-loaded with the core behavior and every sentence earns its place with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, no output schema), the description covers the core use case and examples. It lacks details on return format and edge cases (e.g., behavior when no aggregate function is selected), but annotations and rich schema descriptions fill many gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all 11 parameters having descriptions. The description adds illustrative examples but does not explain parameters beyond the schema. The baseline of 3 is appropriate since the schema takes the primary burden.
Input schemas describe structure but not intent. Descriptions should explain non-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 ('Run aggregate functions'), the resource ('any ServiceNow table'), and the distinguishing grouping behavior ('grouped by a field'), which separates it from sibling tools like aggregate_query and count_records. The examples further illustrate 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 phrase 'ideal for breakdowns and dashboards' and concrete examples ('count of incidents grouped by priority') give clear context for when to use this tool. However, it does not explicitly contrast with alternative tools like aggregate_query or define when grouping is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aggregate_queryAggregate QueryARead-only
Run aggregate functions (COUNT, AVG, MIN, MAX, SUM) on any ServiceNow table using the Stats API. Returns computed statistics without returning individual records.
Examples: average resolution time for incidents, max priority across open changes, sum of story points in a sprint, count of active users.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | When true, include a COUNT in the results. | |
| query | No | An encoded query string to filter records before aggregation. If omitted, aggregates over all records. | |
| table | Yes | The ServiceNow table name (e.g., "incident", "change_request"). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| avg_fields | No | Field names to compute AVG on (e.g., ["reassignment_count", "reopen_count"]). | |
| max_fields | No | Field names to compute MAX on. | |
| min_fields | No | Field names to compute MIN on. | |
| sum_fields | No | Field names to compute SUM on. | |
| display_value | No | Display value handling: "true" returns display values, "false" returns internal values, "all" returns both. If omitted, returns internal values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds valuable transparency by stating that it uses the Stats API and returns computed statistics without individual records, which helps the agent anticipate the output. It does not discuss rate limits or authentication, but given annotations cover safety, this is acceptable.
Agents need to know what a tool does to the world 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 defines the tool's function, the second provides illustrative examples. It is front-loaded, with no redundant phrases or filler content. Every sentence contributes to understanding the tool's purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 9 parameters and no output schema, the description does not explain the exact structure of returned statistics. However, the schema thoroughly documents all inputs, and the description clarifies what the tool returns (computed statistics, not records). The examples provide real-world context. Slight gap in not describing output format, but overall adequate 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 100%, so each parameter is already well-documented with its own description. The tool description does not add significant parameter-level detail beyond naming the aggregate functions, which maps directly to the array fields (avg_fields, max_fields, etc.). Since the schema carries the semantic load, 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 the tool runs aggregate functions (COUNT, AVG, MIN, MAX, SUM) on ServiceNow tables using the Stats API. It explicitly notes that it returns statistics without individual records, which distinguishes it from query_table and count_records. The inclusion of concrete examples (average resolution time, max priority, etc.) further clarifies the 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 provides practical use cases through examples, indicating when the tool is appropriate. However, it does not explicitly mention alternatives or situations where a different sibling tool (e.g., aggregate_grouped or count_records) would be preferred. The phrase 'on any ServiceNow table' implies general applicability, but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_changeApprove Change RequestAIdempotent
Approve a change request with optional comments. Sets the approval field to 'approved'. IMPORTANT: This changes the change request's approval status.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the change request to approve. | |
| comments | No | Optional comments to include with the approval. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the specific mutation (sets approval field to 'approved') and emphasizes that it changes the approval status. This adds useful context beyond the annotations (readOnlyHint=false, idempotentHint=true) and does not contradict them. It could also mention idempotent behavior, but the annotation covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The action, object, and effect are front-loaded, and the 'IMPORTANT' warning adds emphasis without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple write operation with full schema documentation and no output schema, the description covers purpose, effect, and safety warning. It does not explain behavior for already-approved requests or error conditions, but the idempotent annotation and general simplicity make this adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter (sys_id, comments, instance) is already well-documented. The description adds no new meaning beyond reiterating 'optional comments', which is already in the schema. Baseline 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 uses a specific verb ('Approve'), identifies the resource ('change request'), and states the exact effect ('Sets the approval field to approved'). This clearly distinguishes it from sibling tools like close_incident or resolve_incident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 approve change requests, and the context makes it the only tool for that purpose among siblings. It does not explicitly mention alternatives or when not to use, but no conflicting tool exists, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_taskAssign TaskAIdempotent
Assign a task record to a user and optionally an assignment group. Works on any task-based table (incident, change_request, problem, sc_task, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table name of the task record (e.g., "incident", "change_request", "sc_task"). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| assigned_to | Yes | The sys_id or user_name of the user to assign the task to. | |
| record_sys_id | Yes | The sys_id of the task record to assign. | |
| assignment_group | No | The sys_id of the assignment group. Optional — if provided, the record's assignment_group field is also updated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and idempotentHint=true, but the description adds useful behavioral context by noting the assignment_group field is updated when provided. This clarifies the operational impact beyond the basic 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 two sentences, front-loaded with the action and target, followed by the scope. Every word earns its place, with no redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward assignment operation with good annotations and full schema coverage, the description sufficiently covers purpose, scope, and a key behavioral detail. It does not explain return values, but no output schema exists and this is a simple write action, so completeness is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already well-documented. The tool description adds limited new meaning—only the optionality of assignment_group—so it relies on the schema for parameter understanding, matching the baseline for high 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 uses a specific verb 'assign' with a clear resource 'task record' and optional 'assignment group'. It also defines the scope as 'any task-based table', which distinguishes it from sibling tools that target specific task types or actions (e.g., close_incident, add_task_comment).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 it works on any task-based table, clearly indicating broad applicability for assignment operations. However, it does not explicitly call out when not to use it or reference alternative tools, leaving some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_create_recordsBatch Create RecordsA
Create multiple records across one or more ServiceNow tables in a single batch. Operations execute sequentially, supporting variable references between them: use saveAs to name an operation's result sys_id, then reference it in later operations with ${name} in data values.
Example: Create a parent record with saveAs='parent', then create a child record with caller_id set to '${parent}'.
IMPORTANT: This creates records on the ServiceNow instance. Review the operations before executing.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| operations | Yes | Ordered list of create operations to execute. | |
| transaction | No | When true (default), stops on first error. When false, continues past errors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations: operations are sequential, variable references are supported via saveAs/${key}, and there is an explicit warning that records are created on the instance. Annotations already indicate this is a write operation (readOnlyHint=false), so the description complements rather than repeats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with the core function, then explaining variable references, followed by an illustrative example and a brief warning. It is somewhat verbose but each section earns its place by clarifying key usage patterns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 multi-step operations and variable references, the description covers the essential behavior, including sequential execution, saveAs mechanics, and a warning. It does not discuss transaction behavior or return values, but the schema covers the transaction parameter and there is no output schema, so the description is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches parameter understanding by explaining how saveAs and ${name} references work together with a concrete example. This is beyond the schema's basic field descriptions, providing practical semantics for the operations array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Create multiple records across one or more ServiceNow tables in a single batch.' It uses a specific verb ('Create') and resource ('records across ServiceNow tables'), and the batch context distinguishes it from single-record creation and other batch tools like batch_update_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool's capability and provides an example of sequential dependency, but it does not explicitly state when to prefer this over alternatives like batch_update_records or query_update_records. The use case is implied but not directly contrasted with siblings, so it meets the minimum for clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_recordsBatch Update RecordsADestructiveIdempotent
Update multiple records across one or more ServiceNow tables in a single batch. Each update specifies a table, sys_id, and the field data to update.
IMPORTANT: This modifies records on the ServiceNow instance.
| Name | Required | Description | Default |
|---|---|---|---|
| updates | Yes | Ordered list of update operations to execute. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| stop_on_error | No | When true, stops on first error. When false (default), continues past errors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'IMPORTANT: This modifies records' is consistent but largely redundant. It does not add deeper behavioral context such as partial failure semantics or permissions, but there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each serving a clear purpose: stating the operation, outlining the update structure, and reinforcing the mutating nature. No filler 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 annotations and 100% schema coverage, the description is complete enough for a batch update tool. It clearly states the action and the data shape, though it could briefly note non-atomic behavior; the stop_on_error parameter in the schema partially covers that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description only restates the core per-item fields (table, sys_id, field data). It does not add meaning beyond what the input schema already provides, 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 starts with a specific verb 'Update' and a clear resource: 'multiple records across one or more ServiceNow tables in a single batch.' This makes the tool's purpose immediately evident and distinguishes it from create or query-based update 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 communicates when to use this tool: when updating multiple records across one or more tables in a single batch. It does not explicitly name alternatives like query_update_records, but the context is unambiguous and sufficiently scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_flowCancel FlowADestructiveIdempotent
Cancel a running or paused flow execution by its context ID. Use this to stop a background flow that is no longer needed, is stuck in a waiting state, or was started by mistake.
IMPORTANT: This is a destructive operation — the flow will be permanently cancelled and cannot be resumed.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Reason for cancellation. Default: "Cancelled via FlowManager". | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| context_id | Yes | The flow context sys_id from the execution result's contextId field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds irreversibility by stating 'the flow will be permanently cancelled and cannot be resumed'. This goes beyond the annotations and provides critical behavioral context. No contradiction exists between description and 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 compact: two sentences plus a bolded important warning. It is front-loaded with the action, followed by usage guidance, then the critical destructive caveat. Every sentence serves a purpose with 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?
For a destructive tool with three parameters and no output schema, the description covers the what, when, and the irreversible consequence. It does not describe return values, but the tool is simple and annotations already convey the safety profile, so the overall context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (reason, instance, context_id) are fully documented in the schema. The description reinforces the role of context_id but adds no additional parameter-level meaning beyond what the schema already provides, which fits the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair, 'Cancel a running or paused flow execution by its context ID', which clearly states what the tool does. This distinguishes it from sibling flow tools like execute_flow and get_flow_context_status by focusing on the cancellation action and the method (context ID).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly lists use cases ('no longer needed, is stuck in a waiting state, or was started by mistake'), giving an agent clear contexts for invoking the tool. It does not mention alternatives or when NOT to use it, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_instance_healthCheck Instance HealthARead-only
Run a consolidated health check on a ServiceNow instance. Returns version info, cluster node status, stuck scheduled jobs, active semaphore count, and operational counts (open incidents, changes, problems).
Each section can be individually enabled/disabled. Use this to quickly assess the overall health and status of an instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| include_cluster | No | Include cluster node status. | |
| include_version | No | Include ServiceNow version/build info. | |
| include_semaphores | No | Include active semaphore count. | |
| include_stuck_jobs | No | Include stuck scheduled jobs. | |
| include_operational_counts | No | Include operational counts (open incidents, changes, problems). | |
| stuck_job_threshold_minutes | No | Threshold in minutes for considering a scheduled job stuck. Jobs running longer than this are flagged. Default is 30 minutes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, so the read-only nature is covered. The description adds valuable behavioral context: sections can be individually enabled/disabled, and it mentions the returned sections. This goes beyond the annotations and helps the agent understand the tool's flexibility.
Agents need to know what a tool does to the world 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, front-loaded with the core purpose, and the second sentence adds a key capability (enable/disable sections) without redundancy. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and readOnly annotations, the description covers the tool's overall behavior, return content, and configurability. It does not detail output formatting or error cases, but for a health check tool with this level of annotation support, it is sufficiently 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%, so the parameters are fully documented in the schema. The description gives a high-level overview but does not add parameter-level meaning beyond what the schema already provides. Baseline 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 uses a specific verb 'Run' and clearly identifies the resource ('consolidated health check on a ServiceNow instance') and the outputs (version info, cluster node status, stuck scheduled jobs, active semaphore count, operational counts). This distinguishes it from sibling tools like query_table or aggregate_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 an explicit use case: 'Use this to quickly assess the overall health and status of an instance.' It does not name alternatives or exclusions, but the context is clear enough that an agent would know when to choose this tool over more specific query tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_update_setClone Update SetA
Clone an existing update set by creating a new one and copying all its records. The new update set gets the specified name and starts in 'in progress' state.
IMPORTANT: This creates a new update set and copies all records on the instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| new_name | Yes | The name for the new cloned update set. | |
| source_sys_id | Yes | The sys_id of the update set to clone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-idempotent, and non-destructive. The description adds useful context by explicitly noting the tool creates a new update set, copies all records, and starts in 'in progress' state. However, the phrase 'all records on the instance' is ambiguous (could be misread as instance-wide rather than from the source update set), and there is no mention of permissions or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, with the core action stated in the first sentence. The IMPORTANT note adds emphasis on the side effect but is not excessively verbose. Every sentence contributes to understanding the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with three fully described parameters and no output schema, the description covers the action, the resulting state, and the side effect. It lacks information about return values and potential failure conditions, but given the low complexity and existing annotations, it is reasonably complete. The ambiguity in 'all records on the instance' slightly detracts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 schema already documents all three parameters. The description only indirectly references new_name ('specified name') and source_sys_id ('existing update set') without adding meaningful details beyond the schema. 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 tool clones an existing update set by creating a new one and copying all its records, specifying the resulting state ('in progress'). The verb 'clone' and resource 'update set' are specific, and the behavior is distinct from sibling tools like create_update_set or move_update_set_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (duplicating an update set) but does not explicitly state when to use this vs alternatives like create_update_set or move_update_set_records. No exclusions or alternative comparisons are provided, leaving the agent to infer usage from the term 'clone'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_incidentClose IncidentAIdempotent
Close an incident by setting state to Closed (7). IMPORTANT: This changes the incident state. The incident should typically be in Resolved state before closing, though this depends on instance configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the incident to close. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| close_code | No | The close code for the closure (e.g., "Solved (Permanently)", "Solved (Work Around)", "Closed/Resolved by Caller"). | |
| close_notes | Yes | Notes describing why the incident is being closed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by explicitly stating 'This changes the incident state' and specifying the exact state value. It also notes the prerequisite about Resolved state. The annotations (readOnlyHint=false, idempotentHint=true) are consistent with this, and the description adds useful context about state transitions without contradicting any annotation.
Agents need to know what a tool does to the world 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 concise sentences, front-loaded with the primary action, and includes an IMPORTANT warning that draws attention to the key side effect. Every sentence serves a purpose with no redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple state-change operation with four parameters and no output schema, the description covers the core behavior, the state change, and a usage prerequisite. It does not explain return values or error behaviors, but these are not critical for this tool type, and the annotations provide additional context (idempotency, non-destructiveness). Overall, it is sufficiently 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%, so all parameters are already fully described in the schema. The description does not add parameter-specific details, but the baseline for high schema coverage is 3, and the description's mention of state (Closed) implicitly relates to the impact of parameters like close_code and close_notes without elaborating on 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 tool's function: 'Close an incident by setting state to Closed (7).' This is a specific verb and resource, and it explicitly distinguishes itself from sibling tools like resolve_incident by naming the target state (Closed vs. Resolved). The warning about the incident typically being in Resolved state also differentiates it from other state-changing 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 provides clear contextual guidance: 'The incident should typically be in Resolved state before closing, though this depends on instance configuration.' This implies the appropriate time to use the tool and a prerequisite. However, it does not explicitly name alternative tools or state when not to use it, so it doesn't fully meet the 'explicit when/when-not/alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code_searchCode SearchARead-only
Search for code across a ServiceNow instance using the Code Search API. Finds matching scripts, business rules, script includes, and other code artifacts across the platform. Results include the record name, table, field, and matching line numbers with context.
Code Search works through Search Groups, which define sets of tables and fields to search. There is typically a default search group. Use list_code_search_groups to discover available groups, and list_code_search_tables to see which tables a group covers.
Key use cases:
Find scripts that reference a specific API, table, or pattern
Locate business rules, script includes, or UI scripts containing specific logic
Verify whether code has been deployed to an instance
Search within a specific application scope or table
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | The search term to find in code. Searches across script fields in the tables defined by the search group. | |
| limit | No | Maximum number of results to return. | |
| table | No | Specific table to search within (e.g., "sys_script_include"). Requires `search_group` to also be specified. Use `list_code_search_tables` to see available tables for a group. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| current_app | No | Application scope to limit results to (e.g., "x_myapp"). When set, only results from this application scope are returned. Automatically sets search_all_scopes to false. | |
| search_group | No | The search group NAME to scope the search (e.g., "Default Code Search Group"). If omitted, the instance's default search group is used. Use `list_code_search_groups` to discover available groups. | |
| search_all_scopes | No | When false, limits results to files within the scope specified by `current_app`. Defaults to true (search all scopes). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it as read-only and open-world, and the description adds context about search groups, the default search group behavior, and how current_app affects search_all_scopes. It also notes the instance fallback to the SN_AUTH_ALIAS environment variable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an opening summary, a paragraph on search groups, and a bulleted list of use cases. It is appropriately sized for a non-trivial tool, front-loaded with the primary action, and every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the search group mechanism, result contents (record name, table, field, line numbers), and related discovery tools. It omits explicit mention of pagination or error handling, but for a read-only search tool with rich annotations and schema, it is sufficiently 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?
All seven parameters have schema descriptions, yielding a high schema coverage baseline of 3. The tool description adds conceptual context about search groups, helping to understand the search_group and table parameters, but it does not significantly extend parameter-specific details 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 tool searches for code across a ServiceNow instance, identifying scripts, business rules, script includes, and other artifacts. It uses a specific verb+resource structure and distinguishes itself from sibling tools like list_code_search_groups and query_table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 lists concrete use cases, such as finding scripts referencing a specific API, locating business rules, and verifying deployments. It also directs users to list_code_search_groups and list_code_search_tables for discovery, but it does not explicitly state when not to use this tool or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_flowCopy Flow (Flow Designer)A
Copy an existing ServiceNow Flow Designer flow into a target scoped application. This is the best-practice first step when you want to modify any flow — OOB (out-of-box) and shared flows should not be modified directly. Copying into your application scope first keeps the original intact and gives you a flow you own and can freely modify.
This tool enables the full AI-assisted flow development lifecycle: copy_flow → pull with 'now-sdk transform' → modify → push → test_flow → publish_flow
The copied flow lands in draft/unpublished state in the target scope with a new sys_id, independent of the source. The tool returns the new flow's sys_id and prints the exact 'now-sdk transform' command to pull it locally.
Use list_scoped_apps to find the target_scope sys_id for your application.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the newly created flow copy (e.g., "Copy of Change - Standard"). This becomes the flow's name in Flow Designer. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| target_scope | Yes | Scope sys_id of the target application to copy the flow into. This must be a sys_id (not a scope name). Use list_scoped_apps to find the sys_id for your application scope. | |
| source_flow_id | Yes | Source flow sys_id (32-char hex) or scoped name (e.g., "global.change__standard"). This is the flow you want to copy. It can be an OOB flow, a flow in global scope, or a flow in any other application scope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behaviors: the copied flow lands in draft/unpublished state, gets a new sys_id, is independent of the source, returns the new sys_id, and prints the exact 'now-sdk transform' command. This adds substantial context that annotations alone do not provide, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it opens with the core action, then explains the rationale, lifecycle, behavior, and a practical tip. Every sentence provides value—no filler or redundancy. Front-loaded with the essential 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 tool with no output schema, the description covers the return value (sys_id and command), the state of the copied flow, the requirement for a scope sys_id, and an alternative way to find it. It also embeds the tool within the broader lifecycle, making it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. 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 has 100% coverage with detailed descriptions for all four parameters. The tool description reinforces important nuances (e.g., target_scope must be a sys_id, source can be OOB) but does not add significantly beyond the schema. Baseline 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 action ('Copy an existing ServiceNow Flow Designer flow') with a clear resource and target ('into a target scoped application'). It also distinguishes this tool from siblings by framing it as the best-practice first step for modifying flows, which is unique among the flow-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?
Explicitly says when to use: 'best-practice first step when you want to modify any flow', and explains why (OOB/shared flows should not be modified directly). Provides a lifecycle (copy_flow → pull → modify → push → test_flow → publish_flow) and directs users to list_scoped_apps for target_scope, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_recordsCount RecordsARead-only
Count records on any ServiceNow table, optionally filtered by an encoded query. Uses the Stats API for efficient server-side counting — much faster than querying all records and counting client-side.
Use this to quickly gauge data volumes (e.g., how many open P1 incidents, how many users in a group, how many CIs of a given class).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | An encoded query string to filter which records are counted. Examples: "active=true^priority=1", "state!=7". If omitted, counts all records in the table. | |
| table | Yes | The ServiceNow table name to count records on (e.g., "incident", "sys_user", "cmdb_ci_server"). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds context about using the Stats API and server-side efficiency. It does not mention potential errors or rate limits, but the added performance context goes 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 three sentences, each earning its place: what it does, how it works, and when to use it. Information is front-loaded and there is no redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple count tool with no output schema, the description sufficiently covers purpose, use cases, and performance. It does not explicitly describe the return value, but the name and purpose make it obvious. The example queries in the schema provide enough operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents the three parameters (query, table, instance). The description only reiterates 'encoded query' and 'any ServiceNow table' without adding new semantic details 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 uses a specific verb ('Count') with a clear resource ('records on any ServiceNow table') and explicitly mentions an optional filter ('encoded query'). It also distinguishes itself from retrieval tools by emphasizing efficient server-side counting via the Stats API.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit use cases ('gauge data volumes') and contrasts with the alternative of querying all records client-side. However, it does not mention when to use sibling aggregation tools (e.g., aggregate_query) instead, so it lacks full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_kb_articleCreate Knowledge ArticleA
Create a new knowledge article in a specified knowledge base. The article is created in 'draft' workflow state by default. Use publish_kb_article to make it visible to end users.
The body content can be provided as HTML (text field) or wiki markup (wiki field). HTML is the more common format.
IMPORTANT: This creates a new article on the instance.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The article body content in HTML format. | |
| wiki | No | The article body content in wiki markup format (alternative to HTML). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| article_type | No | The article type (e.g., 'text', 'wiki'). Defaults to platform default. | |
| workflow_state | No | The initial workflow state: 'draft' (default), 'published', or 'retired'. | draft |
| category_sys_id | No | The sys_id of the category to assign the article to. | |
| additional_fields | No | Optional additional fields to set on the article record as key-value pairs. | |
| short_description | Yes | The article title/short description. | |
| knowledge_base_sys_id | Yes | The sys_id of the knowledge base to create the article in. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds that the article is created in 'draft' state by default and notes the HTML/wiki body options, plus an 'IMPORTANT' emphasis that it creates a new article on the instance. This adds useful 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?
The description is concise—about five sentences in three short paragraphs—and front-loads the core purpose. It avoids redundancy with the schema and provides the important publish hint 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 9-parameter creation tool with nested objects and no output schema, the description covers the essential creation behavior, default state, and body format choices. It does not describe the return value (e.g., sys_id of the created article), which would be helpful, but the rich schema compensates for this 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?
With 100% schema coverage, the schema already documents all parameters. The description adds practical value by noting that HTML is the more common body format, helping users choose between text and wiki fields, and by confirming the default workflow_state matches the schema default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Create a new knowledge article in a specified knowledge base,' which is a specific verb+resource statement. It also mentions the default 'draft' workflow state, distinguishing it from the sibling tool publish_kb_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 explicitly directs users to publish_kb_article for making articles visible, providing a clear alternative. It also mentions that HTML is more common than wiki, aiding format choice, though it does not explicitly exclude update_kb_article for modifying existing articles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_kb_categoryCreate Knowledge CategoryA
Create a new category in a knowledge base. Requires a label and the knowledge base sys_id. Optionally set a parent category for subcategories.
IMPORTANT: This creates a new category on the instance.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | The display label for the new category. | |
| active | No | Whether the category is active (default true). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| parent_category | No | Optional parent category sys_id for creating subcategories. | |
| knowledge_base_sys_id | Yes | The sys_id of the knowledge base to create the category in. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, so the description's 'IMPORTANT: This creates a new category on the instance' adds minimal new information beyond emphasizing persistence. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with two short sentences plus an emphasis line. The IMPORTANT sentence is somewhat redundant, but it does not waste much space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with full schema coverage, the description covers purpose and key parameters. It does not mention return value or error behavior, but no output schema exists and tool complexity 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?
Schema description coverage is 100%, so all parameters are already well-documented. The description repeats that label and knowledge_base_sys_id are required and parent_category is for subcategories, adding no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Create' with a clear resource 'category in a knowledge base'. It clearly distinguishes this from sibling tools like list_kb_categories or get_knowledge_base.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 required inputs (label, knowledge_base_sys_id) and optional parent_category, giving clear context for when to use. It doesn't explicitly name alternatives, but the create operation is unambiguous.
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 SetB
Create a new update set. IMPORTANT: This creates a new update set on the instance.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the update set to create. | |
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| application | No | Optional application scope sys_id to associate with the update set. | |
| description | No | Optional description for the update set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (readOnlyHint=false) and has open world side effects (openWorldHint=true). The description adds only 'This creates a new update set on the instance,' which is redundant with the tool's name. It does not disclose potential side effects, permissions required, or implications of creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, but the 'IMPORTANT' sentence is somewhat redundant with the title and adds little value. It is not wasteful, but it could be more informative with the space used.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with no output schema and minimal annotations, the description should explain prerequisites, potential side effects, or what happens on success. It lacks any contextual information beyond the action itself, making it incomplete for an agent to understand the full impact.
Complex tools with many parameters or behaviors need more documentation. 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 covers 100% of parameters with detailed descriptions (name, instance, application, description). The tool description adds no additional parameter semantics beyond what the schema already provides, so 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 the action: 'Create a new update set.' This is a specific verb+resource pair that distinguishes it from sibling tools like clone_update_set, list_update_sets, or set_current_update_set. The added 'IMPORTANT' clause reinforces that it operates on the instance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 scenarios where creating an update set is appropriate or when to prefer clone_update_set or set_current_update_set. The description provides no 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_workflowCreate WorkflowA
Create a complete ServiceNow workflow from a single specification. Orchestrates: create workflow record -> create version -> create activities -> create transitions -> optionally publish.
Activities are referenced in transitions by their id field (if set) or their array index (as a string like '0', '1', etc.).
IMPORTANT: This creates multiple records on the ServiceNow instance (workflow, version, activities, transitions). Review the specification carefully.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the workflow. | |
| table | Yes | Target table for the workflow (e.g., "incident", "change_request"). | |
| access | No | Workflow access level. | |
| active | No | Whether the workflow version is active. | |
| publish | No | Whether to publish the workflow after creation. Requires start_activity to be specified. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| template | No | Whether the workflow is a template. | |
| condition | No | Workflow trigger condition. | |
| activities | Yes | List of workflow activities to create. | |
| description | No | Description of the workflow. | |
| transitions | No | Transitions between activities. | |
| start_activity | No | Activity id or index to use as the start activity. Required when publish is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explicitly warning that multiple records (workflow, version, activities, transitions) are created, which aligns with the non-readOnly and openWorld annotations. It also discloses the orchestration sequence and the id/index referencing convention, providing behavioral context that is not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears in the first sentence, followed by a concise bullet-like orchestration list and a short cautionary note. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main orchestration steps and important side effects, but it omits the return value (e.g., workflow sys_id), which is significant given there is no output schema. The note to 'review the specification carefully' is vague and doesn't highlight potential validation failures or required dependencies beyond 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?
With 100% schema description coverage, the baseline is 3. The description adds the crucial rule that activities in transitions are referenced by `id` field or array index, which is not fully captured in the individual schema descriptions for `transitions` and `start_activity`. This clarifies how to use multiple parameters together, raising the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: it creates a complete ServiceNow workflow from a single specification, enumerating the orchestration steps (workflow, version, activities, transitions, optional publish). This verb+resource phrasing distinguishes it from sibling tools like batch_create_records or execute_flow, which target different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening sentence establishes a clear context: use this when you need to create a complete workflow from a specification rather than building its components individually. However, it does not explicitly state when not to use it or name alternative tools, so it lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_table_schemaDiscover Table SchemaARead-only
Discover the full schema of a ServiceNow table including all fields, types, references, and optionally choice values, relationships, UI policies, and business rules.
Returns the table name, label, parent class, and for each field: name, label, type, maxLength, mandatory, readOnly, referenceTable, and defaultValue.
Key use cases:
Understand the structure of a table before querying or scripting against it
Discover reference fields to understand table relationships
Find choice values for dropdown fields
Review UI policies and business rules that affect the table
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The ServiceNow table name to discover (e.g., "incident", "sys_user", "cmdb_ci"). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| include_choices | No | Include choice values for fields that have them (e.g., priority, state). Queries sys_choice. | |
| include_ui_policies | No | Include UI policies defined on the table. | |
| include_relationships | No | Include relationship information extracted from reference fields. | |
| include_business_rules | No | Include business rules defined on the table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring readOnlyHint=true and openWorldHint=true, the description adds value by detailing what will be returned (table name, label, parent class, per-field attributes) and explaining that optional flags query additional data sources like sys_choice. It does not contradict the annotations and provides useful context about the read-only, exploratory nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise. It opens with a clear summary sentence, follows with a compact return-value list, and then uses bullet points for key use cases. Every sentence provides useful information without redundancy 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?
The tool has six parameters and no output schema, but the description compensates by explaining the return structure and the effects of optional flags. It covers the main use cases and clearly indicates the optional data that can be included. However, it does not exhaustively describe all edge cases or behavior for invalid tables, which keeps it slightly below a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides comprehensive descriptions for all six parameters, including examples and defaults (e.g., 'include_choices: Include choice values for fields that have them'). The tool description restates some of this information (e.g., 'optionally choice values') but does not add significant new semantics 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 tool's purpose: 'Discover the full schema of a ServiceNow table including all fields, types, references, and optionally choice values, relationships, UI policies, and business rules.' This is a specific verb-resource combination that distinguishes it from sibling tools like lookup_table or explain_field by focusing on comprehensive schema discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit use cases: 'Understand the structure of a table before querying or scripting against it', 'Discover reference fields', 'Find choice values', and 'Review UI policies and business rules'. This gives clear context for when to use the tool, though it does not explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_actionExecute ActionADestructive
Execute a ServiceNow Flow Designer action by scoped name. Actions are the lowest-level building blocks in Flow Designer (e.g., lookup record, create task, send notification).
In foreground mode (default), the call blocks until the action completes and returns outputs directly. Actions typically complete quickly and foreground mode is usually appropriate.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution mode. "foreground" (default) runs synchronously and returns outputs when complete. "background" returns immediately with a context ID — use get_flow_context_status to poll, then get_flow_outputs or get_flow_error to retrieve results. Use background for flows with approval/wait steps. | |
| quick | No | Skip creation of execution detail records for better performance. Default false. Use true in CI/CD or when you don't need step-level detail. | |
| scope | No | Scope context for script execution. Can be a scope name (e.g., "x_myapp_custom") or sys_id. Use when the flow is in a scoped app. | |
| inputs | No | Input name-value pairs to pass to the flow/subflow/action. Keys are the input variable names defined in Flow Designer. | |
| timeout | No | Timeout in milliseconds for the execution. Only applies to foreground mode. Default is the ServiceNow server default (~30s). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| scoped_name | Yes | Scoped name of the flow/subflow/action to execute (e.g., "global.my_flow", "x_myapp_custom.create_incident_subflow"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds useful behavioral context: foreground blocks, background returns immediately with a context ID, and quick skips execution details. It does not restate annotations and provides mode-specific behavior beyond what annotations offer.
Agents need to know what a tool does to the world 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, with a clear one-sentence purpose followed by a focused paragraph on mode behavior. Every sentence adds value and no content is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main execution modes, how to retrieve background results (naming follow-up tools), and when to use quick mode. It does not explain error handling or return formats, but the lack of an output schema shifts some burden to the description. Overall, it is sufficiently complete for a tool with 7 parameters and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for all 7 parameters (100% coverage). The tool description does not add significant per-parameter detail, but it does contextualize the mode parameter within the foreground/background discussion. Baseline 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?
States a specific verb ('Execute') plus a specific resource type ('ServiceNow Flow Designer action by scoped name'). The phrase 'Actions are the lowest-level building blocks' clearly distinguishes it from sibling tools like execute_flow and execute_subflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on when to use foreground vs background modes and suggests background for flows with approval/wait steps. However, it does not explicitly name alternative tools for running full flows or subflows, so guidance on tool selection is 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.
execute_flowExecute FlowADestructive
Execute a published ServiceNow Flow Designer flow by scoped name. Runs the flow using sn_fd.FlowAPI via a background script.
In foreground mode (default), the call blocks until the flow completes and returns outputs directly. In background mode, it returns immediately with a context ID that you can poll with get_flow_context_status.
IMPORTANT: Flows with approval or wait steps MUST use background mode — foreground mode will fail if the flow enters a waiting state.
NOTE: This tool requires the flow to be published. If you are iterating and building a flow that may not be published yet, use test_flow instead — it tests the flow in its current draft state, exactly as the 'Test' button in Flow Designer does.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution mode. "foreground" (default) runs synchronously and returns outputs when complete. "background" returns immediately with a context ID — use get_flow_context_status to poll, then get_flow_outputs or get_flow_error to retrieve results. Use background for flows with approval/wait steps. | |
| quick | No | Skip creation of execution detail records for better performance. Default false. Use true in CI/CD or when you don't need step-level detail. | |
| scope | No | Scope context for script execution. Can be a scope name (e.g., "x_myapp_custom") or sys_id. Use when the flow is in a scoped app. | |
| inputs | No | Input name-value pairs to pass to the flow/subflow/action. Keys are the input variable names defined in Flow Designer. | |
| timeout | No | Timeout in milliseconds for the execution. Only applies to foreground mode. Default is the ServiceNow server default (~30s). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| scoped_name | Yes | Scoped name of the flow/subflow/action to execute (e.g., "global.my_flow", "x_myapp_custom.create_incident_subflow"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavior beyond what annotations provide: foreground mode blocks until completion, background mode returns a context ID for polling, and foreground mode will fail on flows with waiting states. It also warns that flows must be published. These are non-obvious operational constraints that significantly aid 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?
The description is well-structured with a clear opening sentence, distinct paragraphs for mode behavior, and highlighted IMPORTANT/NOTE sections. Every sentence serves a purpose—purpose, mode semantics, and alternatives—without redundancy. It's appropriately sized for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, dual execution modes, no output schema), the description covers all key operational aspects: how to run, polling mechanism, prerequisites, and alternative tools. It addresses the main pitfalls (wait states, unpublished flows) and sufficiently orients an agent for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with detailed descriptions (e.g., mode, quick, scope, inputs, timeout, instance, scoped_name). The tool description adds context about modes but does not materially enhance parameter meaning beyond what the schema already explains. Baseline 3 applies because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-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: "Execute a published ServiceNow Flow Designer flow by scoped name." It uses a specific verb ('execute'), identifies the resource, and provides implementation detail (sn_fd.FlowAPI). It distinguishes itself from siblings by referencing test_flow and get_flow_context_status, 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?
Explicit guidance is given for when to use this tool vs alternatives: flows with approval/wait steps MUST use background mode, and for unpublished flows, the description says to use test_flow instead. This directly addresses selection criteria and prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_scriptExecute Background ScriptADestructive
Execute JavaScript on a ServiceNow instance using Scripts - Background (the /sys.scripts.do endpoint). The script runs server-side with full GlideSystem API access (gs, GlideRecord, GlideAggregate, GlideDateTime, GlideUser, etc.). Use gs.print() or gs.info() to produce output.
SCOPE BEHAVIOR: Scripts execute within the specified application scope. When running in a scoped app (e.g., scope: 'x_myapp_custom'), you can reference that scope's Script Includes and classes directly by name (e.g., MyUtil.doSomething()) without fully-qualifying them. When running in global scope, scoped classes must be fully-qualified (e.g., x_myapp_custom.MyUtil.doSomething()).
IMPORTANT: This executes code directly on the ServiceNow instance. Always review scripts before execution and prefer read-only operations unless modification is explicitly intended.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | The application scope to execute the script in. Accepts either: - A scope name (e.g., "global", "x_myapp_custom", "x_snc_app") — automatically resolved to the corresponding sys_id via the sys_scope table. - A sys_id directly (32-character hex string) if already known. Defaults to "global". Set this to the target app scope when you need to access scoped Script Includes, Business Rules, or other scoped artifacts by their unqualified names. | global |
| params | No | Optional key-value pairs for parameter substitution in the script. Every occurrence of {paramName} in the script text will be replaced with the corresponding value before execution. Useful for safely injecting dynamic values without string concatenation in the script. Example: { "table": "incident", "field": "priority" } replaces {table} and {field} in the script. | |
| script | Yes | The JavaScript code to execute on the ServiceNow instance. Use gs.print() or gs.info() to output results — these are the only ways to capture output from background scripts. The script runs in the server-side Rhino engine with access to all ServiceNow server-side APIs: GlideRecord, GlideAggregate, GlideDateTime, GlideUser, gs.getUser(), gs.now(), GlideSysAttachment, and more. Scripts execute with the permissions of the authenticated user. | |
| instance | No | The ServiceNow instance auth alias to execute the script on. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining server-side execution with full GlideSystem API access, output via gs.print()/gs.info(), scope resolution nuances, and an explicit safety warning about executing code directly on the instance. These details add valuable behavioral context that annotations alone do not 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 structured in three focused paragraphs: an initial overview, a detailed scope behavior explanation, and a safety reminder. Each sentence serves a clear purpose, and the most critical information is front-loaded. There is no redundant text, making it highly efficient for its complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the absence of an output schema, the description is remarkably complete: it covers the target endpoint, available APIs, output capture methods, scope behavior, and safety precautions. The schema and annotations further fill in parameter and safety details, leaving no major contextual 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 input schema provides 100% coverage with rich descriptions for all four parameters (script, scope, params, instance), including syntax, defaults, and usage examples. The description itself adds little to parameter semantics; the schema already handles this dimension thoroughly, so the 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 specifies the verb 'Execute' and the resource 'JavaScript on a ServiceNow instance using Scripts - Background (the /sys.scripts.do endpoint)'. This distinguishes it from sibling tools like execute_subflow or execute_action, which target predefined workflows rather than arbitrary code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers implicit usage context by detailing scope behavior and warning to 'prefer read-only operations unless modification is explicitly intended,' but it does not explicitly state when to choose this tool over alternatives like execute_subflow or execute_flow. No direct comparisons or exclusions are provided, so guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_subflowExecute SubflowADestructive
Execute a ServiceNow Flow Designer subflow by scoped name. Subflows are reusable building blocks in Flow Designer — this is the primary tool for testing subflows during development.
In foreground mode (default), the call blocks until the subflow completes and returns outputs directly. In background mode, it returns a context ID for polling with get_flow_context_status.
Pass inputs as key-value pairs matching the subflow's input variables.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution mode. "foreground" (default) runs synchronously and returns outputs when complete. "background" returns immediately with a context ID — use get_flow_context_status to poll, then get_flow_outputs or get_flow_error to retrieve results. Use background for flows with approval/wait steps. | |
| quick | No | Skip creation of execution detail records for better performance. Default false. Use true in CI/CD or when you don't need step-level detail. | |
| scope | No | Scope context for script execution. Can be a scope name (e.g., "x_myapp_custom") or sys_id. Use when the flow is in a scoped app. | |
| inputs | No | Input name-value pairs to pass to the flow/subflow/action. Keys are the input variable names defined in Flow Designer. | |
| timeout | No | Timeout in milliseconds for the execution. Only applies to foreground mode. Default is the ServiceNow server default (~30s). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| scoped_name | Yes | Scoped name of the flow/subflow/action to execute (e.g., "global.my_flow", "x_myapp_custom.create_incident_subflow"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnly=false. The description adds valuable behavioral detail: foreground blocks until completion and returns outputs, background returns a context ID for polling, and quick mode skips execution detail records. It also clarifies that timeout only applies to foreground. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the core purpose and then expanding into mode behavior and input passing. Every sentence provides necessary context with no fluff. It's efficiently structured and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters with no output schema, but the description explains the key behavioral concepts: foreground vs. background, timeout scoping, and quick mode. It also points to follow-up tools for polling and retrieval. Minor gaps exist (e.g., error handling), but there are dedicated sibling tools for that, and the description is sufficiently complete for a complex execution 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 100%, so all parameters have descriptions. The description adds a general note on passing inputs as key-value pairs, but this is already reflected in the inputs parameter schema. While the description doesn't rehash every parameter, it doesn't need to; the schema does the heavy lifting, so a baseline 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 'Execute a ServiceNow Flow Designer subflow by scoped name' — a specific verb and resource. It differentiates from siblings by explicitly calling out subflows as 'reusable building blocks' and positions itself as 'the primary tool for testing subflows during development,' distinguishing it from execute_flow and execute_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?
The description provides clear usage context: foreground vs. background modes, with background explicitly recommended 'for flows with approval/wait steps.' It also references get_flow_context_status for polling, but it doesn't explicitly name alternatives like execute_flow or execute_action or state when not to use this tool. This is strong guidance but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_fieldExplain FieldARead-only
Get detailed explanation of a specific field on a ServiceNow table, including type, constraints, help text, and available choice values.
Use this to understand what a field does, what values it accepts, and how it is configured before reading or writing data.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | The field element name to explain (e.g., "state", "priority", "assigned_to"). | |
| table | Yes | The ServiceNow table name containing the field (e.g., "incident", "sys_user"). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful details about the output content (type, constraints, help text, choice values), but it does not disclose any additional behavioral traits such as failure modes, permission requirements, or whether fields without choices are omitted. With annotations present, this is adequate but not exceptional.
Agents need to know what a tool does to the world 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 states the exact purpose and output contents, the second gives a clear usage directive. It is front-loaded, no filler, 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 read-only explanation tool with no output schema, the description covers the main intent, output expectations, and a usage cue. It does not mention error scenarios (e.g., field not found) or distinguish from similar field-related tools, but it is largely complete for its simplicity. A 4 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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% — every parameter (table, field, instance) has a meaningful description. The tool description itself does not add parameter-specific details beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get detailed explanation') and resource ('a specific field on a ServiceNow table'), and enumerates what the explanation includes (type, constraints, help text, choice values). This makes it clearly distinct from sibling table-level tools like 'discover_table_schema' or 'lookup_columns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear usage context: 'Use this to understand what a field does... before reading or writing data.' This tells the agent when to use it, though it does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_record_xmlExport Record as XMLARead-only
Export a single record from a ServiceNow instance in unload XML format. Uses the /.do?UNL endpoint to generate ServiceNow-native XML that can be imported into another instance or used as a configuration backup.
Common use cases:
Backing up a Script Include, Business Rule, or other configuration record
Exporting a record to transfer it to another instance
Comparing record definitions across instances
Generating XML for inclusion in an update set
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table name of the record to export (e.g., 'sys_script_include', 'sys_script', 'incident', 'sys_ui_page', 'kb_knowledge'). | |
| sys_id | Yes | The sys_id of the record to export. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool is known to be a safe read operation. The description adds valuable behavior context by naming the unload XML format and the endpoint, and noting the XML can be imported into another instance. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and front-loaded with the core purpose, followed by a bulleted list of use cases. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only export tool with three fully documented parameters and no output schema, the description covers the key context: purpose, format, endpoint, and likely use cases. The XML output is implied by the phrase 'generate ServiceNow-native XML,' which is sufficient for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 all three parameters (table, sys_id, instance) fully described. The description does not add additional parameter-level detail beyond the schema, but it reinforces the single-record scope and the XML format, matching the baseline for well-documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-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 verb and resource: 'Export a single record from a ServiceNow instance in unload XML format.' It specifies the endpoint and distinguishes itself from the sibling import_records_xml by emphasizing the export direction and single-record 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 provides four concrete common use cases (backup, transfer, comparing, update sets) that establish clear context for when to use the tool. It does not explicitly mention alternatives or when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_atf_testsFind ATF TestsARead-only
Search for ATF (Automated Test Framework) tests on a ServiceNow instance. Find tests by name, description, or category. Returns a list of matching tests with their sys_ids, which can then be passed to the run_atf_test tool for execution.
Use this when you need to discover which ATF tests exist before running them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tests to return. Default is 25. | |
| active | No | Filter by active status. Defaults to true (only active tests). Set to false to find only inactive tests. | |
| category | No | Filter by test category (e.g., "Custom", "Module"). Maps to the sys_atf_test.category field. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| search_term | No | Text to search for in test name and description fields. Case-insensitive contains matching. Example: "incident" finds tests with "incident" in the name or description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds valuable context by stating the output (list of tests with sys_ids) and how it connects to run_atf_test. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world 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: first sentence states the core action, second explains the return value, third gives usage guidance. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating the return type and purpose. It covers the tool's role in the ATF workflow sufficiently for a search tool, though it could elaborate on output structure if 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?
Schema coverage is 100% with detailed descriptions for all five parameters. The description's mention of 'name, description, or category' only echoes the schema's search_term and category definitions, adding no new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for ATF tests with specific fields (name, description, category) and returns sys_ids for later execution. It distinguishes itself from the sibling run_atf_test tool by explicitly noting the chaining workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you need to discover which ATF tests exist before running them,' providing clear usage context. It does not explicitly list exclusions or alternative tools, but the reference to passing sys_ids to run_atf_test implies the distinction from execution tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_taskFind Task by NumberARead-only
Find a task record by its number (e.g., "INC0010001", "CHG0030002"). Returns the full record if found, or a clear message if not. Use this to look up sys_ids, check current state, or retrieve task details before performing actions like assigning or resolving.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table name to search in (e.g., "incident", "change_request", "problem", "sc_task"). | |
| number | Yes | The task number to find (e.g., "INC0010001", "CHG0030002", "PRB0040001"). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, which already signal a safe, read-only operation. The description adds meaningful behavioral context by stating that it 'returns the full record if found, or a clear message if not,' which goes beyond the hints. It does not conflict with annotations and enriches the agent's expectation of outcome.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the purpose and examples, then immediately followed by usage guidance. Every phrase earns its place, with no redundant content. It is compact and easily parsed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 lookup tool with no output schema, the description covers purpose, return behavior, examples, and usage context. It does not detail the exact record structure, but 'full record' is sufficient for most cases. The instance parameter is explained only in the schema, but that is acceptable given schema richness.
Complex tools with many parameters or behaviors need more documentation. 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 100% coverage with detailed descriptions for all three parameters (table, number, instance), so the description does not need to add much. It reinforces examples like 'INC0010001' that appear in the schema but adds no new meaning. Baseline 3 is appropriate since 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 verb (find), resource (task record), and scope (by number), with concrete examples (INC0010001, CHG0030002). It distinguishes itself from generic lookup siblings like query_table and lookup_table by focusing on task records with a number, which aligns with task-related siblings like assign_task and resolve_incident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool 'to look up sys_ids, check current state, or retrieve task details before performing actions like assigning or resolving.' This provides clear context for when to use it. However, it does not explicitly mention when not to use it or name alternatives (e.g., query_table for broader searches), so there are no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_app_detailsGet Application DetailsARead-only
Get detailed information about a ServiceNow application by its sys_id. Returns version, install status, update availability, scope, vendor, dependencies, store link, and other metadata.
Use lookup_app to find an application's sys_id by name, then use this tool to get full details.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | The sys_id of the application to get details for. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds what the tool returns (version, install status, etc.) but does not disclose any behavioral nuances like error handling, auth requirements beyond the environment variable, or potential side effects. This adds some context but not deep 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 sentences long, front-loaded with the main purpose, and includes a helpful usage tip without unnecessary filler. 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 read-only detail-fetching tool with good annotations and clear usage, the description is mostly complete. It lists the key return fields and provides the lookup_app flow. However, there is no output schema, so the description could benefit from a bit more detail on the shape or structure of the returned metadata, but it is not essential for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (app_id, instance) have descriptive text in the schema. The description does not add meaning beyond the schema; it only restates that the tool works by sys_id, which is already in the schema. Thus baseline 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 tool 'Get detailed information about a ServiceNow application by its sys_id' with a specific verb and resource. It also distinguishes itself from sibling tools like lookup_app by focusing on retrieving full details rather than resolving names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit usage guidance: 'Use lookup_app to find an application's sys_id by name, then use this tool to get full details.' This tells when to use this tool and names the prerequisite alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachment_infoGet Attachment InfoARead-only
Get metadata for a specific attachment by its sys_id. Returns file name, content type, size, and the record it is attached to.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the attachment to retrieve. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows it's a safe read operation. The description adds the return fields (file name, content type, size, attached record), which is useful but not extensive. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, information-dense sentences. The main action is front-loaded, and every word earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool, the description covers the essential elements: what it does, what identifier is needed, and what it returns. The instance param is self-explanatory in the schema, and the absence of an output schema is compensated by listing return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—both params have clear descriptions. The description's mention of 'sys_id' merely echoes the schema, adding no significant extra semantic 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?
Description uses specific verb 'Get metadata' plus resource 'attachment' and identifier 'sys_id', making the purpose immediately clear. It distinguishes itself from sibling tools like list_attachments and upload_attachment by focusing on a single attachment's metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the usage context: when you have a specific attachment's sys_id and need its metadata. It does not explicitly name alternative tools or exclusions, but the context is unambiguous, preventing confusion with listing or uploading tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalog_categoryGet Catalog Category DetailsARead-only
Get details of a specific service catalog category by sys_id, including the count of items in that category.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the catalog category. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, so the safe read nature is conveyed. The description adds the item count detail but does not disclose additional behavioral traits like authentication requirements or return format, which are not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the purpose and key detail without any filler. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only tool with fully described parameters and no output schema. The description gives enough context (including the item count) to select and invoke the tool, though it could explicitly mention expected return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters fully described. The description only mentions sys_id and does not add meaning beyond the schema. Baseline of 3 is appropriate since the schema carries the parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'gets details of a specific service catalog category by sys_id', which is a specific verb+resource+scope. It also mentions the item count, distinguishing it from sibling tools like list_catalog_categories and get_catalog_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 you need details of a specific category identified by sys_id, but it does not explicitly state when to use it over alternatives or provide exclusions. The guidance is 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.
get_catalog_itemGet Catalog Item DetailsARead-only
Get details of a specific service catalog item by sys_id, optionally including its variables (form fields). Use this to understand what a catalog item offers and what information is needed before submitting a request.
Set include_variables to true (default) to also retrieve the item's form fields.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the catalog item. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| include_variables | No | Whether to include the item's variables/form fields (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which covers the safety profile. The description adds valuable behavioral context about the optional 'include_variables' parameter and its default behavior, explaining that it retrieves form fields. This goes 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 brief and front-loaded. The first sentence states the core purpose, and the second provides a useful usage hint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with no output schema, the description is adequate. It covers the main purpose, optional variables, and usage context. It doesn't discuss error cases or return formats, but those aren't critical for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 already well-documented. The description reinforces the 'include_variables' default but adds no new meaning beyond what's in the schema. Baseline 3 is appropriate since the schema carries the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-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: 'Get details of a specific service catalog item by sys_id, optionally including its variables.' This specific verb+resource combination distinguishes it from sibling tools like 'list_catalog_items' and 'list_catalog_item_variables'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: 'Use this to understand what a catalog item offers and what information is needed before submitting a request.' While it doesn't explicitly exclude alternatives, this guidance is sufficient for an agent to decide when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cmdb_relationshipsGet CMDB RelationshipsARead-only
Get direct relationships of a CMDB Configuration Item (CI). Returns upstream, downstream, or both relationship directions. Use this for impact analysis, dependency mapping, and understanding CI topology.
Provide the CI sys_id (from cmdb_ci or any CI class table). Optionally filter by relationship type (e.g., 'Depends on::Used by', 'Contains::Contained by').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of relationships to return. Default is 100. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| ci_sys_id | Yes | The sys_id of the Configuration Item to get relationships for. | |
| direction | No | Relationship direction: "upstream" (parents/dependencies), "downstream" (children/dependents), or "both". Default is "both". | both |
| relation_type | No | Filter by relationship type name (e.g., "Depends on::Used by", "Contains::Contained by"). If omitted, returns all relationship types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds meaningful context by explaining that it returns only direct relationships and accepts direction filters, which is not obvious from the annotations. It also clarifies that the sys_id can come from any CI class table. It does not disclose return format or pagination, but for a read-only tool with annotations covering safety, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs, with the first sentence stating the core purpose and the second giving use cases. The second paragraph adds practical parameter guidance. Every sentence earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, 1 required) and strong schema coverage, the description is complete enough. It covers purpose, use cases, and parameter details, while annotations handle safety. Although there is no output schema, the description hints at return directions appropriately, making it sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for all 5 parameters, each with descriptions. The description adds value beyond the schema by providing concrete examples of relationship types (e.g., 'Depends on::Used by', 'Contains::Contained by') and clarifying that ci_sys_id can come from any CI class table. This enhances understanding without repeating schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get direct relationships of a CMDB Configuration Item (CI).' It also specifies the return directions (upstream, downstream, or both) and distinguishes itself from the sibling tool 'traverse_cmdb_graph' by emphasizing 'direct' relationships. The use cases (impact analysis, dependency mapping, topology) further clarify intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: 'Use this for impact analysis, dependency mapping, and understanding CI topology.' However, it does not explicitly mention alternatives or when not to use it, such as comparing with 'traverse_cmdb_graph' for indirect relationships. The guidance is present but not fully exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_scopeGet Current Application ScopeARead-only
Get the currently active application scope on the ServiceNow instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, and the description is consistent with these. The description adds no extra behavioral context such as return value format or potential errors, but for a simple read-only getter, the annotations sufficiently cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the purpose with no redundant words. It is optimally concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and no output schema, the description covers the essential purpose. It does not explicitly describe the return value format, but the name and wording imply the current scope name. Given the low complexity and good annotations, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single 'instance' parameter with a detailed description, achieving 100% schema coverage. The tool description adds no additional parameter semantics, so the 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 ('Get') and resource ('currently active application scope'), making it distinct from related tools like set_current_scope or get_app_details. It is unambiguous and directly conveys the tool's 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?
Usage context is implied: the tool is for when one needs to know the current application scope. However, the description does not explicitly mention when to prefer this over alternatives (e.g., set_current_scope) or any prerequisites, leaving the agent to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_update_setGet Current Update SetARead-only
Get the currently active update set for the session.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint: true, so the agent knows this is a safe read operation. The description adds the 'for the session' scoping detail, which is useful context beyond the annotations. However, it does not disclose what happens if no active update set exists, potential errors, or the exact return format, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence containing exactly the necessary information—no wasted words. It is concise and well-structured, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional parameter, no output schema, read-only annotation), the description is mostly complete. It clearly states what is retrieved. However, it omits any detail about the return object's shape or possible error conditions, which would be useful for full completeness, especially since no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% for the single 'instance' parameter, so the schema already fully documents its purpose. The description adds no parameter-related information, which is acceptable given the schema's completeness. The baseline score of 3 applies because the structured data 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 a specific verb ('Get') and resource ('currently active update set'), which distinguishes it from sibling tools like 'list_update_sets' (lists all) and 'set_current_update_set' (sets). The phrase 'for the session' adds scope, 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 clearly indicates when to use the tool—when you need the active update set in the current session. However, it does not explicitly mention alternatives or exclusion criteria, such as 'use list_update_sets to see all sets' or 'use set_current_update_set to change it.' Despite this, the context is clear enough for an 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_flow_context_statusGet Flow Context StatusARead-only
Query the current status of a flow execution by its context ID. Use this to poll background flow executions started with execute_flow, execute_subflow, or execute_action in background mode.
Possible states: QUEUED, IN_PROGRESS, WAITING, COMPLETE, CANCELLED, ERROR.
Typical pattern: execute in background -> poll this tool every few seconds -> once COMPLETE, call get_flow_outputs. If ERROR, call get_flow_error.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| context_id | Yes | The flow context sys_id returned from an execute_flow, execute_subflow, or execute_action call (the contextId field). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: it lists possible states (QUEUED, IN_PROGRESS, etc.) and describes the polling pattern. It doesn't detail error responses for invalid context IDs, but annotations already cover the read-only safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. Every sentence contributes value: the initial query statement, the usage context, the state enumeration, and the typical workflow pattern. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-polling tool, the description is complete. It lists all possible states and suggests next steps (get_flow_outputs on COMPLETE, get_flow_error on ERROR). No output schema exists, but the description covers what the agent needs to know about the return value and workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 both parameters (instance and context_id) are already fully described in the input schema. The description does not add additional parameter semantics, so baseline 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 tool's function: 'Query the current status of a flow execution by its context ID.' It specifies the resource (flow execution status) and the key input (context ID), distinguishing it from sibling tools like get_flow_outputs and get_flow_error.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: 'Use this to poll background flow executions started with execute_flow, execute_subflow, or execute_action in background mode.' It also provides a typical pattern with alternatives: 'once COMPLETE, call get_flow_outputs. If ERROR, call get_flow_error.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_errorGet Flow ErrorARead-only
Retrieve the error message from a failed flow execution by its context ID. Call this after get_flow_context_status shows ERROR to understand why the flow failed.
Returns the flow's error message which can be used to diagnose and fix issues in the flow definition.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| context_id | Yes | The flow context sys_id from the execution result's contextId field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true annotation, the description correctly aligns as a read operation. It adds valuable behavioral context by explaining the precondition (only for failed flows) and that the return is the error message for diagnosing flow definition issues. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and immediately useful usage condition. Every sentence adds value, no redundancy 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 retrieval tool with 2 parameters and no output schema, the description fully covers purpose, usage trigger, parameter reference, and return value. It integrates well with sibling tools by referencing get_flow_context_status, and no critical information is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both instance and context_id fully documented in the schema. The description itself adds no additional parameter meaning beyond mentioning 'context ID' which mirrors the schema's required context_id field. Baseline 3 applies as 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 tool retrieves the error message from a failed flow execution by context ID, using specific verb 'retrieve' and naming the exact resource. It distinguishes itself from sibling tools like get_flow_logs and get_flow_outputs by focusing specifically on the error message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use: 'Call this after get_flow_context_status shows ERROR'. However, it does not explicitly mention when not to use it or name alternative tools for related diagnostic needs, so it falls short of full alternative/exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_execution_detailsGet Flow Execution DetailsARead-only
Get rich execution details for a flow context: per-action timing, inputs, outputs, and high-level metadata (state, runtime, who ran it, test vs production).
This is the primary diagnostic tool after test_flow or execute_flow — use it to understand what each action did, identify which step failed, inspect inputs and outputs, and iterate on the flow definition.
Uses the ProcessFlow operations API (GET /api/now/processflow/operations/flow/context/{id}), the same endpoint Flow Designer uses to display execution details.
IMPORTANT: Requires flow operations logging to be enabled on the instance. If the execution report is unavailable, the response will include a notice explaining why.
Typical workflow: test_flow → get_flow_execution_details → diagnose → modify flow → test_flow again
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope sys_id for the ProcessFlow API transaction scope query parameter. If omitted, the API uses the default scope. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| context_id | Yes | The flow context sys_id returned by test_flow, execute_flow, execute_subflow, or execute_action (the contextId field in the result). | |
| include_flow_definition | No | Whether to include the full flow definition snapshot in the response. Default: false. Enable only when you need to inspect the raw flow structure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint, so the bar is lower. The description adds valuable context: it specifies the underlying ProcessFlow API endpoint, states that flow operations logging is required, and explains that an unavailable report will include a notice. This goes beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise purpose statement, followed by usage guidance, endpoint context, an important prerequisite, and a typical workflow. Every sentence adds value and the most important 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?
Since there is no output schema, the description compensates by listing the types of information returned (per-action timing, inputs, outputs, metadata) and provides context about the endpoint and prerequisites. It does not detail error handling or the exact response structure beyond the notice, but it is complete enough for a diagnostic 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?
The input schema has 100% coverage with descriptions for all four parameters. The tool description does not add extra parameter-specific semantics beyond what the schema already provides, 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 uses a specific verb 'Get' and specifies the resource 'rich execution details for a flow context' including per-action timing, inputs, outputs, and high-level metadata. It clearly distinguishes itself from sibling tools like get_flow_context_status and get_flow_logs by emphasizing detailed per-action diagnostics and positioning itself as the primary diagnostic tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: after test_flow or execute_flow, for diagnosing failures, inspecting inputs/outputs, and iterating on flow definitions. It also includes a typical workflow and a prerequisite (flow operations logging must be enabled). It does not explicitly mention when not to use it or name alternative tools, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_logsGet Flow Execution LogsARead-only
Retrieve flow execution log entries from sys_flow_log for a given context.
Log entries include error messages, step-level debug output, and cancellation reasons. Use this alongside get_flow_execution_details to get the full picture of what happened during an execution.
Note: Log entries may be empty for simple successful executions, or if the flow's reporting level is set to NONE. Errors and warnings are always logged regardless of the reporting level setting.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of log entries to return. Default: 100. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| context_id | Yes | The flow context sys_id returned by test_flow, execute_flow, execute_subflow, or execute_action. | |
| order_direction | No | Order direction: "asc" (default, oldest first) or "desc" (newest first). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral details: it explains that log entries include errors, debug output, and cancellation reasons, and that logs may be empty depending on execution success or reporting level. It also asserts that errors/warnings are always logged regardless of reporting level, which is important context not captured by 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 concise and front-loaded: the first sentence states the core action, the second details content, and the third gives a critical caveat. Every sentence earns its place without repetition 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?
Although there is no output schema, the description clarifies what the tool returns (log entries with specific content) and when it may be empty. It also references the companion tool for a fuller picture. This is sufficient for a relatively simple read-only tool, with minor omissions like pagination behavior being covered by the limit parameter in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already having a meaningful description (e.g., context_id identifies the flow execution, limit sets max entries, order_direction sorts). The description does not add extra parameter semantics, so it stays at the baseline for full 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's function: 'Retrieve flow execution log entries from sys_flow_log for a given context.' It specifies the source table and the input (context), and distinguishes itself from the sibling get_flow_execution_details by being the log retrieval counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends using this tool 'alongside get_flow_execution_details to get the full picture,' providing a clear alternative/complement. It also gives situational context by noting log entries may be empty for simple successes or when reporting level is NONE, and that errors/warnings are always logged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_outputsGet Flow OutputsARead-only
Retrieve outputs from a completed flow/subflow/action execution by its context ID. Only call this after get_flow_context_status shows COMPLETE.
Returns the output name-value pairs defined by the flow/subflow/action.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| context_id | Yes | The flow context sys_id from the execution result's contextId field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the description adds value by clarifying the return format (output name-value pairs) and the prerequisite status condition. It doesn't disclose failure behavior, but also doesn't contradict 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 tightly written sentences that front-load the core action and add a key precondition. No redundant phrases or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only retrieval tool with full schema coverage, the description covers what it returns, the precondition, and the resource type. It is sufficient for an agent to know when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (context_id and instance), achieving 100% coverage. The description repeats 'context ID' but adds no additional parameter-level detail 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 'Retrieve outputs from a completed flow/subflow/action execution by its context ID,' specifying the verb, resource, and key parameter. It distinguishes from sibling tools like get_flow_context_status (status) and get_flow_logs (logs) by focusing on the output values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly conditions usage on get_flow_context_status showing COMPLETE, providing a clear when-to-use rule. It doesn't name alternatives or exclusions, but the precondition is specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kb_articleGet Knowledge ArticleARead-only
Get the full content of a knowledge article by sys_id, including the HTML body text. Use this when you need to read, review, or extract content from an article.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the knowledge article. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description aligns with this by describing a read operation. It adds useful context by noting that the response includes the HTML body text, which goes beyond the structured 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 two succinct sentences with action-first wording. Every sentence adds value, and there is no redundant or filler 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 is simple, has no output schema, and the description communicates that full content including HTML body is returned. This is sufficient for the agent to understand the result, though the exact response structure is not specified.
Complex tools with many parameters or behaviors need more documentation. 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 100% coverage with detailed descriptions for both sys_id and instance. The description mentions 'by sys_id' but does not add significant meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-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 'Get the full content of a knowledge article by sys_id, including the HTML body text.' This uses a specific verb and resource, and the focus on retrieving a single article by sys_id distinguishes it from siblings like list_kb_articles or create_kb_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 explicit usage guidance: 'Use this when you need to read, review, or extract content from an article.' This gives clear context, though it does not explicitly mention alternative tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_knowledge_baseGet Knowledge Base DetailsARead-only
Get details of a specific knowledge base by sys_id, including the total number of articles and categories. Use this to understand the scope of a KB before browsing its contents.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the knowledge base. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds behavioral context by specifying exactly what details are returned (article and category counts) and positioning it as a scoping tool before browsing. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the core function and include a usage guideline. No redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with read-only annotations, the description adequately explains purpose, return content, and usage context. The lack of an output schema is compensated by mentioning the included counts. It does not specify error behavior, but that is not critical for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 sys_id and instance well-documented. The description's mention of 'by sys_id' adds no additional semantic meaning beyond what the schema already provides. Baseline 3 is appropriate because the schema carries the parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets details of a specific knowledge base by sys_id, including article and category counts. This distinguishes it from siblings like list_knowledge_bases (which lists all KBs) and get_kb_article (which gets article 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 a clear use case: 'Use this to understand the scope of a KB before browsing its contents.' It implies when to use this tool (as a precursor to browsing articles/categories) but does not explicitly mention alternatives or exclusions. However, the context is sufficient for a straightforward retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_records_xmlImport Records from XMLADestructive
Import XML records into a ServiceNow instance via the sys_upload.do processor. Accepts ServiceNow unload XML format (the output of export_record_xml or update set XML exports).
IMPORTANT: This is a mutative operation that creates or updates records on the instance. Always verify the XML content and target table before importing. Use this for restoring configurations, migrating records between instances, or applying exported record definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| xml_content | Yes | The XML content to import in ServiceNow unload format. This is typically the output from export_record_xml or an XML update set export. | |
| target_table | Yes | The target table to import the records into (e.g., 'sys_script_include', 'sys_script', 'incident'). Must match the table in the XML content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as mutative (readOnlyHint false) and destructive (destructiveHint true). The description reinforces this with 'mutative operation that creates or updates records' and adds a caution to verify content. It does not contradict annotations, but adds limited new behavioral context 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 concise and front-loaded, with the first sentence immediately stating the action and mechanism. The second sentence adds a clear warning and use cases. Every sentence earns its place with no redundancy 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?
Given the tool's moderate complexity (3 parameters, no output schema) and the presence of annotations, the description is largely complete. It covers purpose, usage, and safety, but could potentially mention error handling or what the response looks like. Overall, it is sufficient for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, so the schema already fully describes each parameter. The description adds minimal new information about parameters, only referencing the XML format which is also mentioned in the schema. 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 tool imports XML records into a ServiceNow instance via the sys_upload.do processor, and specifies the format as ServiceNow unload XML. It distinguishes itself from sibling tools like export_record_xml by being the import counterpart, and from other creation tools by focusing on XML content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'for restoring configurations, migrating records between instances, or applying exported record definitions.' It also provides a clear caution about verifying XML content and target table. However, it does not explicitly mention alternatives or when not to use it, which is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_update_setInspect Update SetARead-only
Inspect an update set's contents — lists all components grouped by type (business rules, script includes, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the update set to inspect. | |
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations readOnlyHint=true already convey a safe read operation. The description adds behavioral detail about output structure ('grouped by type'), which goes beyond the annotation. No contradictions or hidden side effects are mentioned; this is sufficient given 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 one tight sentence with no unnecessary words. It front-loads the action verb, specifies the resource, and adds illustrative examples in parentheses—all without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, output format, and typical contents. While there is no output schema, the grouped-by-type description provides a mental model. It could mention limitations or dependencies, but for a read-only inspection tool, it is sufficiently 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% for parameters sys_id and instance, so the baseline is 3. The description does not add parameter-specific semantics, but it implies the need for an update set identifier ('an update set's contents'). The schema already documents both parameters clearly.
Input schemas describe structure but not intent. Descriptions should explain non-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 specifies the verb 'inspect' and the resource 'update set's contents', and differentiates from sibling tools like list_update_sets by focusing on the components within an update set. The examples 'business rules, script includes' add specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear usage: when you need to see the components of a specific update set. It does not explicitly name alternatives or exclusions, but the context of 'inspect contents' is distinct enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_from_app_repoInstall from App RepositoryADestructive
Install an application from the company's ServiceNow application repository using the CI/CD API. This is a MUTATIVE, LONG-RUNNING operation that blocks until installation completes or times out (default: 30 minutes).
Typically used for deploying custom applications across instances (e.g., dev -> test -> prod). Use list_company_apps to find the application scope and sys_id.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | The scope name of the application to install (e.g., "x_acme_my_app"). | |
| sys_id | Yes | The sys_id of the application in the repository. | |
| version | No | Specific version to install. If omitted, installs the latest. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| timeout_minutes | No | Maximum time to wait for installation to complete, in minutes. Default 30. | |
| base_app_version | No | Specific version of the base application to upgrade to. | |
| auto_upgrade_base_app | No | Whether to automatically upgrade the base application if required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this is a MUTATIVE, LONG-RUNNING operation that blocks until completion or timeout, adding meaningful detail beyond the annotations (which only mark it destructive and non-idempotent). It also mentions the default timeout of 30 minutes, providing crucial operational 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 three sentences, front-loaded with the core action, and every sentence provides distinct value: action/resource, behavioral caveat, and usage context. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's mutative and long-running nature, the description covers expected behavior (blocking), timeout, and typical use case. However, there's no output schema, and the description doesn't explicitly state what the tool returns after completion (e.g., success status, installation logs), leaving a minor gap in expected outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple 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% with detailed descriptions for every parameter, so the schema carries the heavy lifting. The description adds value by explaining the overall blocking/timeout behavior and referencing list_company_apps to find scope and sys_id, which indirectly clarifies the purpose of key parameters. However, it doesn't introduce new parameter-specific details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Install') and identifies a precise resource: applications from the company's ServiceNow application repository via the CI/CD API. It also distinguishes from sibling tools like install_store_app by specifying the company repository rather than the store, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool: 'Typically used for deploying custom applications across instances (e.g., dev -> test -> prod).' It also directs users to a related sibling tool (list_company_apps) for finding required parameters, which serves as an implicit prerequisite. It doesn't explicitly state when not to use it, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_store_appInstall Store ApplicationADestructive
Install a ServiceNow store application on the target instance. This is a MUTATIVE, LONG-RUNNING operation that blocks until installation completes or times out (default: 30 minutes).
IMPORTANT:
Installation adds new tables, scripts, and configuration to the instance.
Review the application details (use get_app_details) before installing.
Ensure the instance has sufficient capacity and the right entitlements.
Consider testing on a sub-production instance first.
Use search_store_apps with tab_context 'available_for_you' to find apps available for installation.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | The source app ID of the application to install. Use search_store_apps or get_app_details to find this. | |
| version | Yes | The version to install (e.g., "1.2.3"). Use get_app_details to see available versions. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| load_demo_data | No | Whether to load demo data during installation. | |
| timeout_minutes | No | Maximum time to wait for installation to complete, in minutes. Default 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already indicate destructiveHint and readOnlyHint false, the description significantly expands on the behavioral profile: it explicitly labels the operation as 'MUTATIVE, LONG-RUNNING' and notes it 'blocks until installation completes or times out (default: 30 minutes).' It also discloses that installation adds tables, scripts, and configuration, and warns about capacity/entitlements—all beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, an 'IMPORTANT' section, and a closing guidance line. It is somewhat longer than strictly necessary, but every sentence adds value—covering mutability, timeout, prerequisites, and discovery. The front-loading of key traits (mutative, long-running) is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (mutative, long-running install operation) and absence of an output schema, the description is thorough. It explains what happens, how long it blocks, prerequisites (capacity, entitlements), and how to find installable apps. It does not explicitly describe the return value, but for a blocking operation with no output schema, the behavioral disclosure is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all five parameters, so the baseline is 3. The description adds high-level context (e.g., 'Use get_app_details to see available versions') but does not materially increase per-parameter meaning beyond what the schema already provides. It does reinforce connection to discovery tools, but that is more usage guidance than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Install a ServiceNow store application on the target instance.' It specifies the resource (store application) and target (instance), and distinguishes from siblings like install_from_app_repo (different source) and update_store_app (update vs install).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use search_store_apps with tab_context 'available_for_you' to find apps available for installation.' It also recommends reviewing app details with get_app_details and testing on sub-production, effectively guiding the agent through prerequisites and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsList AttachmentsARead-only
List file attachments on a ServiceNow record. Returns metadata for each attachment including file name, content type, and size.
Use this to discover what files are attached to incidents, changes, catalog items, or any other record.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of attachments to return. Default 50. | |
| table | Yes | The table name the record belongs to (e.g., "incident", "change_request"). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| record_sys_id | Yes | The sys_id of the record to list attachments for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, and the description adds valuable behavioral context by stating it returns metadata for each attachment including file name, content type, and size. It does not contradict annotations. While it lacks details about limit behavior or empty results, the annotation coverage makes this a strong 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core action and followed by a usage context sentence. There is no redundant or unnecessary 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 4-parameter tool with 100% schema coverage and good annotations, the description plus schema provide sufficient information for invocation. It clarifies the purpose and return type. A slight gap is not mentioning behavior for records with no attachments or whether pagination is expected, but overall it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all four parameters (limit, table, instance, record_sys_id) having clear descriptions. The tool description adds no additional parameter semantics beyond what the schema already provides, so baseline 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 uses a specific verb 'List' and resource 'file attachments on a ServiceNow record', and specifies the return type (metadata with file name, content type, size). This clearly distinguishes it from sibling tools like get_attachment_info or upload_attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use this to discover what files are attached to incidents, changes, catalog items, or any other record.' However, it does not mention when not to use it or point to alternatives, so it misses the 'when-not' element for a top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_categoriesList Catalog CategoriesARead-only
List service catalog categories from the sc_category table. Filter by parent category, catalog, active status, or title. Use this to browse the catalog's organizational structure.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (default 20). | |
| query | No | Optional encoded query for additional filtering. | |
| title | No | Filter by exact category title. | |
| active | No | Filter by active status. Omit to return all. | |
| offset | No | Number of records to skip for pagination (default 0). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| parent_sys_id | No | Filter by parent category sys_id to get subcategories. | |
| catalog_sys_id | No | Filter categories by catalog sys_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe read nature is known. The description adds the sc_category table context and filter options, but it does not disclose the return format, pagination defaults, or any side effects beyond what annotations imply. This is reasonable but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action ('List service catalog categories'), and every word earns its place. It avoids fluff and presents the most important usage guidance succinctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with good annotations and a fully documented schema, the description is nearly complete. It conveys the resource, table, filters, and use case. It does not explicitly mention pagination or limits, but those are in the schema, so the description is adequate for tool selection and 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 100%, with all 8 parameters individually described. The description reinforces which parameters are useful for filtering (parent category, catalog, active, title) but does not add syntax or format details beyond the schema. Baseline 3 is appropriate when the schema carries the full parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists service catalog categories from the sc_category table and mentions key filters. It distinguishes the list operation from related single-item tools like get_catalog_category through the plural 'categories' and the phrase 'browse the catalog's organizational structure,' though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('Use this to browse the catalog's organizational structure') and lists likely filter criteria. However, it does not explicitly state when not to use it or mention alternatives such as get_catalog_category for retrieving a single category, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_itemsList Catalog ItemsARead-only
List service catalog items from the sc_cat_item table. Supports text search on item name and description, filtering by category, catalog, and active status.
Use this to browse or search for available catalog offerings before getting item details or submitting a request.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (default 20). | |
| query | No | Optional encoded query for additional filtering. | |
| active | No | Filter by active status. Omit to return all. | |
| offset | No | Number of records to skip for pagination (default 0). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| text_search | No | Search catalog items by name or short description (contains match). | |
| catalog_sys_id | No | Filter items by catalog sys_id (sc_catalogs field). | |
| category_sys_id | No | Filter items by category sys_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and open-world behavior. The description adds the source table and filter capabilities, which is useful context beyond the annotations. It doesn't describe return format, but with annotations the bar is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main verb and resource. The first sentence covers functionality, the second covers usage context. Every word earns its place with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters but no output schema. The description adequately covers purpose and usage context, leaving parameter details to the schema. It could mention pagination or advanced query filtering, but given the schema and annotations, it is sufficiently 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%, so parameters are fully documented in the schema. The description paraphrases filter capabilities (text_search, category, catalog, active) but doesn't add new meaning beyond what the schema provides. Baseline 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?
Description clearly states it lists service catalog items from the sc_cat_item table, and describes supported search and filtering. This distinguishes it from siblings like get_catalog_item and list_catalog_categories, which have different scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to use for browsing/searching before getting item details or submitting a request. This implies exclusions (not for details/requests) but does not name alternative tools explicitly. Strong context but could be more direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_item_variablesList Catalog Item VariablesARead-only
List the variables (form fields) for a specific catalog item. Returns variable names, types, whether they are mandatory, default values, and help text. Includes variables from associated variable sets by default.
Essential for understanding what data to provide when using submit_catalog_request. Variable types include: Single Line Text, Multi Line Text, Select Box, Reference, CheckBox, Date, Yes/No, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| catalog_item_sys_id | Yes | The sys_id of the catalog item to list variables for. | |
| include_variable_sets | No | Whether to include variables from associated variable sets (default true). Set to false to only get directly-assigned variables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint, so the description gains credit for adding the default inclusion of variable sets and the specific return fields. It also notes the ability to disable variable sets via a parameter. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world 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 appropriately sized with two short paragraphs. The first states the action and output, the second provides essential usage context and example variable types. Every sentence earns its place, and the key 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?
For a list operation with no output schema, the description is complete: it details the return fields, explains when to use it (before submit_catalog_request), and describes the default behavior regarding variable sets. No critical information is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter-specific meaning beyond the schema; it mentions variable set inclusion in prose but this is already covered in the include_variable_sets parameter description. The description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-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 variables (form fields) for a specific catalog item, enumerating the return fields (names, types, mandatory, defaults, help text). This distinguishes it from sibling tools like list_catalog_items or get_catalog_item which operate on catalog items themselves, not their variables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states this tool is 'Essential for understanding what data to provide when using submit_catalog_request', giving a clear when-to-use scenario. It does not mention when not to use it or name direct alternatives, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_code_search_groupsList Code Search GroupsARead-only
List available code search groups on a ServiceNow instance. Search groups define which tables and fields are included when performing a code search. Each instance typically has a default search group, and additional groups can be created for specific use cases.
Use the group name as the search_group parameter in code_search. Use the group sys_id when adding tables via add_code_search_table.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of search groups to return. Default is 100. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation. The description adds behavioral context by explaining what search groups are and that each instance typically has a default group. It does not contradict annotations and provides meaningful domain context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear first sentence stating purpose, followed by a short explanatory paragraph, and a final sentence with precise cross-tool usage. Every sentence earns its place with no redundancy or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 tool with no output schema, the description provides sufficient context: what search groups are, default behavior, and how to use the results with related tools. It covers all necessary operational knowledge for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the two parameters (limit and instance), so the schema already fully documents them. The description does not add further parameter-level meaning beyond the schema, but it does contextualize the output fields (name, sys_id) in relation to other tools. Overall, it meets the baseline without adding extra parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists code search groups on a ServiceNow instance, using a specific verb and resource. It distinguishes itself from related sibling tools like code_search and add_code_search_table by explaining how its output is used as inputs to those 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 provides explicit usage guidance: the group `name` should be used as the `search_group` parameter in `code_search`, and `sys_id` when adding tables via `add_code_search_table`. This clearly instructs when and how to use the tool's results, effectively differentiating it from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_code_search_tablesList Code Search TablesARead-only
List the tables associated with a code search group. These are the tables and fields that are searched when performing a code search with that group.
Use this to understand what a search group covers, or to identify if a specific table is missing and needs to be added via add_code_search_table.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| search_group | Yes | The search group NAME (not sys_id) to list tables for. Use `list_code_search_groups` to find available group names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only nature is covered. The description adds transparency by explaining what the returned tables represent: 'These are the tables and fields that are searched when performing a code search with that group.' This goes beyond the annotation by clarifying the output semantics. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured: two paragraphs, each sentence adding value. The first sentence states the primary function, the second clarifies what the results mean, and the third/fourth provide usage guidance. No filler 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?
For a simple read-only list tool, the description is complete. It explains the output (tables and fields), provides use cases, and references sibling tools for related actions (`add_code_search_table` and `list_code_search_groups`). With annotations covering safety and schema fully documenting parameters, no additional context 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 input schema covers 100% of parameters with descriptions, including the note that `search_group` is the NAME (not sys_id) and to use `list_code_search_groups` for available groups. The description itself does not add additional parameter details beyond the schema, so the baseline score of 3 is appropriate when 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 tool's purpose: 'List the tables associated with a code search group.' It uses a specific verb ('List') and resource ('tables') and distinguishes itself from siblings by explaining these are the tables and fields searched during a code search. It also references related actions like `add_code_search_table`, further clarifying its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit use cases: 'Use this to understand what a search group covers, or to identify if a specific table is missing and needs to be added via add_code_search_table.' This tells the agent when to use the tool and introduces an alternative (`add_code_search_table`) for the case when a table is missing. It could more explicitly name non-use situations, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_company_appsList Company ApplicationsARead-only
List company-internal applications shared within your organization. Returns application metadata including name, scope, version, install status, and update availability.
Optionally filter by scope, sys_id, or installed status.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter by application scope (e.g., "x_acme_my_app"). Returns only the matching application. | |
| sys_id | No | Filter by application sys_id. Returns only the matching application. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| installed_only | No | When true, only returns installed applications. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and openWorldHint=true, and the description does not contradict these. The description adds value by describing the returned metadata fields and optional filters, which is useful given the lack of an output schema. However, it does not disclose pagination or rate limit 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 concise, consisting of two sentences that front-load the main purpose and return information. It is appropriately sized with no redundant 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 simple list operation, no output schema, and full schema parameter coverage, the description adequately covers the tool's purpose, return fields, and filters. It could benefit from noting behavior when no filters are applied, but overall it is complete enough 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 coverage is 100% with clear descriptions for all four parameters (scope, sys_id, instance, installed_only). The description only restates the filter options and does not add additional parameter semantics 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 lists company-internal applications and specifies the metadata returned (name, scope, version, install status, update availability). This distinguishes it from siblings like search_store_apps and get_app_details by focusing on internal shared applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 for listing company-internal applications but does not explicitly state when to use it versus alternatives like search_store_apps or list_scoped_apps. No exclusions or alternative recommendations are provided, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_instance_tablesList Instance TablesARead-only
List tables on a ServiceNow instance with optional filtering. Returns table name, label, parent class, scope, and whether the table is extendable.
Unlike lookup_table (which searches by name or label keyword), this tool supports browsing with prefix filters, scope filters, and extendable-only mode. Use this to discover tables in a specific scope or browse tables by naming convention.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tables to return. Default is 50. | |
| query | No | An encoded query string for advanced filtering on sys_db_object. | |
| scope | No | Filter tables belonging to a specific application scope (e.g., "global", "x_myapp_custom"). | |
| offset | No | Offset for pagination (skip this many records). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| name_prefix | No | Filter tables whose name starts with this prefix (e.g., "cmdb_ci", "x_myapp", "incident"). Case-sensitive. | |
| extendable_only | No | When true, only return tables that can be extended. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, setting a low bar. The description adds meaningful behavioral context by listing the returned fields and highlighting the filtering capabilities (prefix, scope, extendable-only), which go beyond the annotations. It does not mention side effects (none expected) or pagination, but the schema covers limit/offset. Overall, it enriches the behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first states purpose and output, the second differentiates from a sibling, the third gives usage direction. It is tightly written with no fluff, and the key information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with the schema (which fully documents all 7 parameters with descriptions) and annotations (readOnly, openWorld), the description provides complete context for an agent to make an informed call. It covers the tool's purpose, return value fields, use cases, and relationship to a sibling tool. No critical information is missing for a read-only listing function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 baseline is 3. The description does not add significant semantic meaning to parameters; it merely rephrases 'name_prefix', 'scope', and 'extendable_only' as 'prefix filters, scope filters, and extendable-only mode' in the usage guidance. This is helpful for context but does not add detail beyond the schema's own 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's purpose: 'List tables on a ServiceNow instance with optional filtering.' It includes the specific resource (tables on an instance) and the return fields (name, label, parent class, scope, extendable). It also distinguishes itself from the sibling 'lookup_table' by contrasting filtering approaches, 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?
Explicit guidance is provided: 'Unlike lookup_table (which searches by name or label keyword), this tool supports browsing with prefix filters, scope filters, and extendable-only mode. Use this to discover tables in a specific scope or browse tables by naming convention.' This tells the agent when to choose this tool over an alternative and gives concrete use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kb_articlesList Knowledge ArticlesARead-only
List knowledge article summaries from the kb_knowledge table. Returns lightweight records without body content for efficiency. Filter by knowledge base, category, workflow state (draft/published/retired), text search on title, or encoded query.
Use get_kb_article to retrieve the full article body content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (default 20). | |
| query | No | Optional encoded query for additional filtering. | |
| offset | No | Number of records to skip for pagination (default 0). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| text_search | No | Search articles by title (short_description contains this text). | |
| workflow_state | No | Filter by workflow state: 'draft', 'published', or 'retired'. | |
| category_sys_id | No | Filter articles by category sys_id. | |
| knowledge_base_sys_id | No | Filter articles by knowledge base sys_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds useful behavioral context by stating that records are lightweight and omit body content, which helps set expectations about the response without contradicting 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 extremely concise: two sentences in the first paragraph cover purpose and filters, and a final sentence directs users to the sibling tool. No word is wasted, and important 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?
Given the tool's moderate complexity (8 parameters, no output schema), the description adequately explains the return scope (summaries without body), filter dimensions, and how to get full content. It lacks explicit mention of pagination behavior, but limit/offset parameters are already documented in the schema. Overall, it is sufficient for an agent to use 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?
With 100% schema description coverage, the schema already documents all 8 parameters. The description reinforces the filter options (knowledge base, category, workflow state, text search, encoded query) but does not add significant meaning beyond the schema, so 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 it lists knowledge article summaries from the kb_knowledge table, using the specific verb 'List' and resource. It distinguishes itself from the sibling get_kb_article by explicitly noting it returns lightweight records without body content, 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?
It provides explicit usage guidance by pointing to get_kb_article when full article body content is needed, effectively stating when not to use this tool. It also enumerates common filter criteria, giving the agent clear context for when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kb_categoriesList Knowledge CategoriesARead-only
List knowledge base categories from the kb_category table. Filter by knowledge base, parent category, active status, or encoded query. Use this to understand a KB's taxonomy before creating or categorizing articles.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (default 20). | |
| query | No | Optional encoded query for additional filtering. | |
| active | No | Filter by active status. Omit to return all. | |
| offset | No | Number of records to skip for pagination (default 0). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| parent_category | No | Filter by parent category sys_id to get subcategories. | |
| knowledge_base_sys_id | No | Filter categories by knowledge base sys_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the table source and filter options, but no additional behavioral context like pagination or return format. It does not contradict 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, front-loaded with the primary action, then a concise list of filters, then a purpose statement. No redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with 100% schema coverage and no output schema, the description covers the main purpose and filters. It does not explain return shape or pagination, but the schema handles parameter details, so this is adequate if not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 schema fully documents all 7 parameters. The description repeats filter names (knowledge base, parent category, active status, encoded query) but adds no new semantic meaning beyond grouping them together.
Input schemas describe structure but not intent. Descriptions should explain non-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 starts with a specific verb+resource: 'List knowledge base categories from the kb_category table.' It clearly differentiates from sibling tools like list_kb_articles (articles) and list_knowledge_bases (bases), and mentions key filters to scope the listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: 'Use this to understand a KB's taxonomy before creating or categorizing articles.' This implies when to use it, though it does not explicitly mention alternatives or exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_knowledge_basesList Knowledge BasesARead-only
List knowledge bases on a ServiceNow instance. Returns knowledge base records from the kb_knowledge_base table with optional filtering by active status and encoded query. Use this to discover available KBs before browsing articles or categories.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (default 20). | |
| query | No | Optional encoded query to filter knowledge bases (e.g., "titleLIKEIT" to find KBs with "IT" in the title). | |
| active | No | Filter by active status. Omit to return all. | |
| offset | No | Number of records to skip for pagination (default 0). | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, so the read-only nature is given. The description adds useful behavioral context by specifying the source table and the optional filtering by active status and encoded query, going beyond what annotations provide without contradicting them.
Agents need to know what a tool does to the world 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 only two sentences: the first states the core functionality and source, the second provides a clear usage context. Every word is purposeful, with no redundancy 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?
Despite lacking an output schema, the description, combined with rich parameter schemas and annotations, fully covers the essential context for a read-only list operation. It explains the data source, optional filters, and a typical use case, making it complete for an agent to select and use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter thoroughly described. The description adds minimal value beyond the schema, merely summarizing that filtering by active and query is possible. This aligns with the baseline of 3 for a schema-rich tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists knowledge bases on a ServiceNow instance, with a specific resource (kb_knowledge_base table) and distinguishes it from sibling tools like list_kb_articles and get_knowledge_base by focusing on the discovery of KBs rather than their contents or individual retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a concrete use case ('Use this to discover available KBs before browsing articles or categories'), implying when it should be used relative to other tools. However, it does not explicitly name alternatives or state when not to use this tool, 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.
list_pluginsList PluginsARead-only
List ServiceNow platform plugins on an instance. Returns plugin ID, name, version, and active status. Use to discover which plugins are installed/active or to find a specific plugin by name prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of plugins to return. Default is 50. | |
| query | No | An encoded query string for advanced filtering on sys_plugins. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| active_only | No | When true (default), only return active plugins. | |
| name_prefix | No | Filter plugins whose name starts with this prefix (e.g., "com.snc", "com.glide"). Case-sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by disclosing the return fields (ID, name, version, active status) and the name-prefix search behavior, which goes beyond the annotation-provided information.
Agents need to know what a tool does to the world 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, front-loaded with the core purpose and return value, followed by a concise usage guideline. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward list tool with good annotations and complete schema coverage, the description is largely sufficient. It explains the return content and primary use cases, though it could optionally mention pagination or the default active-only behavior, but the schema already documents those details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description reiterates the name_prefix concept and active status but does not add significant meaning beyond the schema. It does not compensate for any missing schema detail, but none is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List ServiceNow platform plugins on an instance') and clearly states what is returned (plugin ID, name, version, active status). It addresses the intended use case of discovering installed/active plugins or finding one by name prefix, which distinguishes it from sibling tools that list other entity 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 provides clear usage context by stating when to use the tool: to discover installed/active plugins or find a plugin by name prefix. It does not explicitly mention when not to use it or alternatives, but the context is sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scoped_appsList Scoped ApplicationsARead-only
List scoped applications (sys_app records) on the instance with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of applications to return. Defaults to 50, minimum 1, maximum 200. | |
| query | No | An encoded query string to filter applications. Uses ServiceNow encoded query syntax (e.g., "active=true^scopeSTARTSWITHx_", "nameLIKEhr"). If omitted, all applications are returned. | |
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, establishing the read-only safety profile. The description adds context about sys_app records and optional filtering, but does not disclose return format, pagination, or auth details beyond the schema's instance parameter. Minimal behavioral disclosure beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action ('List') and resource, with no redundant or extraneous content. 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 read-only list operation with a comprehensive schema, the description is mostly complete. The main gap is lack of sibling differentiation and return format details, but given the low complexity and presence of annotations, it is adequately contextual.
Complex tools with many parameters or behaviors need more documentation. Simple 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% with detailed descriptions for limit, query, and instance. The description's mention of 'optional filtering' adds no new semantic value beyond what the schema already provides, so the 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 uses a specific verb 'List' and resource 'scoped applications (sys_app records)', clearly indicating the tool lists scoped app records on the instance. It distinguishes from siblings like list_company_apps by explicitly targeting 'scoped' applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 list_company_apps or get_app_details. The description only states what it does, without context for selection or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tool_packagesList Tool PackagesARead-only
Show which tool package this session is running and what other packages exist. Use this when a capability you expected is missing: the tool may exist on the server but be filtered out of this session, in which case the answer is a different MCP_TOOL_PACKAGE rather than a missing feature.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, covering safety and dynamic results. The description adds useful context about session filtering and package existence, which helps the agent interpret the output. No contradictions or hidden side effects are implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the function and scope, the second adds a valuable usage note. Information is front-loaded and 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 no-parameter, read-only introspection tool, the description fully covers what it does, when to use it, and how to interpret results. Annotations handle safety and open-world aspects, and no return format is needed for a simple list view.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the baseline is 4. The description introduces no parameter details, but none are needed. It focuses on the tool's purpose and usage context, which 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 uses a specific verb ('Show') with a clear resource ('which tool package this session is running and what other packages exist'). It distinguishes this tool from the many sibling data-manipulation tools by focusing on package inventory rather than records or operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: when a capability is missing, suggesting the tool may exist but is filtered out. It clarifies the expected interpretation (a different MCP_TOOL_PACKAGE) and prevents confusion with a missing feature. This is strong actionable guidance.
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-only
List update sets on the instance with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of update sets to return. Defaults to 50, max 500. | |
| query | No | Encoded query for filtering update sets (e.g., "state=in progress"). | |
| fields | No | Comma-separated list of fields to return (e.g., "sys_id,name,state,description"). | |
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, which covers the safety profile. The description adds the notion of optional filtering but does not disclose pagination, ordering, or response format. It does not contradict 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 sentence, front-loaded with the verb and resource, and contains no unnecessary words. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description, schema, and annotations are sufficient. The schema covers all parameters, annotations cover safety, and the description states the operation. The lack of an output schema is acceptable since the return type (list of update sets) is implied.
Complex tools with many parameters or behaviors need more documentation. 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 four parameters have descriptions in the schema, so coverage is 100%. The tool description only references 'optional filtering' which maps to the query parameter, but adds no extra details 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 action ('List'), the resource ('update sets'), and scope ('on the instance'), and mentions optional filtering. This distinguishes it from sibling tools like create_update_set, inspect_update_set, or get_current_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?
The description conveys a clear use case: listing update sets with optional filtering. However, it does not explicitly mention when not to use it or name alternatives, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_appLookup Application or PluginARead-only
Search for ServiceNow applications (scoped apps) and platform plugins by name, scope namespace, or plugin ID. Returns sys_id, name, scope, version, active status, and type for each match.
ServiceNow uses a hierarchical table structure for packages:
sys_scope: All scoped applications (base table)
sys_app: Custom applications in development on this instance
sys_store_app: Applications installed from the ServiceNow Store or company app repo
sys_plugins: Platform plugins
Key use cases:
Find an application's sys_id to pass as the
scopeparameter to execute_script (to run scripts within that application's scope)Check whether a specific app or plugin is installed/active on the instance
Look up version, scope namespace, and vendor info for any application or plugin
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter search scope. "app" searches scoped applications only (sys_scope table which includes both custom apps and store apps), "plugin" searches platform plugins only (sys_plugins table), "all" searches both. Default is "all". | all |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| active_only | No | When true, only returns active/installed applications and plugins. Default is false (returns all matches regardless of active status). | |
| search_term | Yes | Name, scope namespace (e.g., "x_acme_my_app", "sn_vul"), or plugin ID (e.g., "com.snc.vulnerability_response") to search for. Case-insensitive partial matching (contains). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable context by explaining the underlying table hierarchy (sys_scope, sys_app, sys_store_app, sys_plugins) and listing the returned fields (sys_id, name, scope, version, active status, type). This goes beyond the annotations and provides useful behavioral expectations, though it omits details like potential result size limits or error scenarios.
Agents need to know what a tool does to the world 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 moderately sized but well-structured: it opens with the core purpose and return fields, then provides a hierarchy breakdown, followed by key use cases. Every section adds value and the text is not redundant. It could be slightly tighter, but the length is justified given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters and no output schema, the description compensates by listing the return fields and providing use-case context. It covers the main scenarios (retrieving sys_id, checking active status, looking up version/scope). However, it does not mention how results are ordered or paginated, and the absence of an output schema means some additional return-structure details 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?
Schema description coverage is 100%, and each parameter (type, instance, active_only, search_term) is already well-documented in the input schema. The description adds no additional parameter-specific meaning beyond what the schema already provides; it only clarifies the table structure indirectly related to the 'type' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Search for ServiceNow applications (scoped apps) and platform plugins by name, scope namespace, or plugin ID.' It specifies the resource (apps and plugins) and the action (search), and differentiates itself from siblings like get_app_details, list_plugins, and search_store_apps by emphasizing cross-table search across sys_scope and sys_plugins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 concrete use cases, such as finding an app's sys_id for execute_script and checking installation/active status. It establishes context for when to use the tool, but does not explicitly mention alternatives or exclusion conditions. The hierarchy explanation helps users understand what each type filter covers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_columnsLookup Table ColumnsARead-only
List or search columns (fields) on a ServiceNow table. Queries the sys_dictionary table to find column names, types, and metadata for a given table.
Use this tool to:
List all columns on a table to see what fields are available
Validate a column name before using it in a query or script
Find the correct internal element name when you only know the display label
Check column types, whether a field is mandatory, read-only, or a reference
Returns: element name (internal), column label (display), type, max length, reference target, mandatory/read-only/active flags.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of columns to return. Default is 50, max is 200. | |
| table | Yes | The internal table name to look up columns for (e.g., "incident", "cmdb_ci_server", "sys_user"). Use lookup_table first if you are unsure of the exact table name. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| search_term | No | Optional filter to search columns by element name or label. Case-insensitive partial matching (contains). Examples: "assigned", "priority", "sys_created". If omitted, returns all columns on the table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by stating it queries sys_dictionary and enumerates the return fields (element name, label, type, etc.), giving the agent a clear model of the tool's behavior 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 concise and well-structured: a clear opening sentence, a purpose-driven bullet list, and a return-value summary. No redundant or filler content, and the most important 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?
Despite no output schema, the description clearly states what the tool returns (fields list). It also covers typical use cases and points to sys_dictionary, making the tool understandable in context. With thorough parameter descriptions in the schema, the overall description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description's bullets imply parameter usage (e.g., search_term for finding elements) but don't add meaning beyond what the schema already describes for each parameter. Thus no bonus beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair ('List or search columns (fields) on a ServiceNow table') and clarifies the underlying mechanism (queries sys_dictionary). It also lists concrete use cases (validate column, find internal element name) that distinguish it from generic query tools like query_table or lookup_table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'Use this tool to' section provides clear context for when to invoke this tool (e.g., listing columns, validating names, checking types). However, it does not explicitly mention alternative tools or when not to use it, so it falls short of the full 5 criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_tableLookup TableARead-only
Search for ServiceNow tables by name or label. Queries the sys_db_object table to find and validate table names.
Use this tool to:
Verify a table name exists before using it with query_table or in GlideRecord scripts
Discover the correct internal name for a table when you only know the display label
Find related tables (e.g., search "incident" to see incident, incident_alert, etc.)
Check table hierarchy (which table a table extends)
Returns: table name (internal), label (display), parent table, whether it is extendable, number prefix, and application scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 25, max is 100. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| search_term | Yes | Table name or label to search for. Case-insensitive partial matching (contains). Examples: "incident", "cmdb_ci", "Change Request". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is known. The description adds that it queries sys_db_object, returns specific fields (name, label, parent, extendable, number prefix, scope), and that search is case-insensitive partial matching. This enriches the tool's behavior beyond the annotations, though it doesn't discuss pagination limits (covered by schema) or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary line, a bulleted use-case list, and a returns line. It avoids redundancy and uses short, scannable phrases. Every section adds value, making it both concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metadata lookup tool, the description covers purpose, use cases, and return fields. The schema documents all parameters, and annotations declare safety. No output schema exists, so explaining the return fields is valuable and done well. The description is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides comprehensive descriptions for all three parameters, achieving 100% coverage. The description's mention of partial matching and examples aligns with the schema's search_term description but adds no new semantic information. Baseline of 3 is appropriate since schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-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 searches ServiceNow tables by name or label, queries the sys_db_object table, and provides concrete use cases. It distinguishes itself from sibling lookup tools by specifying the target resource (tables) and the underlying system table. This is a specific verb+resource definition with clear 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 'Use this tool to' section provides four explicit scenarios, including verifying table existence before query_table, discovering internal names, finding related tables, and checking hierarchy. While it doesn't explicitly name alternative tools, the scenarios imply when this tool is appropriate. This is clear contextual guidance, though slightly lacking in explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_update_set_recordsMove Update Set RecordsADestructiveIdempotent
Move records from one update set to another. You can move specific records by sys_id, or move all records from a source update set.
IMPORTANT: This modifies update set membership of records on the instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| record_sys_ids | No | Specific sys_ids of sys_update_xml records to move. If omitted and source_update_set is provided, moves all records from the source. | |
| source_update_set | No | The sys_id of the source update set to move all records FROM. Used when record_sys_ids is not specified. | |
| target_update_set_id | Yes | The sys_id of the update set to move records TO. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds valuable context by specifying that the tool 'modifies update set membership of records on the instance', which clarifies exactly what is changed. This goes beyond the annotations and warns the user about the side effect. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, front-loaded with the primary action, followed by a necessary warning. Every sentence earns its place, and there is no redundant or verbose wording. It is well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a moderately complex tool. It explains the operation, both usage modes, and the critical side effect. There is no output schema, so return values are not described, but the annotations and schema cover safety and parameter details. It does not mention edge cases like moving a record already in the target, but this does not significantly impede 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?
The input schema covers all four parameters with detailed descriptions (100% coverage). The description adds a higher-level explanation of the parameter relationships: 'move specific records by sys_id, or move all records from a source update set.' This helps the agent understand when to provide record_sys_ids versus source_update_set, adding value beyond the schema's individual 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's function: 'Move records from one update set to another.' It identifies the specific verb 'move' and the resource 'update set records', and distinguishes between moving specific records by sys_id or all records from a source. This distinguishes it from sibling tools like clone_update_set or create_update_set, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 on how to use the tool, explaining the two modes: moving specific records by sys_id or moving all records from a source update set. It does not explicitly mention alternatives or when not to use it, but the unique action 'move records' makes the use case obvious compared to siblings. The IMPORTANT note adds guidance on the operation's effect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_kb_articlePublish Knowledge ArticleAIdempotent
Publish a draft knowledge article by setting its workflow_state to 'published'. This makes the article visible to end users who have access to the knowledge base.
IMPORTANT: This makes the article publicly visible. Ensure the content has been reviewed before publishing.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the article to publish. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context beyond the annotations: it makes the article publicly visible and warns to ensure review before publishing. The annotations already signal mutation (readOnlyHint=false) and non-destructiveness (destructiveHint=false), but the description enriches with visibility impact.
Agents need to know what a tool does to the world 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, followed by a relevant warning. No redundancy or fluff. The IMPORTANT note 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 two params and no output schema, the description is complete. It explains what happens (visible to end users) and includes a safety warning. It doesn't discuss return values or error cases, but these are not critical for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds semantic meaning by stating the sys_id must be for a 'draft' article. This is a meaningful constraint not explicitly in the schema. The instance parameter is well covered by the schema description already.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Publish a draft knowledge article by setting its workflow_state to published.' This clearly distinguishes it from sibling tools like create_kb_article, update_kb_article, and get_kb_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 context is clear: this tool is for publishing draft articles and making them visible. It doesn't explicitly name alternatives or say when not to use it, but the 'IMPORTANT' note about review before publishing gives practical guidance. This is one step below explicit when/when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_to_app_repoPublish to App RepositoryADestructive
Publish an application to the company's ServiceNow application repository using the CI/CD API. This is a MUTATIVE, LONG-RUNNING operation that blocks until publishing completes or times out (default: 30 minutes).
This makes the application version available for installation on other instances in the company. Use list_company_apps or lookup_app to find the scope and sys_id.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | The scope name of the application to publish (e.g., "x_acme_my_app"). | |
| sys_id | Yes | The sys_id of the application to publish. | |
| version | No | Version number for the published application. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| dev_notes | No | Developer notes for this version. | |
| timeout_minutes | No | Maximum time to wait for publishing to complete, in minutes. Default 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states this is a MUTATIVE, LONG-RUNNING operation that blocks until publishing completes or times out (default: 30 minutes). This adds significant context beyond the annotations (readOnlyHint=false, destructiveHint=true), including blocking behavior and configurable timeout, which is highly valuable for an 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 concise and well-structured, with the core action in the first sentence, followed by critical behavioral warnings, then the benefit, and finally a helpful prerequisite pointer. Every sentence earns its place with no fluff, and it is front-loaded with the most important 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 tool's complexity (long-running, mutative, 6 parameters) and absence of an output schema, the description covers purpose, behavioral implications, blocking/timeout, and prerequisite. It does not mention what the return value or response looks like on success/failure, which would be useful for an agent but does not undermine overall 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?
The input schema already provides 100% coverage for all six parameters, so the baseline is 3. The description goes beyond the schema by advising to use list_company_apps or lookup_app to find the required scope and sys_id, giving practical guidance on how to obtain parameter values. This added value warrants a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool publishes an application to the company's ServiceNow application repository using the CI/CD API, and explains the effect: making the application version available for installation. This specific verb+resource combination distinguishes it from siblings like install_from_app_repo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (publishing an app to the company repo) and gives a concrete prerequisite: use list_company_apps or lookup_app to find scope and sys_id. However, it does not explicitly contrast with alternatives or state when not to use it, slightly missing the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull_scriptPull Script from ServiceNowADestructiveIdempotent
Pull a script (Script Include, Business Rule, UI Script, UI Action, Client Script) from a ServiceNow instance and save it to a local file. The script content is read from the appropriate table and written to the specified file path.
Supported script types:
sys_script_include (Script Include)
sys_script (Business Rule)
sys_ui_script (UI Script)
sys_ui_action (UI Action)
sys_script_client (Client Script)
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| file_path | Yes | Local file path to write the script content to. | |
| script_name | Yes | The name of the script record on the instance (e.g., "MyScriptInclude"). | |
| script_type | Yes | The type of script to pull. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that script content is read from the appropriate table and written to the specified file path, adding mechanistic detail beyond the annotations. It does not mention file overwrite behavior or potential errors, but the annotations already signal destructive and non-read-only behavior, so the description adds reasonable 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 well-structured, beginning with a concise action statement and followed by a clean list of supported script types. Every sentence is informative, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that writes a script to a file, the description covers the core behavior and supported types. It does not describe return values or error cases, but these are less critical given the output is a file. The schema and annotations fill most gaps, making the description sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes every parameter. The description adds a mapping of script type names to table names, which are largely redundant with the enum values. It does not significantly enhance parameter understanding 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 tool's function: pulling a script from ServiceNow and saving it to a local file. It lists the specific script types supported, distinguishing it from the sibling push_script by direction (pull vs. push).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to obtain script content locally) but does not explicitly contrast it with alternatives like push_script or execute_script. No exclusionary or alternative-based guidance is given, leaving usage implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_scriptPush Script to ServiceNowADestructiveIdempotent
Push a local script file to a ServiceNow instance, updating the script field on the matching record. The file is read from the specified path and the record is found by name in the appropriate table.
IMPORTANT: This modifies code on the ServiceNow instance. The record must already exist — this updates an existing script, it does not create new ones.
Supported script types:
sys_script_include (Script Include)
sys_script (Business Rule)
sys_ui_script (UI Script)
sys_ui_action (UI Action)
sys_script_client (Client Script)
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| file_path | Yes | Local file path to read the script content from. | |
| script_name | Yes | The name of the script record to update on the instance. | |
| script_type | Yes | The type of script to push. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description reinforces this with 'IMPORTANT: This modifies code on the ServiceNow instance' and the requirement that the record must exist. This adds meaningful context beyond the annotations by clarifying the operational impact and precondition, even if it doesn't detail all failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and well-organized: a clear opening sentence, an important warning, and a compact list of supported types. Every sentence adds crucial information without redundancy, making it easy for an agent to parse and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema), the description covers key behavioral aspects: it modifies code, requires an existing record, and specifies allowed script types. It omits details like error handling or response format, but these are not essential for selecting and invoking the tool correctly, especially with the sibling pull_script providing complementary 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 input schema covers all four parameters with descriptions, providing a high baseline. The description adds value by enumerating supported script types with friendly names (e.g., 'Script Include', 'Business Rule') and explaining that the record is found by name in the appropriate table, which clarifies script_name and script_type semantics 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 tool's function: 'Push a local script file to a ServiceNow instance, updating the script field on the matching record.' It identifies the specific verb (push), resource (local script file), destination (ServiceNow instance), and action (update script field), and distinguishes itself from the sibling pull_script by focusing on the push/update direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes that the record must already exist and that this tool updates, not creates, which frames when to use it. It also lists supported script types, providing useful selection context. However, it does not mention alternatives or when to prefer a different tool (e.g., execute_script), though the limitation to existing records is a clear exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_delete_recordsQuery Delete RecordsADestructiveIdempotent
Find records matching an encoded query and delete them all. Supports a dry-run mode: set confirm=false (the default) to see how many records would be deleted WITHOUT making changes, then set confirm=true to execute.
IMPORTANT: When confirm=true, this PERMANENTLY DELETES records on the ServiceNow instance. Always run a dry-run first to verify the match count before committing. This operation cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to delete. If omitted, deletes all matches. | |
| query | Yes | An encoded query string to find records to delete. Examples: "active=false^sys_created_on<javascript:gs.daysAgoStart(365)". | |
| table | Yes | The ServiceNow table to delete records from (e.g., "incident", "sys_user"). | |
| confirm | No | When false (default), performs a dry-run that returns the match count without deleting anything. Set to true to actually execute the deletes. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds critical behavioral details: the dry-run mechanism, permanence of deletion, and the 'cannot be undone' warning. This significantly enhances an agent's understanding of the tool's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core action, and each sentence serves a purpose. The prominent safety warning is essential and effectively communicates the destructive nature without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 destructive nature and absence of an output schema, the description covers all essential aspects: the operation, dry-run workflow, and irreversible consequences. It provides sufficient guidance for an agent to invoke the tool safely and 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 100%, with detailed descriptions for all five parameters including the confirm semantics. The description reinforces the confirm behavior but does not add substantial new meaning beyond the schema's already thorough parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find records matching an encoded query and delete them all.' This uses a specific verb and resource, highlighting the scoped deletion, and distinguishes it from sibling query/update 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?
Provides clear context for safe use, emphasizing the dry-run mode and instructing to 'Always run a dry-run first to verify the match count before committing.' However, it does not explicitly mention alternatives or exclusions, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_syslogQuery SyslogARead-only
Query the ServiceNow system log (syslog) to check for errors, warnings, and debug output. Returns log entries with timestamps, levels, sources, and messages. Results are ordered newest-first.
Useful for monitoring script execution results, checking for errors after deployments, and debugging issues. Can be called repeatedly to check for new entries. Use the 'syslog' table for system-level logs and 'syslog_app_scope' for scoped application logs.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter by log level. Only returns entries at the specified level. | |
| limit | No | Maximum number of syslog entries to return. Default is 50. | |
| query | No | A ServiceNow encoded query string for additional filtering. Example: "messageLIKEscript error^source=sys_script". This is combined with any level/source filters specified below. | |
| table | No | Which syslog table to query. Use "syslog" for the main system log, or "syslog_app_scope" for scoped application logs which include the application scope field. | syslog |
| source | No | Filter by log source (e.g., "sys_script", "workflow"). Exact match. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint and openWorldHint annotations, the description adds valuable behavioral details: newest-first ordering, callable repeatedly for new entries, and return content. It does not mention rate limits or auth, but the read-only nature is already annotated, making this a solid 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six sentences, front-loaded with the core purpose, then practical use cases and table selection. Every sentence adds value with no redundancy 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 read-only log query tool, the description covers purpose, usage, result structure, ordering, and table distinctions. With schema covering all parameters and annotations declaring safety, there are no critical gaps, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage with clear descriptions, enums, defaults, and an example. The description adds little beyond the schema (only the table selection guidance is partially redundant). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries the ServiceNow system log (syslog) to check errors, warnings, and debug output, listing returned fields and ordering. It is specific and distinct from generic query tools, fulfilling the 'verb+resource' criterion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete use cases (monitoring script execution, post-deployment checks, debugging), explains that it can be polled, and distinguishes between the syslog and syslog_app_scope tables. It does not explicitly name alternatives or when-not-to-use, so it misses the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_tableQuery ServiceNow TableARead-only
Query any ServiceNow table using the Table API. Returns records matching the specified criteria. Supports encoded query strings, field selection, and display value resolution.
Use this for general-purpose data retrieval from any table (incident, sys_user, cmdb_ci, change_request, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return. Default is 20, max is 1000. | |
| query | No | A ServiceNow encoded query string to filter records. Examples: "active=true^priority=1", "short_descriptionLIKEnetwork^state!=7", "sys_created_on>javascript:gs.daysAgoStart(7)". If omitted, returns all records up to the limit. | |
| table | Yes | The ServiceNow table name to query (e.g., "incident", "sys_user", "cmdb_ci_server"). This is the internal table name, not the label. | |
| fields | No | Comma-separated list of field names to return (e.g., "sys_id,number,short_description,state"). If omitted, all fields are returned. Specifying fields improves performance and readability. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| display_value | No | When true, returns display values instead of internal values for reference and choice fields. For example, assignment_group returns the group name instead of the sys_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already indicating read-only and open-world behavior, the description adds valuable context by mentioning support for encoded query strings, field selection, and display value resolution. It does not contradict the annotations and gives a sense of the tool's capabilities beyond the structured metadata.
Agents need to know what a tool does to the world 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 well-structured, with a clear opening sentence stating purpose, followed by a brief capability summary and a usage note. Every sentence earns its place with 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 moderate complexity (6 parameters, no output schema), the description covers the main purpose, general applicability, and key features. It does not describe the return format or pagination details, but the schema and openWorldHint annotation reduce the burden on the description to cover those 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?
The input schema already has 100% coverage with detailed descriptions for all parameters, so the baseline is 3. The description mentions key features (encoded queries, field selection, display values) but does not add new parameter-level semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries any ServiceNow table via the Table API, using a specific verb and resource. It also distinguishes itself as general-purpose data retrieval, which separates it from sibling tools that target specific tables or operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by stating 'Use this for general-purpose data retrieval from any table,' which tells the agent when to choose this tool. However, it does not explicitly mention when not to use it or compare it with alternative sibling tools like lookup_table or query_syslog.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_update_recordsQuery Update RecordsADestructiveIdempotent
Find records matching an encoded query and update them all with the specified data. Supports a dry-run mode: set confirm=false (the default) to see how many records would be affected WITHOUT making changes, then set confirm=true to execute.
IMPORTANT: When confirm=true, this modifies records on the ServiceNow instance. Always run a dry-run first to verify the match count before committing.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Field values to set on all matching records (e.g., {"priority": "3", "state": "2"}). | |
| limit | No | Maximum number of records to update. If omitted, updates all matches. | |
| query | Yes | An encoded query string to find records to update. Examples: "active=true^priority=5", "state=1^assignment_group=NULL". | |
| table | Yes | The ServiceNow table to update records on (e.g., "incident", "sys_user"). | |
| confirm | No | When false (default), performs a dry-run that returns the match count without making changes. Set to true to actually execute the updates. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds critical behavioral context: the dry-run mode, confirm=false default behavior, and the warning that confirm=true modifies records. This goes beyond structured annotations by disclosing the safety mechanism and the irreversible nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs, no wasted words. The main action is stated first, followed by the critical safety information. The important warning is bolded for emphasis, making it effective and 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?
For a destructive tool with no output schema, the description covers the essential workflow: dry-run first, then execute. It hints at the return value (match count) and warns about modifications. It omits details like limit behavior or instance fallback, but those are fully documented in the schema, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the confirm parameter's role in dry-run vs. execution, which is not fully captured by the schema's field description. It also clarifies the 'update them all' semantics for limit, though not in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Find records matching an encoded query and update them all with the specified data,' which clearly states the verb (update), resource (records matching a query), and scope (all matches). It also distinguishes itself from siblings like query_table (read-only) and query_delete_records (delete) by focusing on updating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit guidance on when to use the tool: 'Always run a dry-run first' and explains the confirm flag's role in controlling execution. It does not explicitly name alternatives or exclusions, but the dry-run-first instruction strongly implies the safe usage pattern for this mutation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_incidentResolve IncidentAIdempotent
Resolve an incident by setting state to Resolved (6) with resolution notes. IMPORTANT: This changes the incident state. The incident must typically be in an active state (New, In Progress, On Hold) for this to succeed.
| Name | Required | Description | Default |
|---|---|---|---|
| sys_id | Yes | The sys_id of the incident to resolve. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| close_code | No | The close code for the resolution (e.g., "Solved (Permanently)", "Solved (Work Around)", "Not Solved (Not Reproducible)"). | |
| resolution_notes | Yes | Notes describing how the incident was resolved. These become the close_notes on the record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive, and the description adds the critical behavioral detail that state changes to Resolved. The precondition about active states is useful context beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly crafted sentences that front-load the purpose, followed by an important behavioral note. No redundant or filler content; every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: what it does, the key state change, and a crucial precondition. Given the tool's simplicity and the absence of an output schema, it is sufficiently complete for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are documented in the schema. The description adds minimal extra meaning—it mentions resolution notes but does not enhance understanding of sys_id, instance, or close_code 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 uses a specific verb ('Resolve') with a clear resource ('incident') and includes the exact state change ('setting state to Resolved (6) with resolution notes'). This distinguishes it from siblings like close_incident and provides precise 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?
Provides clear context by stating the incident must be in an active state (New, In Progress, On Hold) for success. However, it does not explicitly mention alternatives or exclusions, such as when to use close_incident instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_atf_testRun ATF TestADestructive
Execute a single ServiceNow ATF (Automated Test Framework) test by its sys_id. The test runs on the instance, and this tool waits for it to complete before returning the result. Returns the test name, status (success/failure), run time, and any output produced by the test.
Use this tool when the user wants to run a specific ATF test and see its results.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to run the test on. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| test_sys_id | Yes | The sys_id of the ATF test to execute. This is the unique identifier for the test record in the sys_atf_test table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by stating that the test 'runs on the instance' and that the tool 'waits for it to complete before returning the result,' plus it lists return fields. Annotations already convey destructive/read-only hints, so this extra disclosure is valued. It doesn't warn about side effects, but the destructiveHint already covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences cover the purpose, execution behavior, and return values, followed by a one-sentence usage guideline. Every sentence contributes new information with no fluff 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?
The description fully covers the tool's purpose, execution behavior, return values, and usage context. With no output schema, the description adequately specifies what the agent can expect, and the sibling context clarifies the difference from suite execution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. 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 instance and test_sys_id fully described. The description adds no new parameter-level meaning beyond what the schema provides, so it meets the baseline for high 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 'Execute a single ServiceNow ATF test by its sys_id', which is a specific verb and resource. It distinguishes from sibling tools like run_atf_test_suite (single vs suite) and find_atf_tests (finding vs executing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 final sentence explicitly says 'Use this tool when the user wants to run a specific ATF test and see its results,' providing clear usage context. It does not mention exclusions or alternatives, but the sibling name run_atf_test_suite implies when to use the suite variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_atf_test_suiteRun ATF Test SuiteADestructive
Execute a ServiceNow ATF test suite and wait for all tests to complete. Identify the suite by either its name or sys_id (provide exactly one). Returns a summary with pass/fail/skip/error counts and overall status.
Use this tool when the user wants to run a collection of ATF tests as a suite.
| Name | Required | Description | Default |
|---|---|---|---|
| os_name | No | Operating system for UI tests (e.g., "Windows", "Mac"). | |
| instance | No | The ServiceNow instance auth alias to run the suite on. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| os_version | No | OS version for UI tests. | |
| suite_name | No | The name of the test suite to execute. Provide either suite_name or suite_sys_id, but not both. | |
| browser_name | No | Browser to use for UI tests (e.g., "Chrome", "Firefox"). | |
| run_in_cloud | No | Whether to run tests in the cloud runner. | |
| suite_sys_id | No | The sys_id of the test suite to execute. Provide either suite_name or suite_sys_id, but not both. | |
| browser_version | No | Browser version for UI tests. | |
| is_performance_run | No | Whether to run as a performance test. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by noting that the tool will 'wait for all tests to complete,' indicating a blocking operation. It also specifies that it 'Returns a summary with pass/fail/skip/error counts,' which is not part of the annotations. Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate those, but it adds useful execution details.
Agents need to know what a tool does to the world 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 long with no fluff. The first sentence front-loads the core purpose and behavior, and the second sentence gives usage guidance. Every clause adds value, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters and no output schema, but the description adequately covers the high-level behavior and return value. It states the tool waits for completion and returns a summary with counts and status, which is sufficient for an agent to understand the outcome. It does not explain potential side effects or error conditions, but the annotations and schema provide enough detail for a moderately complex 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 100%, so the baseline is 3. The description repeats the 'provide exactly one' constraint for suite_name vs suite_sys_id, which is already stated in the schema property descriptions. It does not add new parameter semantics beyond what the schema provides, so no higher score 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 tool's function: 'Execute a ServiceNow ATF test suite and wait for all tests to complete.' It uses a specific verb ('Execute') and a specific resource ('Suite'), and differentiates from the sibling 'run_atf_test' by emphasizing the suite context. The mention of returning a summary with pass/fail/skip/error counts further clarifies the tool's output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 includes an explicit usage statement: 'Use this tool when the user wants to run a collection of ATF tests as a suite.' This provides clear context for when to choose this tool. It does not explicitly name alternative tools or state when not to use it, but the phrase 'as a suite' implies distinction from running a single test, which is present in the sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_store_appsSearch Store ApplicationsARead-only
Search or browse ServiceNow store applications by category.
Tab contexts:
"installed" — list all installed store applications
"updates" — list installed apps that have updates available
"available_for_you" — browse apps available for installation
Use this to discover what is installed, find available updates, or browse for new applications to install.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default 50. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| search_key | No | Optional keyword to filter results by name. | |
| tab_context | Yes | Category to list: "installed" for installed apps, "updates" for apps with available updates, "available_for_you" for apps available to install. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds behavioral value by explaining the three tab_context modes and that the tool lists/browses rather than mutates. It does not detail result structure or API specifics, but the added tab contexts go beyond the annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose statement, a three-item bullet list for tab contexts, and a one-sentence usage line. It is front-loaded with the key action and contains no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the fully documented schema, read-only annotations, and a description covering purpose, tab contexts, and use cases provide sufficient guidance. It does not explain return formats or differentiate from sibling tools like get_app_details, but the absence of an output schema and the straightforward nature of the browse operation keep the gap small.
Complex tools with many parameters or behaviors need more documentation. 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 100% description coverage for all parameters, including the enum values for tab_context. The description repeats the tab_context semantics (e.g., 'installed' → list all installed store applications) but adds little 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 opens with 'Search or browse ServiceNow store applications by category,' clearly specifying the action (search/browse), resource (store applications), and scope (category). It then enumerates three tab contexts, distinguishing this tool from siblings like get_app_details (fetches a single app) and install_store_app (installs an app).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit use cases: 'Use this to discover what is installed, find available updates, or browse for new applications to install.' This gives clear context on when to invoke the tool, but it does not name alternative tools or exclusions (e.g., 'use get_app_details for a specific app'), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_current_scopeSet Current Application ScopeAIdempotent
Change the active application scope. Validates the app exists, records previous scope, verifies the change. IMPORTANT: This changes the session's application context.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| app_sys_id | Yes | The sys_id of the application to set as the current scope. Must be a 32-character hexadecimal string (e.g., "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6") or "global" for the Global scope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it validates the app exists, records previous scope, verifies the change, and warns that it changes the session's application context. This provides insight into side effects and safety, which is valuable since the tool is a write operation (readOnlyHint=false). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: three sentences that state the primary action, key validation steps, and an important warning. Every sentence earns its place, with no redundant or filler 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 low complexity (2 params, no output schema) and the presence of annotations, the description covers the essential aspects: what it does, key behaviors (validation, recording, verification), and the session context side effect. It does not describe the return value or error handling, but 'verifies the change' implies feedback, and the annotations cover safety. This is complete enough for an agent to use correctly in most 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?
The schema description coverage is 100%, fully documenting the 'instance' and 'app_sys_id' parameters. The tool description does not add additional meaning beyond the schema, which is acceptable given the schema already provides comprehensive parameter semantics. 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 tool's purpose: 'Change the active application scope.' It uses a specific verb and resource, and adds detail about validation, previous scope recording, and verification. However, it does not explicitly distinguish itself from sibling tools like get_current_scope or list_scoped_apps, though its unique purpose is evident from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating the action ('Change the active application scope') and warns about the session context change, but it does not provide explicit when-to-use guidance or mention alternatives. The context is clear enough to infer when this tool should be used, but there is no direct comparison to other scope-related 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 the active update set for the session. All changes will be captured in this update set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the update set to set as current. | |
| sys_id | Yes | The sys_id of the update set to set as current. | |
| instance | No | The ServiceNow instance auth alias to connect to. This is the alias configured via `snc configure` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false). The description adds the key behavioral detail that all subsequent changes will be captured in the set, which is critical context beyond what annotations provide. It does not cover permissions or external side effects, but for a session-scoped tool this is adequate.
Agents need to know what a tool does to the world 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, front-loaded with the core verb and resource, and every word adds value. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with fully documented parameters and no output schema, the description, annotations, and schema together provide sufficient context. The behavior is straightforward and scoped to the session, so no additional information 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?
Schema coverage is 100% and all three parameters have descriptive text. The tool description adds no additional meaning beyond the schema, 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 uses a specific verb 'set' with a clear resource 'active update set' and a consequence ('All changes will be captured in this update set'), which distinguishes it from siblings like get_current_update_set and create_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?
The description implies when to use the tool (before making changes so they are captured in the update set), but it does not explicitly mention alternatives or exclusions. The context is clear enough for an agent to infer the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_catalog_requestSubmit Catalog RequestA
Submit a service catalog request using the ServiceNow order_now API. Returns the request (REQ) and request item (RITM) numbers.
IMPORTANT: This creates a real service request on the instance. Use list_catalog_item_variables first to understand what variables are required. Variable values should be passed as a key-value object where keys are the variable names and values are strings. For reference-type variables, pass the sys_id of the referenced record.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| quantity | No | Number of items to request (default 1). | |
| variables | No | Variable values for the catalog item form as key-value pairs. Keys are variable names, values are strings. For reference fields, use the sys_id of the referenced record. | |
| catalog_item_sys_id | Yes | The sys_id of the catalog item to order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description supplements the annotations (readOnlyHint=false) with an explicit warning that this 'creates a real service request on the instance.' This adds important context beyond the machine-readable metadata. It also explains the return value, but does not discuss failure modes, permissions, or rate limits, which would have been even more 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 concise (three sentences) and well-structured. The first sentence states purpose and returns, the second provides a critical warning, and the third offers practical variable-passing guidance. Every sentence contributes valuable information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description provides sufficient context: purpose, return values, a side-effect warning, and a prerequisite suggestion. It effectively covers the essential information an agent needs to use the tool correctly, including how to handle variables and reference fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all four parameters with detailed descriptions (100% coverage). The description adds minimal new semantic information—reiterating that variables should be a key-value object and reference fields use sys_ids. This reinforces the schema but does not significantly enhance parameter understanding beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Submit a service catalog request using the ServiceNow order_now API.' It also specifies the outputs (REQ and RITM numbers), distinguishing it from sibling catalog tools like list_catalog_items or get_catalog_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance by instructing users to 'Use list_catalog_item_variables first' to understand required variables. It also warns that the tool 'creates a real service request,' implying cautious use. However, it does not explicitly mention when not to use this tool or describe an alternative for the same action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_flowTest Flow (Flow Designer)ADestructive
Test a ServiceNow Flow Designer flow without requiring it to be published. This is the PRIMARY tool to use when building and iterating on a flow — it invokes the same API as the 'Test' button in Flow Designer, running the flow in its current saved (draft) state.
Unlike execute_flow (which requires a published flow and uses sn_fd.FlowAPI), test_flow works on unpublished drafts via the ProcessFlow REST API (POST /api/now/processflow/flow/{id}/test).
Provide the flow's sys_id or scoped name in flow_id, and supply trigger output variable values in output_map. For record-triggered flows this is typically { "current": "", "table_name": "" }. Check the flow's trigger configuration in Flow Designer to determine the correct variable names.
The tool returns a context ID on success — use get_flow_context_status to poll the execution, then get_flow_outputs or get_flow_error once complete.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope sys_id for the transaction scope query parameter. If omitted, the scope is auto-resolved from the flow definition. | |
| flow_id | Yes | Flow sys_id (32-char hex) or scoped name (e.g., "x_myapp.my_flow"). The flow does not need to be published. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| output_map | Yes | Maps trigger output variable names to concrete test values. Keys are the variable names defined in the flow's trigger configuration in Flow Designer. For record-triggered flows: { "current": "<record_sys_id>", "table_name": "<table>" }. Open the flow in Flow Designer and inspect the trigger to see the available variable names. | |
| run_on_thread | No | Whether to run the test synchronously on the current thread. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the annotations: it runs the flow in its current saved (draft) state and uses the ProcessFlow REST API endpoint. It also notes that a context ID is returned for polling. While the destructiveHint annotation warns of possible side effects, the description doesn't explicitly elaborate on potential data modifications, but the draft-state emphasis and API detail add meaningful 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 bit long but every sentence contributes: it states the core function, primary use case, comparison with execute_flow, API details, parameter guidance, and next steps. The logical flow is clear, and no filler is present. It could be slightly tightened, but it is well-structured and front-loaded with the most important 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 tool's complexity (testing flows), the description covers all essential aspects: what it does, when to use it, how to invoke it with parameter examples, what it returns (context ID), and what to do next. There is no output schema, but the description explicitly guides follow-up polling and retrieval, making it complete for an agent to use 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?
Although the schema descriptions cover 100% of parameters, the tool description adds extra meaning by explaining output_map with a concrete example for record-triggered flows and detailing flow_id formats. It also hints at the scope auto-resolution behavior, which supplements the schema's brief description. This goes beyond simply restating parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Test a ServiceNow Flow Designer flow without requiring it to be published.' It uses a specific verb ('test'), names the resource ('Flow Designer flow'), and distinguishes itself from execute_flow by noting it works on unpublished drafts. This is a strong, specific statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly positions test_flow as 'the PRIMARY tool to use when building and iterating on a flow' and contrasts it with execute_flow, which requires a published flow. It also recommends follow-up tools (get_flow_context_status, get_flow_outputs, get_flow_error) and provides example input for record-triggered flows, giving clear when-to-use and how-to-proceed guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
traverse_cmdb_graphTraverse CMDB GraphARead-only
Traverse the CMDB relationship graph starting from a Configuration Item using breadth-first search. Returns all nodes (CIs) and edges (relationships) discovered up to the specified depth.
Use this for deep impact analysis, service mapping, and understanding the full dependency chain of a CI. Max depth is 5, max nodes is 1000.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| ci_sys_id | Yes | The sys_id of the root Configuration Item to start traversal from. | |
| direction | No | Traversal direction: "upstream", "downstream", or "both". Default is "both". | both |
| max_depth | No | Maximum traversal depth (1-5). Higher depth discovers more of the graph but makes more API calls. Default is 2. | |
| max_nodes | No | Maximum number of nodes to visit. Traversal stops when this limit is reached. Default is 200, max is 1000. | |
| relation_type | No | Filter traversal to only follow this relationship type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and openWorld, so the bar for additional disclosure is lower. The description adds meaningful behavioral details: the BFS algorithm, returns nodes and edges up to a specified depth, and enforces limits (max depth 5, max nodes 1000). This provides context beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded: the first sentence states the core function and algorithm, the second sentence gives use cases and key limits. Every sentence contributes value, and there is no redundant or filler 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 moderate complexity (6 params, no output schema) and strong schema coverage, the description provides sufficient context: it describes the traversal approach, return content (nodes and edges), and constraints. It does not detail the exact response structure, but since no output schema exists, this is a minor omission rather than a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter, including defaults and limits. The description repeats some limits (e.g., max depth 5, max nodes 1000) but does not add additional semantic value beyond what the schema already provides. It neither harms nor significantly enhances parameter understanding, so baseline 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 tool traverses the CMDB relationship graph using breadth-first search, specifying the resource (CMDB graph) and the action (traverse). It also distinguishes this from sibling get_cmdb_relationships by emphasizing depth-based traversal, making its unique function clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names use cases (deep impact analysis, service mapping, understanding dependency chains), which provides clear context for when to use this tool. However, it does not mention alternatives or exclusion criteria, such as when to prefer the simpler get_cmdb_relationships for direct relationships.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_kb_articleUpdate Knowledge ArticleADestructiveIdempotent
Update an existing knowledge article's fields. Only the fields provided will be modified; all others remain unchanged.
IMPORTANT: This modifies the article on the instance.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Updated body content in HTML format. | |
| wiki | No | Updated body content in wiki markup format. | |
| active | No | Set the article's active flag. | |
| sys_id | Yes | The sys_id of the article to update. | |
| instance | No | The ServiceNow instance auth alias to use. This is the alias configured via `now-sdk auth --add` (e.g., "myinstance", "prod", "test"). The user will typically refer to this by name when saying things like "on my myinstance instance". If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| article_type | No | Change the article type. | |
| workflow_state | No | Change the workflow state ('draft', 'published', 'retired'). | |
| category_sys_id | No | Change the article's category. | |
| additional_fields | No | Optional additional fields to update as key-value pairs. | |
| short_description | No | Updated article title. | |
| knowledge_base_sys_id | No | Move the article to a different knowledge base. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructive (destructiveHint: true) and non-read-only (readOnlyHint: false). The description adds valuable context beyond annotations: partial update semantics ('Only the fields provided will be modified; all others remain unchanged') and a warning that it modifies the instance. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose. The second sentence is a clearly labeled IMPORTANT warning. No redundant or filler 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 high schema coverage, clear annotations, and absence of output schema, the description is sufficient for a mutation tool. It explains the key behavioral nuance (partial update) and the mutating nature. It could mention what happens on success/failure, but the schema and annotations cover the main context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all parameters. The description adds important semantic context that omitted parameters remain unchanged, which gives meaning to the optional parameters as a group. This goes beyond what the schema states individually.
Input schemas describe structure but not intent. Descriptions should explain non-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 knowledge article's fields with a specific verb ('Update') and resource ('existing knowledge article'). It also distinguishes from siblings like create_kb_article (creation) and get_kb_article (reading).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 updating existing articles by saying 'existing knowledge article's fields', but it does not explicitly state when to use this tool over alternatives (e.g., create for new articles, publish for workflow changes). The partial-update behavior is clear, but there is no direct 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_store_appUpdate Store ApplicationADestructive
Update an installed ServiceNow store application to a newer version. This is a MUTATIVE, LONG-RUNNING operation that blocks until the update completes or times out (default: 30 minutes).
IMPORTANT:
Updates may alter existing behavior, modify tables, and affect customizations.
Customizations to the application may be overwritten during the update.
Consider testing on a sub-production instance first.
Use search_store_apps with tab_context 'updates' to find apps with available updates.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | The source app ID of the application to update. Use search_store_apps with tab_context 'updates' to find this. | |
| version | Yes | The version to update to (e.g., "2.0.0"). Use get_app_details to see the latest available version. | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| load_demo_data | No | Whether to load demo data during the update. | |
| timeout_minutes | No | Maximum time to wait for the update to complete, in minutes. Default 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it warns that the operation is MUTATIVE, LONG-RUNNING, blocks until completion or timeout (default 30 minutes), and may alter behavior, modify tables, affect customizations, and overwrite customizations. This goes well beyond the destructiveHint annotation and provides critical risk information.
Agents need to know what a tool does to the world 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 well-structured, with a brief opening, a bulleted list of warnings, and a practical usage tip. Every sentence earns its place, and the formatting improves readability without unnecessary 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?
The description thoroughly covers the mutation risks, blocking behavior, timeout, and discovery method. It does not describe the return value format, and since there is no output schema, this is a minor gap. However, for a mutative tool, the focus on side effects and safety is more important, and the description handles that comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema already documents all parameters. The description adds extra meaning by telling users to use search_store_apps to find the app_id and get_app_details for version, enriching the schema descriptions with practical sourcing guidance. Timeout default is also mentioned.
Input schemas describe structure but not intent. Descriptions should explain non-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 installed ServiceNow store application to a newer version, using a specific verb and resource. It distinguishes from siblings like install_store_app (installing new apps) and search_store_apps (searching for updates), 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 explicitly instructs to use search_store_apps with tab_context 'updates' to find apps with available updates, and advises testing on a sub-production instance first. It provides clear context for when to use this tool, though it does not explicitly state when not to use it or name alternative tools beyond search_store_apps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_attachmentUpload AttachmentA
Upload a file attachment to a ServiceNow record. The file content must be provided as a base64-encoded string.
IMPORTANT: This creates an attachment on the ServiceNow instance.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table name the record belongs to (e.g., "incident", "change_request"). | |
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| file_name | Yes | The file name including extension (e.g., "report.pdf", "data.csv"). | |
| content_type | Yes | The MIME content type (e.g., "application/pdf", "text/csv", "image/png", "application/json"). | |
| record_sys_id | Yes | The sys_id of the record to attach the file to. | |
| content_base64 | Yes | The file content encoded as a base64 string. For text files, encode the text content to base64 before passing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, and the description adds a explicit warning that the tool creates an attachment, which reinforces the mutating nature. It does not disclose additional behavioral traits like return values or permission requirements, but the core side effect is covered. This is adequate but not rich beyond annotation 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 compact, with the purpose stated in the first sentence and the critical constraint and side effect highlighted in the following sentences. Each sentence adds value without redundancy or unnecessary length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a straightforward purpose and no output schema, so the description covers the essential action and the critical base64 encoding requirement. It does not mention potential errors, size limits, or success responses, but these are not needed for basic usage. The instance fallback is documented in the schema, so there is no significant 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?
All six parameters are fully described in the input schema with detailed descriptions and examples. The description adds no new parameter information beyond restating the base64 encoding requirement, which is already present in the schema. With 100% schema coverage, the schema carries the full burden and the description adds minimal extra 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 uses the specific verb 'Upload' and clearly identifies the target resource as a ServiceNow record, making the operation unambiguous. It naturally distinguishes from sibling tools like get_attachment_info and list_attachments by framing this as a creation action. The base64 requirement is an additional clarifying detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 this tool is for attaching files to records, which is distinct from reading or listing attachments. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full guidance. The context is clear and there are no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_app_installValidate Application InstallationARead-only
Validate whether a set of applications are installed at the expected versions. Reports which apps are valid, need installation, need upgrade, or have version mismatches.
Useful for verifying environment readiness or checking deployment prerequisites.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| packages | Yes | List of applications to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the baseline for transparency is lower. The description adds value by disclosing the reporting behavior: it categorizes apps as valid, needing installation, needing upgrade, or having version mismatches. There is no contradiction with annotations, and nothing suggests side effects. It could elaborate on error handling or auth requirements, but for a read-only validation tool with good annotations, this is solid.
Agents need to know what a tool does to the world 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 long, front-loads the core action in the first sentence, and every clause adds relevant information. There is no fluff, repetition, or extraneous detail. It efficiently conveys what the tool does, what it reports, and when to use it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description does a good job of conveying the result categories: valid, need installation, need upgrade, version mismatch. For a validation tool with only two parameters (one required) and full schema documentation, this is sufficient context for an agent to select and invoke it. It does not describe the exact response format, but that is not necessary given the descriptive reporting behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage of both parameters ('instance' and 'packages') with descriptive details, so the description does not need to repeat them. The description's mention of 'expected versions' loosely mirrors the 'requested_version' field but adds no new semantic information beyond what the schema already states. This meets the baseline for fully documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-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 starts with a specific verb 'Validate' and a clear resource: 'whether a set of applications are installed at the expected versions.' It sharply distinguishes from sibling install tools (e.g., install_from_app_repo) and lookup tools (e.g., get_app_details) by framing it as a read-only verification step. The added detail about reporting validity, installation needs, upgrades, and mismatches makes the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for verifying environment readiness or checking deployment prerequisites' gives concrete context on when to use the tool. It does not explicitly mention when not to use it or name alternative tools, but the purpose is clear enough that an agent could infer that installation/comparison tools would be used for actual changes. This is clear contextual guidance without formal exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_catalogValidate Catalog ConfigurationARead-only
Validate a catalog item's configuration on a ServiceNow instance. Checks variables for duplicates, missing names, inactive mandatory variables, and UI policy issues.
Returns a valid/invalid flag, error and warning counts, and each issue with its severity, component, sys_id, description, and suggested fix.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | The ServiceNow instance auth alias (e.g., "myinstance", "prod"). If not provided, falls back to the SN_AUTH_ALIAS environment variable. | |
| catalog_item_sys_id | Yes | The sys_id of the catalog item to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, so the safety profile is known. The description adds valuable transparency by detailing the validation checks performed and the return payload structure (valid/invalid flag, counts, issues with severity, component, sys_id, description, suggested fix). This exceeds what annotations reveal, though it stops short of describing edge-case behavior like missing sys_id handling.
Agents need to know what a tool does to the world 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 core purpose, followed by specific checks and return details. Two short paragraphs without redundancy or filler—every sentence contributes essential 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 moderate complexity, the description adequately explains what the tool does, what it validates, and what it returns. Since there is no output schema, the return structure is described in useful detail. Missing behavior on nonexistent items or permission requirements is not disclosed, but the description is sufficiently complete for a read-only validation 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 covers both parameters fully with descriptions (instance auth alias, catalog_item_sys_id). The description does not add further parameter-level meaning beyond restating that it validates a catalog item, so baseline 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 tool validates a catalog item's configuration on ServiceNow, enumerating specific checks (duplicate variables, missing names, inactive mandatory variables, UI policy issues). This specific verb-resource combination distinguishes it from siblings like validate_app_install or get_catalog_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by stating what the tool does and what it checks, but it does not explicitly specify when to use it over alternatives or provide exclusions. No mention of when not to use this tool or why pick it over validate_app_install for configuration validation.
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. Dates show when Glama detected each change.
1 tool update
v4.5.0- Added
list_tool_packages
86 tool updates
v2.5.1- First observed
add_code_search_table - First observed
add_task_comment - First observed
aggregate_grouped - First observed
aggregate_query - First observed
approve_change - First observed
assign_task - First observed
batch_create_records - First observed
batch_update_records - First observed
cancel_flow - First observed
check_instance_health - First observed
clone_update_set - First observed
close_incident - First observed
code_search - First observed
copy_flow - First observed
count_records - First observed
create_kb_article - First observed
create_kb_category - First observed
create_update_set - First observed
create_workflow - First observed
discover_table_schema - First observed
execute_action - First observed
execute_flow - First observed
execute_script - First observed
execute_subflow - First observed
explain_field - First observed
export_record_xml - First observed
find_atf_tests - First observed
find_task - First observed
get_app_details - First observed
get_attachment_info - First observed
get_catalog_category - First observed
get_catalog_item - First observed
get_cmdb_relationships - First observed
get_current_scope - First observed
get_current_update_set - First observed
get_flow_context_status - First observed
get_flow_error - First observed
get_flow_execution_details - First observed
get_flow_logs - First observed
get_flow_outputs - First observed
get_kb_article - First observed
get_knowledge_base - First observed
import_records_xml - First observed
inspect_update_set - First observed
install_from_app_repo - First observed
install_store_app - First observed
list_attachments - First observed
list_catalog_categories - First observed
list_catalog_item_variables - First observed
list_catalog_items - First observed
list_code_search_groups - First observed
list_code_search_tables - First observed
list_company_apps - First observed
list_instance_tables - First observed
list_kb_articles - First observed
list_kb_categories - First observed
list_knowledge_bases - First observed
list_plugins - First observed
list_scoped_apps - First observed
list_update_sets - First observed
lookup_app - First observed
lookup_columns - First observed
lookup_table - First observed
move_update_set_records - First observed
publish_kb_article - First observed
publish_to_app_repo - First observed
pull_script - First observed
push_script - First observed
query_delete_records - First observed
query_syslog - First observed
query_table - First observed
query_update_records - First observed
resolve_incident - First observed
run_atf_test - First observed
run_atf_test_suite - First observed
search_store_apps - First observed
set_current_scope - First observed
set_current_update_set - First observed
submit_catalog_request - First observed
test_flow - First observed
traverse_cmdb_graph - First observed
update_kb_article - First observed
update_store_app - First observed
upload_attachment - First observed
validate_app_install - First observed
validate_catalog
TDQS
Most tools have clearly distinct purposes, with detailed descriptions that differentiate overlapping areas like flow execution (test_flow vs execute_flow) and queries (query_table vs aggregate_query vs count_records). A few pairs, such as get_app_details and lookup_app, could cause initial confusion, but the descriptions resolve this. Overall, the boundaries are well-defined despite the large number of tools.
The vast majority of tools follow a consistent verb_noun pattern (e.g., get_catalog_item, list_attachments, create_update_set), making predictions easy. Minor deviations like aggregate_grouped and code_search break the pattern slightly but are still readable. The naming is largely predictable and coherent.
With 87 tools, the count is extreme and far exceeds the rubric's 50+ threshold. While the server covers a broad ServiceNow domain, the sheer number makes it unwieldy for agents to select from and likely includes redundant or overly granular operations. This is a case of quantity over an appropriately scoped tool surface.
The tool surface is exceptionally comprehensive, covering CRUD operations, queries, aggregates, flow automation, CMDB traversal, code search, app management, ATF testing, knowledge management, script push/pull, and update sets. Minor gaps exist, such as no dedicated single-record delete tool, but workarounds via query_delete_records or execute_script fill the void. Overall, the domain is well-covered with no significant dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server for AI access to SmartBear tools, including BugSnag, Reflect, Swagger, PactFlow, QTM4J.
MCP server for building and testing AI agents with multi-model experimentation and insights.
- mttrlyOAuthcom.mttrly
AI-powered incident management and server monitoring via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server enabling AI agents to access and manipulate ServiceNow data through natural language interactions, allowing users to search for records, update them, and manage scripts.47MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server for ServiceNow that provides over 60 pre-built tools for ITSM, ITOM, and App Dev operations, enabling AI agents to manage incidents, changes, users, service catalog, and projects through a unified interface.6MIT
- AlicenseNot gradedqualityCmaintenanceMCP server enabling interaction with ServiceNow API for managing incidents, CMDB, change management, and other ServiceNow operations via natural language.19MIT
- FlicenseAqualityCmaintenanceA production-ready MCP server that turns any MCP-compatible AI assistant into an AI-powered ServiceNow Incident Management Assistant, exposing incidents, users, CMDB records, and knowledge articles through validated tools.12-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sonisoft-cnanda/now-sdk-ext-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server