now-sdk-ext-mcp
This MCP server lets an AI assistant read, query, and modify a ServiceNow instance — from data and schema exploration to script execution, testing, flow management, and app deployment.
Query & aggregate data: run encoded queries, counts, and grouped/ungrouped aggregates (COUNT, AVG, MIN, MAX, SUM) on any table.
Explore schema: look up tables and columns, discover full table schemas, explain fields, list instance tables and plugins.
Discover table behavior: inventory business rules, UI actions, client scripts, UI/data policies, workflows, flow triggers, and state models, with scripts/definitions/dependencies on demand.
Execute scripts: run server-side JavaScript (GlideRecord, GlideAggregate, etc.) in a chosen application scope with parameter substitution.
Search code: query code across instances via search groups, and manage which tables/fields those groups cover.
ATF testing: find ATF tests by name/category, run individual tests or full suites.
Flow Designer: execute, test (unpublished drafts), copy flows/subflows/actions; poll context status, fetch outputs, errors, logs, and execution details; cancel runs.
CMDB: inspect CI relationships and traverse the CMDB graph (up to depth 5) for impact analysis.
Service catalog: browse categories/items, inspect variables, submit catalog requests, and validate item configuration.
Knowledge management: list knowledge bases, categories, and articles; create, update, and publish articles.
Attachments: list, inspect, and upload file attachments on records.
App lifecycle: list company/store apps, search store listings, validate installs, install/update/publish applications from repo or store.
Record operations: batch create/update records, and query-based bulk update/delete with dry-run confirmation.
Task operations: find tasks by number, assign tasks, add comments/work notes, resolve/close incidents, approve changes.
Update sets & XML: create/clone/list/inspect update sets, move records between them, set the current one, and export/import record XML.
Workflows: create legacy workflows with activities and transitions, optionally publishing them.
Instance/scoping utilities: check instance health (version, cluster, stuck jobs, semaphores, operational counts), query syslog, get/set current application scope, list scoped apps, push/pull scripts to/from local files, and list available tool packages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@now-sdk-ext-mcp Count 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.
Use table behavior discovery to inspect automation, field requirements, and related artifact details. Available in MCP 4.8.0, using core 6.4.1.
Quick Start
Prerequisites
Node.js >= 26
ServiceNow CLI credentials configured via
now-sdk auth --add
Use the Published Package
Configure your MCP client to launch npx --yes @sonisoft/now-sdk-ext-mcp:
{
"mcpServers": {
"servicenow": {
"command": "npx",
"args": ["--yes", "@sonisoft/now-sdk-ext-mcp"],
"env": {
"SN_AUTH_ALIAS": "dev",
"MCP_TOOL_PACKAGE": "readonly"
}
}
}
}The readonly package includes schema and behavior discovery. Omit MCP_TOOL_PACKAGE for all tools, or select a tool package for your workflow.
Build from Source
git clone https://github.com/sonisoft-cnanda/now-sdk-ext-mcp.git
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:
npm install -g @servicenow/sdk
now-sdk auth --add https://dev12345.service-now.com --alias dev --type oauthThis stores credentials locally. For clients that cannot unlock the OS keyring, import credentials into @sonisoft/sn-credstore and set SN_CRED_STORE_ENABLE=1 in the server environment; see credential storage.
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 https://dev12345.service-now.com --alias dev --type oauth # 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 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"
"Inspect change_request behavior on dev. Identify transition requirements and flow conditions needed for Change Management ATF coverage."
The assistant selects the appropriate tools, supplies the instance alias, and interprets their results. Schema tools describe fields; behavior tools retrieve automation configuration and dependencies. Script execution is available when the task calls for server-side JavaScript.
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.
Table Behavior Discovery
Use discover_table_behavior to inventory configuration affecting a table and get_behavior_details to retrieve known artifacts without rescanning. Both tools are read-only and available in the full, readonly, developer, and flow_developer packages.
Category | Functional context |
| Before/after/async timing, operation flags, order, conditions and scripts |
| Form/list/workspace placement, roles, conditions and scripts |
| Client events, target fields, views and inherited applicability |
| Conditions and mandatory, visible or read-only field actions |
| Server field requirements and enforcement settings |
| Legacy workflow versions, start conditions, activities and transitions |
| Record triggers, conditions and optional current flow definitions |
| State fields, transition gates and required fields in supported generic layouts |
Pass these tool arguments to discover_table_behavior for a compact inventory:
{
"instance": "dev",
"table": "change_request"
}Defaults: active configuration, applicable ancestors, all eight categories, 50 items per category and a 65,536-byte JSON budget. Summaries include conditions and declarative field actions. Request scripts, definitions and dependencies in the first call when needed:
{
"instance": "dev",
"table": "change_request",
"categories": ["business_rules", "flows", "state_models"],
"details": ["scripts", "definitions", "dependencies"],
"dependency_depth": 1,
"max_bytes": 262144
}For known artifacts, pass 1–50 references to get_behavior_details. Replace example IDs with real source IDs. Reference objects preserve the core API's camelCase keys even though tool options use snake_case:
{
"instance": "dev",
"references": [
{
"kind": "flows",
"sourceTable": "sys_hub_flow",
"sysId": "0123456789abcdef0123456789abcdef"
}
],
"details": ["definitions", "dependencies"],
"dependency_depth": 1,
"max_bytes": 262144
}References from discovery can be passed through unchanged. Flow discovery can return trigger references; a known flow ID uses kind: "flows" and sourceTable: "sys_hub_flow". Detail retrieval also supports subflows, actions, Script Includes and decision tables.
Controls and continuation:
Filter discovery with
categories, metadataname, or up to 50sys_ids. Useinclude_inherited: falsefor direct table associations andinclude_inactive: truefor inactive/draft candidates where available.limitaccepts 1–200 items per category.max_bytesaccepts 4,096–1,048,576 bytes on either tool.dependency_depthdefaults to 0; 1 requiresdetailscontainingdependenciesand expands at most 50 unique dependency references.scopeselects the transaction scope for flow definition reads.Pass each category's
nextCursorincursors, retaining the original table, filters and detail selection. For example, after abusiness_rules-only inventory:
{
"instance": "dev",
"table": "change_request",
"categories": ["business_rules"],
"cursors": {
"business_rules": "<nextCursor from the previous response>"
}
}Both tools return the core result in structuredContent and a short text summary. Discovery includes category status (complete, partial, unavailable, or failed), items, warnings and optional nextCursor. Detail batches include remainingReferences. Oversized details are omitted whole with omittedDetails and warnings; increase the budget or narrow the batch. Empty pages can still need continuation, and empty results only describe the account's accessible configuration.
Change Management ATF workflow: combine schema fields and choices with behavior conditions, required fields, state transitions, approval steps and dependent artifacts. Keep UI behavior separate from server enforcement. Preserve source references and runtime/design provenance: current flow definitions can differ from the version associated with runtime trigger metadata. Conditions are not evaluated and execution order is not predicted. Validate the resulting test assumptions with ATF results, logs and flow contexts.
Live behavior validation used an Australia instance; Zurich validation remains outstanding. See the behavior guide, tool parameters, and core API reference.
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 |
|
| Tool package or comma-separated union; see tool packages. |
| (unset) | Set to |
|
| Diagnostic log level; logs go to stderr. See debugging for file logging. |
| (unset) | When set, |
| (unset) | Where |
Development
Project Structure
src/
├── index.ts # Server entry point — registers tools, starts stdio transport
├── tools/ # Tool implementations and registry.ts
│ └── behavior.ts # Discovery and batched behavior detail tools
├── config/tool-packages.ts # Role package definitions
├── resources/ # Read-only servicenow:// resources
└── 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
Add a registration function under
src/tools/; behavior.ts demonstrates input validation, structured output and error handling.Route ServiceNow calls through
withConnectionRetryand delegate reusable behavior to core.Add the tool to
TOOL_REGISTRYin registry.ts and classify its effects in annotations.ts. Registration rejects unclassified tools.Add it to relevant role packages in tool-packages.ts. The full package uses the registry; the readonly package uses annotations.
Test listing and invocation through the MCP client in
test/unit/tools/, and cover package membership where relevant.Document parameters and examples in TOOLS.md and update user-facing README guidance.
Testing Approach
Tool tests use the MCP SDK's InMemoryTransport for linked client/server pairs and exercise JSON-RPC, schema validation and handler dispatch without ServiceNow calls. Logging tests also spawn the real server to verify stdout purity, stderr redaction and shutdown flushing.
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.
Role elevation (ACLs)
Changing an access control needs the elevated security_admin role, the one the Elevate Role
menu item turns on. Elevation belongs to one server session, so a tool that elevates uses a
connection that elevates every session as it logs in. The ACL write tools (create_acl,
update_acl, delete_acl, add_acl_role, remove_acl_role) always elevate; get_role_elevation
and the ACL reads (list_acls, get_acl) elevate only when called with elevate. Elevated
connections are cached apart from the plain one, and no other tool runs elevated.
Elevating changes no instance data, so NEX_POLICY_DENY and the readonly package allow it, while
the ACL writes are refused like any other write. A read-only session can therefore still elevate:
get_role_elevation with elevate, or elevate on list_acls / get_acl, opens a
security_admin session. The server stops reusing it 10 minutes after opening it, but on the
instance the session stays elevated until its idle timeout.
Code on an ACL (a script, or a javascript: condition) runs on the instance at every check, so
writing it also needs execute. NEX_POLICY_DENY=execute allows role-only ACL changes and refuses
ones that carry code, or that make existing code run where it did not (switching on, changing the
operation, turning admin overrides off). Role changes stay plain writes, although adding a role, or
removing the last one (which brings snc_internal back), changes who reaches the ACL's existing code.
A user may elevate to security_admin only when it is assigned to them; in the base system only
the admin user has it. The ACL write tools need an update_set, so a security change is never
captured in whatever set the user has open. Elevation was verified with basic-auth aliases.
Contributing
Testing
There are three layers of testing for this project:
1. Automated Tests (Jest)
Protocol tests use InMemoryTransport; logging checks also launch the real server. Automated tests do not require ServiceNow credentials or call a live instance.
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:
Shared logger — use
getLogger()fromsrc/common/logging.ts. It sends diagnostics to stderr and redacts structured metadata and recognized credential patterns. Avoid rawconsole.error()with errors or session data.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. SDK diagnostics use the same redacting logger. Redaction covers structured credential fields and recognized message patterns; never interpolate arbitrary secrets into log messages. SIGINT and SIGTERM wait for log flushing within a two-second shutdown bound. Core 6.4.1 also waits for the underlying file stream to finish pending writes.
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
ServiceNow SDK upgrades
New @servicenow/sdk releases are rolled through sn-credstore, core, the CLI and the MCP
server by a scheduled routine. Its runbook and scripts (scripts/sdk-watch/) are described in
docs/SDK_UPGRADE_ROUTINE.md.
License
MIT
OAuth renewal
Alias-bound connections provide core with a credential resolver. Core can refresh OAuth and rebuild session cookies during long-running operations; the 30-minute connection cache is not an authentication lifetime.
Core owns authentication retries. MCP does not retry NEX_AUTH_* or
NEX_SESSION_* errors again. Writes and stateful sessions require an explicit safe
restart after expiry. Rejected refresh credentials require a new login; temporary
store/network failures do not establish that interactive reauthentication is needed.
When upgrading a shared store, stop all clients first, upgrade every client
(including standalone now-sdk-x) to sn-credstore 1.1.1 or later, then restart.
The new lock protocol cannot safely run alongside older clients.
Available Tools
135 toolsadd_acl_roleAdd ACL RoleA
Add a role to an access control: users with that role then pass its role check (roles are alternatives), and reach any script the ACL has. This is a security change: before calling it, tell the user who gains or loses access and get their go-ahead. It elevates its own session to security_admin (only for ACL tools; other tools stay unelevated) and writes into the named update set, verifying each write by reading it back. To swap a role, add the new one before removing the old.
Inputs: role (required), sys_id (required), update_set (required), scope, +3 more.
add_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.
Inputs: table (required), search_group (required), search_fields (required), instance.
add_table_columnAdd Table ColumnA
Add a column to a table, as the Columns related list does, with its Field Label and form layout captured and verified. The update set must be the working set (set_current_update_set): the platform captures schema changes only into the current set. The platform's prefix (u_ in Global, _ on another application's table) is added when missing.
Inputs: label (required), table (required), column (required), update_set (required), +7 more.
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.
Inputs: table (required), comment (required), record_sys_id (required), instance, +1 more.
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.
Inputs: table (required), group_by (required), count, query, +7 more.
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.
Inputs: table (required), count, query, instance, +5 more.
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.
Inputs: sys_id (required), comments, instance.
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.).
Inputs: table (required), assigned_to (required), record_sys_id (required), instance, +1 more.
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.
Inputs: operations (required), instance, transaction.
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.
Inputs: updates (required), instance, stop_on_error.
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.
Inputs: context_id (required), reason, instance.
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.
Inputs: instance, include_cluster, include_version, include_semaphores, +3 more.
clone_update_setClone Update SetA
Clone an existing update set by creating a new one and copying its records.
WARNING: do not use this to move or promote work. The copy keeps only a few columns of each capture (name, type, target_name, payload, category): it drops application (the copies default to global), action, table, replace_on_upgrade, update_guid and sys_recorded_at, so the clone does not commit like the original. To move a capture use move_update_set_capture; to ship a set, complete it and export_update_set. Use this only when the user asks for a clone knowing that.
Inputs: new_name (required), source_sys_id (required), instance.
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.
Inputs: sys_id (required), close_notes (required), instance, close_code.
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
Inputs: term (required), limit, table, instance, +3 more.
complete_update_setComplete Update SetA
Complete an In progress, non-Default update set after checking what it holds: the capture count must equal expected_captures (the number you reviewed, e.g. with inspect_update_set), no other user may be working in it, and every capture must belong to the set's application. The state is read back. A Complete set should not be reopened once another instance retrieved or exported it, so complete only when the work is done and reviewed. If it was the working set, put the previous one back with restore_update_set.
Inputs: sys_id (required), expected_captures (required), instance.
convert_workflowPlan Workflow ConversionARead-only
Plan the move of a legacy workflow to Flow Designer: how each activity maps to a flow step, what has to stay a script, and a Fluent (now-sdk) skeleton for the flow, returned as text. Read-only: nothing is written to the instance or to disk.
Inputs: workflow (required), version, instance, directory, +1 more.
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.
Inputs: name (required), target_scope (required), source_flow_id (required), instance.
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).
Inputs: table (required), query, instance.
create_aclCreate ACLA
Create an access control. This is a security change: before calling it, tell the user who gains or loses access and get their go-ahead. It elevates its own session to security_admin (only for ACL tools; other tools stay unelevated) and writes into the named update set, verifying each write by reading it back. With roles, the ACL is inserted inactive, given its roles, cleared of the snc_internal role the platform adds to a role-less ACL, checked, and only then activated. Without roles, snc_internal stays and every internal user who meets the condition or script passes. Put an ACL in its table's application: the platform's documented limits allow only role-based field ACLs on another application's table.
Inputs: operation (required), update_set (required), name, type, +13 more.
create_browser_sessionCreate Browser SessionADestructive
Mint a verified Playwright browser session for an instance alias, as nex auth browser-session does: log in with the alias's stored credential, prove the cookies work on their own, and save them as a Playwright storage-state file (owner-only, 0600) in this server's session directory. Returns the file's path, never the cookies. The session has the user's full rights in the UI, outside this server's change policy, so it is refused when changes are not permitted. Never print, read out or commit the file, and delete it with delete_browser_session when the browser work is done.
Inputs: name, instance.
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.
Inputs: short_description (required), knowledge_base_sys_id (required), text, wiki, +5 more.
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.
Inputs: label (required), knowledge_base_sys_id (required), active, instance, +1 more.
create_update_setCreate Update SetA
Create a new update set, In progress, in the given application. It is not made current: use set_current_update_set for that. IMPORTANT: This creates a new update set on the instance.
Inputs: name (required), application (required), instance, description.
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.
Inputs: name (required), table (required), activities (required), access, +8 more.
debug_flow_breakpointsSet Flow Debug BreakpointsAIdempotent
Change a debug run's breakpoints, by the step numbers Workflow Studio shows: replace them (set), add or remove some, or clear them all. Each step is looked up in the debugger's own list of places it can stop; one it cannot stop at is refused with the valid steps. remove matches by step number, so a breakpoint on an inner action step (which has none) is only removed by set or clear. While the run is in a subflow, this applies to the subflow. To list them, use debug_flow_inspect with view breakpoints.
Inputs: context_id (required), add, set, clear, +2 more.
debug_flow_cancelCancel Flow Debug RunADestructiveIdempotent
End a debug run, and any subflow it stepped into, then read it back. Safe to repeat. It refuses a flow context the debugger did not start, so it cannot end a real flow run. Needs only write, so it works under NEX_POLICY_DENY=execute.
Inputs: context_id (required), instance.
debug_flow_inspectInspect Flow Debug RunARead-only
Show a debug run without moving it: where it is (default), every step's runtime inputs and outputs (steps), where it can stop (locations), or its breakpoints. Values are the run's real data; long ones are cut unless full.
Inputs: context_id (required), full, step, view, +1 more.
debug_flow_run_toDebug Flow To BreakpointADestructive
Debug a flow or subflow to a breakpoint in one call: start it, run to the first of the breakpoints, report every step's inputs and outputs there, then (by default) cancel it so nothing is left open. after resume lets it run on to the end, ignoring the other breakpoints; after stay leaves it paused for debug_flow_step. The run is real: records it creates or changes are kept. Only when the user asked to debug.
Inputs: flow (required), breakpoints (required), full, after, +3 more.
debug_flow_startStart Flow Debug RunADestructive
Start a Workflow Studio debug run (Test > Debug) of a flow or subflow and leave it paused before its first step. The flow's current draft runs, for real: records it creates or changes are kept, so debug a copy (copy_flow) in a scratch app. Returns the run's root context id, the steps it can stop at, and where it is. Continue with debug_flow_step, and always end it: run it to the end, or debug_flow_cancel. debug_flow_run_to does all of this in one call. Only when the user asked to debug.
Inputs: flow (required), full, inputs, instance, +2 more.
debug_flow_stepStep Flow Debug RunADestructive
Move a paused debug run and report where it is: over (run the paused step, stop at the next; default), into (enter a subflow call, which runs in a child context that later calls apply to), out (run the rest of the current subflow; at the top level, the rest of the run), resume (to the next breakpoint or the end), or skip_all (to the end, ignoring breakpoints). The steps run for real.
Inputs: context_id (required), full, action, instance, +1 more.
delete_aclDelete ACLADestructive
Delete an access control and its role rows. This is a security change: before calling it, tell the user who gains or loses access and get their go-ahead. It elevates its own session to security_admin (only for ACL tools; other tools stay unelevated) and writes into the named update set, verifying each write by reading it back. Prefer update_acl with active=false, which is reversible, unless the user asked to delete. An active record ACL is deactivated first (the platform deletes only inactive ones) and reactivated if the delete fails.
Inputs: sys_id (required), confirm (required), update_set (required), scope, +3 more.
delete_browser_sessionDelete Browser SessionADestructiveIdempotent
Delete a browser session file that create_browser_session wrote, once the browser work is done. Only a .json file in this server's session directory is deleted. The instance's UI session itself ends at its idle timeout.
Inputs: path (required).
delete_metadata_recordDelete Metadata RecordADestructive
Delete application metadata through the platform's own Delete, captured as a DELETE in the named update set and read back. Only when the user asked for the delete; deleting a record that other instances already have removes it there too when the set is committed. Writes through the record's form in the named application and update set, then reads back the record and its capture. Refuses protected files, the platform's own schema tables, and access controls (use the ACL tools). Writing code (a script, a server condition, Jelly, a javascript: value, or switching such a record on) is refused when the session does not permit running scripts.
Inputs: table (required), sys_id (required), update_set (required), confirm_table (required), +6 more.
discover_table_behaviorDiscover Table BehaviorARead-only
Discover configuration affecting a table: business rules, UI actions, client scripts, UI policies and field actions, server data policies, workflows, flow triggers and generic state models. Defaults to active behavior and applicable ancestors. Returns conditions, timing, provenance and completeness; configuration is not a prediction that anything will execute. Select categories and request scripts/definitions/dependencies immediately when already needed. Flow runtime triggers and design-time definitions are labeled separately. Follow per-category cursors with the same filters; use get_behavior_details for known references or a targeted batch. Empty results describe this account's visibility only.
Inputs: table (required), name, limit, scope, +9 more.
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
Inputs: table (required), instance, include_choices, include_ui_policies, +2 more.
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.
Inputs: scoped_name (required), mode, quick, scope, +3 more.
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.
Inputs: scoped_name (required), mode, quick, scope, +3 more.
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.info() to produce output (gs.print() also works in global, but prints nothing in a scoped app).
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()). Only 'global' and applications developed on the instance (sys_app) can be used; installed store apps (sys_store_app) cannot — run in global and call their APIs fully-qualified. In a scoped app, use gs.info() for output: gs.print() is global-only.
IMPORTANT: This executes code directly on the ServiceNow instance. Always review scripts before execution and prefer read-only operations unless modification is explicitly intended.
Inputs: script (required), scope, params, instance.
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.
Inputs: scoped_name (required), mode, quick, scope, +3 more.
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.
Inputs: field (required), table (required), instance.
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
Inputs: table (required), sys_id (required), instance.
export_update_setExport Update Set to XMLADestructive
Export an update set to an XML file on this machine, as the platform's Export to XML does: a Complete local set, a batch base with its Complete children, or a Retrieved (Loaded) update set. The file is checked against the set's records before it is written, and a local export's temporary copy on the instance is removed and read back. The XML holds every record's full payload: it is written to the file only (mode 0600), never returned. Only export from a customer instance with the user's say-so.
Inputs: output (required), sys_id (required), replace, instance, +1 more.
export_workflowExport WorkflowARead-only
Export a legacy workflow version as one complete JSON document (now-sdk-ext/legacy-workflow@1): every activity with its variables, the transitions and conditions. Read-only.
Inputs: workflow (required), version, instance.
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.
Inputs: limit, active, category, instance, +1 more.
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.
Inputs: table (required), number (required), instance.
get_aclGet ACLARead-only
Read one access control with its roles, condition and script.
Inputs: sys_id (required), elevate, instance.
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.
Inputs: app_id (required), instance.
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.
Inputs: sys_id (required), instance.
get_behavior_detailsGet Behavior DetailsARead-only
Read up to 50 known behavior references in one call without rediscovering a table. Pass references from discover_table_behavior or known kind/sourceTable/sysId values. Add details to request scripts, definitions and dependencies immediately; default is compact metadata. Flows accept sourceTable sys_hub_flow with kind flows; subflows, actions, Script Includes and decision tables can also be retrieved. Optional one-level dependency expansion is bounded and labels unresolved calls. Inaccessible and oversized details have explicit warnings and recovery references. This reads configuration only.
Inputs: references (required), scope, details, instance, +2 more.
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.
Inputs: sys_id (required), instance.
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.
Inputs: sys_id (required), instance, include_variables.
get_choice_listGet Choice ListBRead-only
Read a column's choice list in one language, with the list's application (the one to write it in) and capture name.
Inputs: table (required), column (required), instance, language.
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').
Inputs: ci_sys_id (required), limit, instance, direction, +1 more.
get_current_scopeGet Current Application ScopeARead-only
Get the currently active application scope on the ServiceNow instance.
Inputs: instance.
get_current_update_setGet Current Update SetARead-only
Get the currently active update set for the session.
Inputs: instance.
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.
Inputs: context_id (required), instance.
get_flow_definitionGet Flow DefinitionARead-only
Read the design-time definition of a Flow Designer flow, subflow or action as Workflow Studio stores it: its trigger, steps, flow logic, inputs and outputs. What the artifact IS, not what a run of it did (for that, use get_flow_execution_details). Nothing is run, published or changed. The type is never inferred: a sys_id of another type fails with type_mismatch.
Inputs: sys_id (required), type, view, scope, +1 more.
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.
Inputs: context_id (required), instance.
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
Inputs: context_id (required), scope, instance, include_flow_definition.
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.
Inputs: context_id (required), limit, instance, order_direction.
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.
Inputs: context_id (required), instance.
get_form_layoutGet Form LayoutARead-only
Read one form section's layout (sys_ui_section) in order: field names, .begin_split / .split / .end_split, and .formatter.<sys_id>. Find sections with query_table on sys_ui_section (name = table, view).
Inputs: section (required), instance.
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.
Inputs: sys_id (required), instance.
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.
Inputs: sys_id (required), instance.
get_list_layoutGet List LayoutARead-only
Read a table's list columns (sys_ui_list) for a view, in order; dot-walked columns as field.field.
Inputs: table (required), view, instance.
get_policy_statusGet Policy StatusARead-only
Show what this server permits right now: whether changing instance data (write) and running scripts, flows or tests (execute) are allowed, and which policy layer decided. Reads are never gated. Use it when a tool was refused. The policy is set in the server's environment and cannot be changed from a tool call.
Inputs: no named parameters.
get_role_elevationGet Role ElevationARead-only
The elevated privilege roles (e.g. security_admin) this user may elevate to, as the Elevate Role dialog offers them. With elevate, also elevates a session to security_admin and proves it holds. Elevating changes no instance data.
Inputs: elevate, instance.
get_workflowGet WorkflowARead-only
Read one legacy workflow version's definition as JSON: its activities with their exits (and variable values), transitions, stages and editor status. For a readable view use outline_workflow.
Inputs: workflow (required), version, instance, include_variables.
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.
Inputs: xml_content (required), target_table (required), instance.
insert_metadata_recordInsert Metadata RecordA
Insert application metadata (a script include, business rule, UI action, property, ...). Writes through the record's form in the named application and update set, then reads back the record and its capture. Refuses protected files, the platform's own schema tables, and access controls (use the ACL tools). Writing code (a script, a server condition, Jelly, a javascript: value, or switching such a record on) is refused when the session does not permit running scripts.
Inputs: table (required), update_set (required), view, scope, +7 more.
inspect_update_setInspect Update SetARead-only
Inspect an update set's contents — lists all components grouped by type (business rules, script includes, etc.).
Inputs: sys_id (required), instance.
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.
Inputs: scope (required), sys_id (required), version, instance, +3 more.
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.
Inputs: app_id (required), version (required), instance, load_demo_data, +1 more.
kill_transactionKill TransactionADestructiveIdempotent
Ask the platform to cancel one active transaction (the Kill action on Active Transactions). The work it was doing stops part way and is not undone, and the user who started it gets an error. Only when the user asked, for a transaction found with list_transactions; never one of your own requests.
Inputs: confirm (required), transaction_id (required), instance.
list_aclsList ACLsARead-only
List access controls (sys_security_acl) with their roles. Needs at least one of table, name, scope or scope_id. table returns the table's own ACLs: table, table.* and table.<field> (not the parent tables'; list those too). Roles on one ACL are alternatives; snc_internal among them lets every internal user pass.
Inputs: name, type, scope, table, +5 more.
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.
Inputs: table (required), record_sys_id (required), limit, instance.
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.
Inputs: limit, query, title, active, +4 more.
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.
Inputs: limit, query, active, offset, +4 more.
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.
Inputs: catalog_item_sys_id (required), instance, include_variable_sets.
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.
Inputs: limit, instance.
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.
Inputs: search_group (required), instance.
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.
Inputs: scope, sys_id, instance, installed_only.
list_flow_debug_sessionsList Flow Debug RunsARead-only
List debug runs still open on the instance (paused, waiting or running), newest first. A run left paused holds a flow context open: find it here and end it with debug_flow_cancel.
Inputs: limit, instance, created_by.
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.
Inputs: limit, query, scope, offset, +3 more.
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.
Inputs: limit, query, offset, instance, +4 more.
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.
Inputs: limit, query, active, offset, +3 more.
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.
Inputs: limit, query, active, offset, +1 more.
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.
Inputs: limit, query, instance, active_only, +1 more.
list_scoped_appsList Scoped ApplicationsARead-only
List scoped applications (sys_app records) on the instance with optional filtering.
Inputs: limit, query, instance.
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.
Inputs: no named parameters.
list_transactionsList Active TransactionsARead-only
List the transactions running now on every responding cluster node (Active Transactions, All Nodes): user, age, type, state and URL (query values removed). For finding a stuck or runaway request. The nodes are asked to report and polled, so this can take some seconds.
Inputs: limit, query, instance, timeout_seconds.
list_update_setsList Update SetsARead-only
List update sets on the instance with optional filtering.
Inputs: limit, query, fields, instance.
list_workflow_activity_typesList Workflow Activity TypesARead-only
List legacy workflow activity types, or describe one as this instance defines it (its variables, default conditions, and optionally its implementation script or how published workflows configure it).
Inputs: name, type, category, instance, +3 more.
list_workflowsList WorkflowsBRead-only
List legacy Workflow Editor workflows with the state of their published and checked-out versions.
Inputs: name, limit, table, instance.
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
Inputs: search_term (required), type, instance, active_only.
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.
Inputs: table (required), limit, instance, search_term.
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.
Inputs: search_term (required), limit, instance.
move_update_set_captureMove Update Set CaptureA
Move one capture (sys_update_xml) from one In progress set to another In progress, non-Default set of its own application, then read it back. Refused when a newer capture of the same record exists elsewhere, when the target already holds one, or across applications. The reason is appended to the capture's comments.
Inputs: reason (required), capture (required), source_set (required), target_set (required), +1 more.
move_update_set_recordsMove Update Set RecordsADestructiveIdempotent
Move records from one update set to another, by sys_id or all records of a source set.
WARNING: this is unverified: any HTTP 200 counts as moved, nothing is read back, and it does not check the same-application rule, newer captures elsewhere, or duplicates in the target. Prefer move_update_set_capture, which checks all of those and reads the move back; if you use this, query sys_update_xml afterwards.
Inputs: target_update_set_id (required), instance, record_sys_ids, source_update_set.
outline_workflowOutline WorkflowARead-only
Show a legacy workflow as a readable outline (default), a node list (every activity with its exits and where it is reached from), a structural analysis, or a Mermaid flowchart.
Inputs: workflow (required), view, version, instance, +3 more.
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.
Inputs: sys_id (required), instance.
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.
Inputs: scope (required), sys_id (required), version, instance, +2 more.
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)
Inputs: file_path (required), script_name (required), script_type (required), instance.
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. Pushing code is refused when the session does not permit running scripts.
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)
Inputs: file_path (required), script_name (required), script_type (required), instance.
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.
Inputs: query (required), table (required), limit, confirm, +1 more.
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.
Inputs: level, limit, query, table, +2 more.
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.).
Inputs: table (required), limit, query, fields, +2 more.
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.
Inputs: data (required), query (required), table (required), limit, +2 more.
remove_acl_roleRemove ACL RoleADestructive
Remove a role from an access control. This is a security change: before calling it, tell the user who gains or loses access and get their go-ahead. It elevates its own session to security_admin (only for ACL tools; other tools stay unelevated) and writes into the named update set, verifying each write by reading it back. Removing the last role makes the platform put snc_internal back, which lets every internal user past the role check, so any script on the ACL then runs for them: add the intended role first. Never remove a role shown only as a sys_id (hidden): its name is unknown to this session.
Inputs: role (required), sys_id (required), update_set (required), scope, +3 more.
remove_choiceRemove ChoiceADestructive
Remove a choice from a column's list, captured in the named update set. Refused while records hold the value: prefer set_choice with inactive, and remove anyway only when the user asked.
Inputs: table (required), value (required), column (required), update_set (required), +6 more.
remove_table_columnRemove Table ColumnADestructive
Remove a column from a table (the platform's Delete on its dictionary record), with every DELETE capture verified in the named update set. It deletes the column's data here and wherever the set is committed: only when the user asked. Refused while rows hold values, or while client scripts or UI policy actions name it, unless those are acknowledged.
Inputs: table (required), column (required), confirm (required), update_set (required), +6 more.
repair_store_appRepair Store ApplicationADestructive
Repair an installed Store or company application (the platform's Repair Application): reinstall its installed version from the application repository, without uninstalling it, and wait for the result. Files that were customized on the instance are kept (listed as skipped). Trust only a result that says Repaired: it requires the tracker to succeed and a new upgrade history to be written. Refused for an application developed on this instance, an inactive one, or one that contains plugins. Only when the user asked for a repair; it runs whatever the application's install runs.
Inputs: app (required), instance, load_demo_data, timeout_minutes.
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.
Inputs: sys_id (required), resolution_notes (required), instance, close_code.
restore_update_setRestore Update SetAIdempotent
Put back the working set (application and update set) that set_current_update_set reported as the previous one. If that set has closed meanwhile, the application's Default becomes current instead, and the result says so.
Inputs: update_set (required), application (required), instance.
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.
Inputs: test_sys_id (required), instance.
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.
Inputs: os_name, instance, os_version, suite_name, +5 more.
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.
Inputs: tab_context (required), limit, instance, search_key.
send_flow_messageSend Flow MessageADestructive
Send a message to a paused flow execution (one waiting in a Wait For Message step), which resumes it: the flow then runs whatever comes next. Sent from a server-side script (sn_fd.FlowAPI.sendMessage). Only when the user asked; the message must be the one the step waits for. The platform accepts a message even when nothing is waiting for it, so check get_flow_context_status afterwards to see whether the flow resumed.
Inputs: message (required), context_id (required), scope, payload, +1 more.
set_choiceSet ChoiceADestructiveIdempotent
Add a choice to a column's list, or change one (label, sequence, hint, inactive), in the list's application and the named update set; the list's capture is verified there. Inactivating keeps the label and hides it from new selections.
Inputs: table (required), value (required), column (required), update_set (required), +9 more.
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.
Inputs: app_sys_id (required), instance.
set_current_update_setSet Current Update SetAIdempotent
Make an In progress, non-Default update set the user's working set: the application (apps.current_app) and the update set, saved for every later session, as nex update-set use does. The result is read back, and it reports the previous working set: put it back with restore_update_set when the work is done. This changes what captures the user's own later changes, in the UI and elsewhere.
Inputs: sys_id (required), name, instance.
set_form_layoutSet Form LayoutADestructiveIdempotent
Replace one form section's layout with the whole new element list, as the Form Layout page saves it, captured and read back. Read it first with get_form_layout and send every element to keep. The update set must be the working set. Refused for sections holding annotations, charts or embedded lists.
Inputs: section (required), elements (required), update_set (required), scope, +3 more.
set_list_layoutSet List LayoutADestructiveIdempotent
Replace a table's list columns for a view with the whole new column list, as the List Layout page saves it, captured and read back. Read it first with get_list_layout. The update set must be the working set.
Inputs: table (required), columns (required), update_set (required), view, +4 more.
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.
Inputs: catalog_item_sys_id (required), instance, quantity, variables.
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": "<record_sys_id>", "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.
Inputs: flow_id (required), output_map (required), scope, instance, +1 more.
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.
Inputs: ci_sys_id (required), instance, direction, max_depth, +2 more.
update_aclUpdate ACLADestructiveIdempotent
Change an access control's fields (roles: add_acl_role / remove_acl_role). This is a security change: before calling it, tell the user who gains or loses access and get their go-ahead. It elevates its own session to security_admin (only for ACL tools; other tools stay unelevated) and writes into the named update set, verifying each write by reading it back. On an ACL that already has code (a script or javascript: condition), switching it on, changing its operation or turning admin overrides off also needs permission to run code. Deactivating (active=false) is a security change too: other ACLs, the parent table's, or the default then decide, and switching off a Deny-Unless ACL can only widen access.
Inputs: sys_id (required), update_set (required), scope, active, +9 more.
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.
Inputs: sys_id (required), text, wiki, active, +7 more.
update_metadata_recordUpdate Metadata RecordADestructiveIdempotent
Change fields of application metadata. Writes through the record's form in the named application and update set, then reads back the record and its capture. Refuses protected files, the platform's own schema tables, and access controls (use the ACL tools). Writing code (a script, a server condition, Jelly, a javascript: value, or switching such a record on) is refused when the session does not permit running scripts.
Inputs: table (required), sys_id (required), update_set (required), view, +7 more.
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.
Inputs: app_id (required), version (required), instance, load_demo_data, +1 more.
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.
Inputs: table (required), file_name (required), content_type (required), record_sys_id (required), +2 more.
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.
Inputs: packages (required), instance.
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.
Inputs: catalog_item_sys_id (required), instance.
validate_workflowValidate WorkflowAIdempotent
Run the Workflow Editor's Validate Workflow on a version (by default your draft if you have one, else the published version) and return its report, without publishing anything. The platform saves the report over that version's previous one; the workflow itself is unchanged.
Inputs: workflow (required), version, instance.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 135 tools
The set has substantial overlap: query_table/count_records/aggregate_query/aggregate_grouped all read table data, while lookup_table/list_instance_tables/discover_table_schema/lookup_columns/explain_field all describe tables and fields. Flow execution is split across execute_flow, test_flow, execute_subflow, execute_action, and five debug_flow tools, and update-set moves are duplicated by move_update_set_capture versus move_update_set_records. Detailed descriptions help, but with 135 tools an agent still faces many unclear boundaries.
Most names are consistent snake_case verb_noun patterns such as list_kb_articles, create_kb_article, get_flow_definition, and run_atf_test. Minor deviations exist, including code_search (no verb), get_choice_list versus set_choice/remove_choice, and debug_flow_breakpoints, but the overall convention remains predictable.
With 135 tools, this is far beyond an appropriate surface for a single MCP server, spanning table queries, metadata, ACLs, flows, debugging, update sets, knowledge, catalog, CMDB, ATF, apps, scripts, browser sessions, and transactions. The count creates a serious discovery and selection burden and strongly suggests the need for packages or scoping.
The surface is extremely broad and covers most lifecycle operations for its many domains, including CRUD on metadata, update sets, ACLs, flows, knowledge articles, catalog items, CMDB relationships, and ATF tests. Some gaps are visible, such as creating tables and generic single-record create/update tools being represented mainly through batch or query-based operations, but most core workflows are covered.
Maintenance
Related MCP Connectors
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
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.
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
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
- AlicenseCqualityBmaintenanceMCP server enabling interaction with ServiceNow API for managing incidents, CMDB, change management, and other ServiceNow operations via natural language.13320MIT
- AlicenseAqualityDmaintenanceA 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.12MIT