Skip to main content
Glama

servicenow-mcp-server

A complete Model Context Protocol (MCP) server for ServiceNow. Connect Claude (or any MCP client) to your ServiceNow instance and interact with incidents, changes, CMDB, service catalog, users, groups, and the knowledge base using natural language.


Authentication

Three auth methods are supported. Set the env vars for exactly one — the server detects which to use automatically.

Method

Env vars required

Best for

OAuth 2.0 PKCE

SERVICENOW_CLIENT_ID + SERVICENOW_CLIENT_SECRET

SSO / per-user permissions

Basic auth

SERVICENOW_USERNAME + SERVICENOW_PASSWORD

Dev / service accounts

Static token

SERVICENOW_ACCESS_TOKEN

Quick testing

Priority (if multiple are set): static token → basic → OAuth PKCE


Related MCP server: servicenow-api

The PKCE flow authenticates as the real user. Each person who runs the server logs in via your SSO identity provider and gets access only to what their ServiceNow roles permit — admins can do admin things, itil users are limited to itil operations, and so on.

1. Create an OAuth application in ServiceNow

System OAuth → Application Registry → New → "Create an OAuth API endpoint for external clients"

  • Set Redirect URL to http://localhost:54321/callback

  • Copy the Client ID and Client Secret

If you need a different callback port, set SERVICENOW_OAUTH_CALLBACK_PORT (default: 54321) and update the redirect URL in ServiceNow to match.

2. Configure your env vars

SERVICENOW_INSTANCE_URL=https://yourcompany.service-now.com
SERVICENOW_CLIENT_ID=your_client_id
SERVICENOW_CLIENT_SECRET=your_client_secret

# Optional — only needed if port 54321 is taken
# SERVICENOW_OAUTH_CALLBACK_PORT=54321

3. First-time login

Before adding to Claude Desktop, run the server once in a terminal to complete the browser login:

npx @autopilot715/servicenow-mcp-server

Your browser will open to your ServiceNow login (which will trigger SSO if configured). After authenticating, tokens are cached at ~/.config/servicenow-mcp-server/tokens.json. The server starts and you can Ctrl+C once you see it's running.

Subsequent starts (including from Claude Desktop) are silent — the cached token is used and refreshed automatically. A full re-login only happens if the refresh token expires or is revoked.

4. Add to Claude Desktop config

Mac: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "servicenow": {
      "command": "npx",
      "args": ["@autopilot715/servicenow-mcp-server"],
      "env": {
        "SERVICENOW_INSTANCE_URL": "https://yourcompany.service-now.com",
        "SERVICENOW_CLIENT_ID": "your_client_id",
        "SERVICENOW_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Restart Claude Desktop after editing the config.


Option B — Basic auth

Simplest to set up. Use a dedicated service account in production rather than a personal login.

{
  "mcpServers": {
    "servicenow": {
      "command": "npx",
      "args": ["@autopilot715/servicenow-mcp-server"],
      "env": {
        "SERVICENOW_INSTANCE_URL": "https://yourcompany.service-now.com",
        "SERVICENOW_USERNAME": "your_username",
        "SERVICENOW_PASSWORD": "your_password"
      }
    }
  }
}

Option C — Static bearer token

Use an existing OAuth token. Tokens expire and require manual renewal.

{
  "mcpServers": {
    "servicenow": {
      "command": "npx",
      "args": ["@autopilot715/servicenow-mcp-server"],
      "env": {
        "SERVICENOW_INSTANCE_URL": "https://yourcompany.service-now.com",
        "SERVICENOW_ACCESS_TOKEN": "your_oauth_token"
      }
    }
  }
}

Tokens can be found or generated at System OAuth → Manage Tokens in ServiceNow.


Running Locally (from source)

git clone https://github.com/kylburns89/servicenow-mcp-server.git
cd servicenow-mcp-server
npm install
npm run build

Copy .env.example to .env and fill in your credentials:

cp .env.example .env

Then start with:

# Node 20+ (recommended)
node --env-file=.env dist/index.js

# Node 18
export $(grep -v '^#' .env | xargs) && node dist/index.js

For active development, run the TypeScript compiler in watch mode in one terminal and restart the server after each save:

npm run dev   # tsc --watch

Example Prompts

Once connected, you can use natural language:

  • "Show me all P1 and P2 incidents assigned to the Network Operations group"

  • "Create an incident for a login issue reported by jdoe@company.com, category software, high priority"

  • "List all emergency change requests scheduled this week"

  • "Find all servers in the Data Center that are in maintenance status"

  • "Search the knowledge base for articles about VPN setup"

  • "Get the full details for change request CHG0012345"

  • "Add a work note to INC0001234 saying the server has been rebooted and is under monitoring"

  • "Who are the members of the Service Desk group?"


Tools (41 total)

Generic Table API

Tool

Description

servicenow_query_records

Query any table with encoded filters and pagination

servicenow_get_record

Get a single record by sys_id

servicenow_create_record

Create a record in any table

servicenow_update_record

Update a record by sys_id (PATCH)

servicenow_delete_record

Delete a record by sys_id ⚠️

Incidents

Tool

Description

servicenow_list_incidents

List/search incidents with filters

servicenow_get_incident

Get incident by number (INC...) or sys_id

servicenow_create_incident

Create a new incident

servicenow_update_incident

Update state, assignment, priority, etc.

servicenow_add_work_note

Add a work note or comment to any record

Change Management

Tool

Description

servicenow_list_changes

List/search change requests

servicenow_get_change

Get change by number (CHG...) or sys_id

servicenow_create_change

Create a change request

servicenow_update_change

Update state, plans, assignment

Users & Groups

Tool

Description

servicenow_list_users

Search users

servicenow_get_user

Get user by username, email, or sys_id

servicenow_list_groups

List user groups

servicenow_get_group_members

Get all members of a group

CMDB

Tool

Description

servicenow_search_ci

Search CIs by name, class, or location

servicenow_get_ci

Get full CI details

servicenow_get_ci_relationships

Traverse upstream/downstream CI relationships (configurable depth)

Service Catalog

Tool

Description

servicenow_list_catalog_items

Browse catalog items

servicenow_get_catalog_item

Get item details and required variables

servicenow_submit_catalog_request

Submit a catalog request

servicenow_list_sc_requests

List catalog requests (REQ...)

Knowledge Base

Tool

Description

servicenow_search_knowledge

Search KB articles

servicenow_get_kb_article

Get full article content

Bulk Operations

Tool

Description

servicenow_bulk_update

Update multiple records matching a query (dry-run by default) ⚠️

servicenow_bulk_delete

Delete multiple records matching a query (dry-run by default) ⚠️

Attachments

Tool

Description

servicenow_list_attachments

List file attachments for a record

servicenow_get_attachment_content

Download attachment content (text inline, binary via URL)

servicenow_upload_attachment

Upload a file attachment to any record

Developer & Admin

Tool

Description

servicenow_aggregate

COUNT/SUM/AVG/MIN/MAX on any table, with optional grouping

servicenow_get_table_schema

Introspect field definitions from sys_dictionary

servicenow_get_instance_info

Instance version, cluster nodes, and upgrade history

servicenow_query_logs

Query syslog for errors, warnings, and debug messages

servicenow_search_artifacts

Search code across business rules, script includes, client scripts, UI actions, and scripted REST ops

servicenow_list_applications

List installed scoped applications

servicenow_discover_tables

Search and browse the table catalog (sys_db_object)

servicenow_list_atf_tests

List ATF tests and test suites

servicenow_run_atf_test

Execute an ATF test or suite via the ATF REST API


Query Syntax Reference

ServiceNow encoded query syntax for the query parameters:

Operator

Example

Meaning

=

state=1

Equals

!=

state!=7

Not equals

>=

priority>=2

Greater than or equal

LIKE

nameLIKEjohn

Contains

^

state=1^priority=1

AND

^OR

state=1^ORstate=2

OR

javascript:

assigned_to=javascript:gs.getUserID()

Script expression

STARTSWITH

numberSTARTSWITHINC

Starts with


Project Structure

src/
├── index.ts                       # Entry point, server init, transport selection
├── types.ts                       # TypeScript interfaces and field resolvers
├── constants.ts                   # Table names, state labels, limits
├── schemas/common.ts              # Shared Zod schemas
├── services/
│   ├── auth.ts                    # Auth mode detection, OAuth PKCE flow, token cache
│   └── servicenow-client.ts       # Axios client, Table API helpers
└── tools/
    ├── table.ts       # Generic CRUD tools
    ├── incidents.ts   # Incident tools
    ├── changes.ts     # Change management tools
    ├── users.ts       # User & group tools
    ├── cmdb.ts        # CMDB + CI relationship traversal tools
    ├── catalog.ts     # Service catalog tools
    ├── knowledge.ts   # Knowledge base tools
    ├── bulk.ts        # Bulk update/delete with dry-run
    ├── attachments.ts # Attachment list/upload/download
    └── developer.ts   # Aggregations, schema, logs, artifact search, ATF, app/table discovery

Contributing

Issues and PRs welcome on GitHub.

License

MIT

Available Tools

41 tools
servicenow_add_work_noteAdd Work Note or Comment to RecordA

Add a work note (internal) or comment (customer-visible) to any ServiceNow record that supports journal fields.

Args:

  • table (string): Table name (e.g., incident, change_request, problem)

  • identifier (string): Record number or sys_id

  • work_note (string): Internal work note text (visible to agents only)

  • comment (string): Customer-visible comment text

  • At least one of work_note or comment must be provided.

Returns: Confirmation with updated record

Examples:

  • Add work note to INC0001234 → table="incident", identifier="INC0001234", work_note="Rebooted server, monitoring."

  • Add customer comment → table="incident", identifier="INC0001234", comment="We are investigating your issue."

Inputs: no named parameters.

servicenow_aggregateAggregate Table StatisticsA
Read-onlyIdempotent

Calculate COUNT, SUM, AVG, MIN, or MAX on any ServiceNow table — optionally grouped by a field.

Uses the ServiceNow Aggregate API (/api/now/stats) for efficient server-side aggregation without fetching records.

Args:

  • table (string): Table to aggregate (e.g., incident, change_request, cmdb_ci)

  • query (string): Filter query (e.g., 'state!=7', 'priority=1^assignment_group=SYS_ID')

  • count (boolean): Include total record count (default: true)

  • sum_fields (string): Comma-separated numeric fields to sum (e.g., 'resolve_time,business_duration')

  • avg_fields (string): Comma-separated numeric fields to average

  • min_fields (string): Comma-separated fields to find minimum

  • max_fields (string): Comma-separated fields to find maximum

  • group_by (string): Field to group by (e.g., 'state', 'priority', 'assignment_group', 'category')

  • having (string): HAVING clause for grouped results (e.g., 'COUNT>5')

  • response_format: Output format

Examples:

  • Count open incidents by priority → table="incident", query="state!=7", group_by="priority"

  • Average resolve time for P1s → table="incident", query="priority=1^state=7", avg_fields="resolve_time"

  • Total open incidents by group → table="incident", query="state=1^ORstate=2", count=true, group_by="assignment_group"

  • Incidents per day this week → table="incident", query="opened_atRELATIVEGE@week@ago@1", group_by="opened_at"

Inputs: table (required), count, query, having, +6 more.

servicenow_bulk_deleteBulk Delete RecordsA
Destructive

Delete multiple records matching a query. Dry-run by default — always preview before committing.

Args:

  • table (string): Target table

  • query (string): Encoded query to select records to delete

  • dry_run (boolean): Preview without deleting (default: true). Set false to commit.

  • limit (number): Safety cap — max records to delete (default 20, max 100)

  • response_format: Output format

⚠️ Deletion is permanent. Always run with dry_run=true first to confirm scope.

Examples:

  • Preview stale test incidents → table="incident", query="short_descriptionLIKEtest^state=7^sys_created_onRELATIVELT@year@ago@2", dry_run=true

  • Remove obsolete CI records → table="cmdb_ci", query="install_status=7^sys_updated_onRELATIVELT@year@ago@5", dry_run=true

Inputs: table (required), limit, query, dry_run, +1 more.

servicenow_bulk_updateBulk Update RecordsA

Update multiple records matching a query. Dry-run by default — always preview before committing.

Args:

  • table (string): Target table (e.g., incident, change_request)

  • query (string): Encoded query to select records (e.g., 'state=6^resolved_atRELATIVELT@dayofweek@ago@30')

  • data (object): Fields to set on all matched records

  • dry_run (boolean): Preview without applying (default: true). Set false to commit.

  • limit (number): Safety cap — max records to process (default 20, max 100)

  • response_format: Output format

Returns: Preview list (dry_run=true) or per-record success/failure results

Examples:

  • Close all resolved incidents older than 30 days → table="incident", query="state=6^resolved_atRELATIVELT@dayofweek@ago@30", data={"state":"7"}

  • Reassign open tickets to a new group → table="incident", query="assignment_group=OLD_SYS_ID^state!=7", data={"assignment_group":"NEW_SYS_ID"}

  • Set category on unclassified incidents → table="incident", query="category=^state=1", data={"category":"software"}

Inputs: data (required), table (required), limit, query, +2 more.

servicenow_create_changeCreate Change RequestB

Create a new ServiceNow change request.

Args:

  • short_description (string): Brief title (required)

  • type (string): 'standard', 'normal', or 'emergency'

  • description (string): Detailed description/justification

  • implementation_plan (string): Steps to implement the change

  • backout_plan (string): Rollback procedure if change fails

  • test_plan (string): Testing steps

  • start_date (string): Planned start (ISO 8601 or ServiceNow format: '2024-06-01 09:00:00')

  • end_date (string): Planned end

  • assignment_group (string): sys_id of assignment group

  • assigned_to (string): sys_id of assignee

  • priority (number): 1–5

  • risk (number): 1=High, 2=Moderate, 3=Low

  • additional_fields (object): Any additional field-value pairs

Returns: Created change request with number and sys_id

Inputs: short_description (required), risk, type, end_date, +11 more.

servicenow_create_incidentCreate IncidentA

Create a new ServiceNow incident.

Args:

  • short_description (string): One-line summary (required)

  • description (string): Detailed description

  • caller_id (string): sys_id or username of the caller/requester

  • category (string): Category (e.g., 'network', 'hardware', 'software', 'inquiry')

  • subcategory (string): Subcategory

  • priority (number): 1=Critical, 2=High, 3=Moderate, 4=Low, 5=Planning

  • urgency (number): 1=High, 2=Medium, 3=Low

  • impact (number): 1=High, 2=Medium, 3=Low

  • assignment_group (string): sys_id of the assignment group

  • assigned_to (string): sys_id of the assignee

  • additional_fields (object): Any additional field-value pairs

Returns: Created incident with number and sys_id

Inputs: short_description (required), impact, urgency, category, +8 more.

servicenow_create_recordCreate ServiceNow RecordA

Create a new record in any ServiceNow table.

Args:

  • table (string): Target table name

  • data (object): Key-value pairs of field names and their values (use raw values)

  • response_format: Output format

Returns: The newly created record including its sys_id

Examples:

  • Create a problem → table="problem", data={"short_description":"DB slow","assigned_to":"user_sys_id"}

  • Create a task → table="task", data={"short_description":"Review config","state":"1"}

Note: For incidents and change requests, prefer the dedicated tools (servicenow_create_incident, servicenow_create_change).

Inputs: data (required), table (required), response_format.

servicenow_delete_recordDelete ServiceNow RecordA
Destructive

Permanently delete a ServiceNow record by sys_id. This action is irreversible.

Args:

  • table (string): Table name

  • sys_id (string): sys_id of the record to delete

Returns: Confirmation of deletion

⚠️ Destructive: This permanently removes the record. Use only when deletion is explicitly requested.

Inputs: table (required), sys_id (required).

servicenow_discover_tablesDiscover TablesA
Read-onlyIdempotent

Search and list ServiceNow tables by name, label, or scope. Useful for exploring the data model.

Args:

  • search (string): Filter by table name or label

  • scope (string): Filter by application scope prefix (e.g., 'x_company', 'sn_', 'global')

  • extendable_only (boolean): Only tables that can be extended (default: false)

  • limit / offset: Pagination

  • response_format: Output format

Returns: Table names, labels, parent classes, and scopes

Examples:

  • Find all incident-related tables → search="incident"

  • List custom application tables → scope="x_"

  • Find CMDB tables → search="cmdb"

Inputs: limit, scope, offset, search, +2 more.

servicenow_get_attachment_contentGet Attachment ContentA
Read-onlyIdempotent

Download the content of a file attachment by its sys_id.

Args:

  • sys_id (string): sys_id of the attachment (get from servicenow_list_attachments)

  • response_format: Output format

Returns: File content for text files (plain text, XML, JSON, CSV, JS, etc.). Binary files return metadata and a download URL only.

Note: Use servicenow_list_attachments first to find the sys_id of the attachment.

Inputs: sys_id (required), response_format.

servicenow_get_catalog_itemGet Catalog Item DetailsA
Read-onlyIdempotent

Get full details of a service catalog item including its variables/form fields.

Args:

  • identifier (string): Catalog item name (partial match) or sys_id

  • response_format: Output format

Returns: Item details including description, category, variables/questions required to order

Inputs: identifier (required), response_format.

servicenow_get_changeGet Change RequestA
Read-onlyIdempotent

Get full details of a ServiceNow change request by number (CHG...) or sys_id, including implementation, backout, and test plans.

Args:

  • identifier (string): Change number (CHG0001234) or sys_id

  • response_format: Output format

Returns: Complete change request including all planning fields

Inputs: identifier (required), response_format.

servicenow_get_ciGet Configuration ItemA
Read-onlyIdempotent

Get detailed information about a specific CMDB configuration item by name or sys_id.

Args:

  • identifier (string): CI name (exact match or contains) or sys_id

  • class_name (string): CI class to narrow the lookup if name is ambiguous

  • response_format: Output format

Returns: Full CI record including hardware, network, OS, and relationship details

Inputs: identifier (required), class_name, response_format.

servicenow_get_ci_relationshipsGet CI RelationshipsA
Read-onlyIdempotent

Traverse CMDB CI relationships from a starting configuration item. Supports recursive traversal up (dependencies) or down (dependents).

Args:

  • ci_sys_id (string): sys_id of the starting CI

  • direction ('up'|'down'|'both'): 'up' = upstream dependencies, 'down' = downstream dependents, 'both' = full graph (default: 'both')

  • depth (number): How many relationship hops to traverse (1–5, default: 2)

  • response_format: Output format

Returns: Relationship tree with CI names, types, and relationship types. Visits at most 50 unique CIs to prevent runaway traversal.

Examples:

  • What does this server depend on? → ci_sys_id="...", direction="up", depth=2

  • What services use this database? → ci_sys_id="...", direction="down", depth=3

  • Full dependency map → direction="both", depth=2

Inputs: ci_sys_id (required), depth, direction, response_format.

servicenow_get_group_membersGet Group MembersA
Read-onlyIdempotent

Get all members of a ServiceNow user group.

Args:

  • group_identifier (string): Group name, sys_id, or partial name to match

  • limit / offset: Pagination

  • response_format: Output format

Returns: List of users in the group with their names, usernames, and emails

Inputs: group_identifier (required), limit, offset, response_format.

servicenow_get_incidentGet IncidentA
Read-onlyIdempotent

Get full details of a single ServiceNow incident by number (e.g., INC0012345) or sys_id.

Args:

  • identifier (string): Incident number (INC...) or sys_id

  • response_format: Output format

Returns: Complete incident details including description, work notes, and all fields

Inputs: identifier (required), response_format.

servicenow_get_instance_infoGet Instance Health & InfoA
Read-onlyIdempotent

Return instance version, cluster nodes, recent upgrades, and key configuration properties.

No arguments required — returns a health snapshot of the connected ServiceNow instance.

Returns:

  • Build/version info from sys_properties

  • Cluster node status from sys_cluster_state

  • Last 5 upgrade events from sys_upgrade_history

  • Instance name and URL

Inputs: response_format.

servicenow_get_kb_articleGet Knowledge Base ArticleA
Read-onlyIdempotent

Get the full content of a knowledge base article by number (KB...) or sys_id.

Args:

  • identifier (string): Article number (KB0001234) or sys_id

  • response_format: Output format

Returns: Full article content (HTML stripped to plain text) with metadata

Inputs: identifier (required), response_format.

servicenow_get_recordGet ServiceNow RecordA
Read-onlyIdempotent

Retrieve a single ServiceNow record by sys_id from any table.

Args:

  • table (string): Table name (e.g., incident, change_request)

  • sys_id (string): 32-character sys_id GUID of the record

  • fields (string): Comma-separated fields to return. Empty = all fields.

  • display_value ('true'|'false'|'all'): Value display mode (default 'all')

  • response_format: Output format

Returns: The record's field values

Examples:

  • Get a specific incident → table="incident", sys_id="abc123..."

  • Get a CI record → table="cmdb_ci", sys_id="def456..."

Inputs: table (required), sys_id (required), fields, display_value, +1 more.

servicenow_get_table_schemaGet Table SchemaA
Read-onlyIdempotent

Inspect the field definitions (schema) of any ServiceNow table.

Returns field names, types, labels, mandatory flags, max lengths, and reference targets from sys_dictionary.

Args:

  • table (string): Table to introspect (e.g., incident, change_request, cmdb_ci_server)

  • include_inherited (boolean): Include fields inherited from parent tables (default: false — own fields only)

  • filter_type (string): Filter by field type (e.g., 'string', 'integer', 'reference', 'boolean')

  • response_format: Output format

Returns: Field definitions with name, label, type, mandatory, max_length, and reference table (for reference fields)

Examples:

  • Explore incident fields → table="incident"

  • Find all reference fields on change_request → table="change_request", filter_type="reference"

  • Inspect a custom table → table="x_company_myapp_orders"

Inputs: table (required), filter_type, response_format, include_inherited.

servicenow_get_userGet UserA
Read-onlyIdempotent

Get a ServiceNow user by username, email, or sys_id.

Args:

  • identifier (string): Username (jdoe), email (jdoe@company.com), or sys_id

  • response_format: Output format

Returns: Full user record including sys_id, name, email, department, manager, roles

Examples:

  • Get by username → identifier="jdoe"

  • Get by email → identifier="jdoe@example.com"

  • Get by sys_id → identifier="abc123def456..."

Inputs: identifier (required), response_format.

servicenow_list_applicationsList Scoped Applications & PluginsA
Read-onlyIdempotent

List installed ServiceNow scoped applications and active plugins.

Args:

  • search (string): Filter by application name or scope prefix

  • include_global (boolean): Include the global scope app (default: false)

  • active_only (boolean): Only return active applications (default: true)

  • limit / offset: Pagination

  • response_format: Output format

Returns: Applications with name, scope, version, vendor, and status

Examples:

  • List all custom applications → active_only=true, include_global=false

  • Find ITSM-related apps → search="ITSM"

  • Check installed integrations → search="integration"

Inputs: limit, offset, search, active_only, +2 more.

servicenow_list_atf_testsList ATF TestsA
Read-onlyIdempotent

List Automated Test Framework (ATF) tests and test suites available on the instance.

Args:

  • search (string): Filter by test name

  • suite_only (boolean): List test suites only (default: false — lists individual tests)

  • active_only (boolean): Only active tests (default: true)

  • limit / offset: Pagination

  • response_format: Output format

Returns: Test names, descriptions, and sys_ids (needed for servicenow_run_atf_test)

Inputs: limit, offset, search, suite_only, +2 more.

servicenow_list_attachmentsList Record AttachmentsA
Read-onlyIdempotent

List file attachments for a ServiceNow record or query across all attachments.

Args:

  • table_name (string): Table the attachment belongs to (e.g., incident, change_request)

  • table_sys_id (string): sys_id of the specific record. Leave empty to list all attachments for the table.

  • file_name_contains (string): Filter by filename substring

  • limit / offset: Pagination

  • response_format: Output format

Returns: Attachment metadata including filename, content type, size, and download link

Examples:

  • List attachments on INC0001234 → table_name="incident", table_sys_id="<sys_id>"

  • Find all PDFs on change requests → table_name="change_request", file_name_contains=".pdf"

Inputs: table_name (required), limit, offset, table_sys_id, +2 more.

servicenow_list_catalog_itemsList Service Catalog ItemsA
Read-onlyIdempotent

Browse available service catalog items.

Args:

  • query (string): Filter (e.g., 'nameLIKElaptop', 'category.titleLIKEhardware', 'active=true'). Default: all active items.

  • category (string): Filter by category title (partial match)

  • limit / offset: Pagination

  • response_format: Output format

Returns: Catalog items with name, description, category, and price

Examples:

  • Browse hardware items → category="Hardware"

  • Find software requests → query="nameLIKEsoftware"

  • List by category → category="Access & Permissions"

Inputs: limit, query, offset, category, +1 more.

servicenow_list_changesList Change RequestsA
Read-onlyIdempotent

List ServiceNow change requests with filters.

Args:

  • query (string): Encoded query filter. Default shows all non-closed.

  • limit / offset: Pagination

  • response_format: Output format

Common queries:

  • Emergency changes: 'type=emergency^state!=-3'

  • This week's scheduled changes: 'start_date>=javascript:gs.beginningOfThisWeek()'

  • Changes needing approval: 'state=-3'

  • Normal changes in review: 'type=normal^state=0'

Returns: List of change requests with state, type, and schedule

Inputs: limit, query, offset, response_format.

servicenow_list_groupsList GroupsA
Read-onlyIdempotent

List ServiceNow user groups.

Args:

  • query (string): Filter (e.g., 'active=true', 'nameLIKEnetwork', 'type=itil'). Default: active groups.

  • limit / offset: Pagination

  • response_format: Output format

Returns: Groups with name, description, manager, type, and sys_id

Inputs: limit, query, offset, response_format.

servicenow_list_incidentsList IncidentsA
Read-onlyIdempotent

List and search ServiceNow incidents with filters.

Args:

  • query (string): Encoded query (e.g., 'state=1', 'priority=1^assignment_group.name=Service Desk', 'opened_at>=2024-01-01'). Empty = all open incidents.

  • limit (number): Max results (1–100, default 20)

  • offset (number): Pagination offset

  • response_format: 'markdown' or 'json'

Common query examples:

  • All new incidents: 'state=1'

  • My assigned incidents: 'assigned_to=javascript:gs.getUserID()'

  • High priority open: 'priority<=2^state!=7^state!=6'

  • Incidents by group: 'assignment_group.name=Network Operations'

  • Recent (last 7 days): 'opened_at>=javascript:gs.beginningOfLast7Days()'

Returns: List of incidents with state, priority, assignment, and timestamps

Inputs: limit, query, offset, response_format.

servicenow_list_sc_requestsList Service Catalog RequestsA
Read-onlyIdempotent

List service catalog requests (REQ records) with filters.

Args:

  • query (string): Encoded query (e.g., 'opened_by=javascript:gs.getUserID()', 'state=1'). Default: open requests.

  • limit / offset: Pagination

  • response_format: Output format

Request states: 1=Open, 2=Work in Progress, 3=Closed Complete, 4=Closed Incomplete, 7=Closed Skipped

Returns: Requests with number, state, opened_by, and request items

Inputs: limit, query, offset, response_format.

servicenow_list_usersList UsersA
Read-onlyIdempotent

List and search ServiceNow users.

Args:

  • query (string): Encoded query (e.g., 'active=true', 'department.name=IT', 'nameLIKEjohn'). Default: active users only.

  • limit / offset: Pagination

  • response_format: Output format

Common queries:

  • All active users: 'active=true'

  • Search by name: 'nameLIKEsmith'

  • By department: 'department.name=Information Technology'

  • By role: 'roles=itil'

Returns: Users with name, username, email, department, and manager

Inputs: limit, query, offset, response_format.

servicenow_query_logsQuery System LogsA
Read-onlyIdempotent

Query the ServiceNow system log (syslog table) for errors, warnings, and debug messages.

Args:

  • query (string): Encoded query filter (e.g., 'level=3', 'sourceLIKEBusinessRule', 'messageLIKEError')

  • level (string): Minimum log level to include: 'debug'(0), 'info'(1), 'warning'(2), 'error'(3). Default: 'warning'

  • source (string): Filter by log source (e.g., 'BusinessRule', 'ScriptInclude', 'Workflow')

  • since_minutes (number): Only return logs from the last N minutes (default: 60)

  • limit / offset: Pagination

  • response_format: Output format

Log levels: 0=Debug, 1=Info, 2=Warning, 3=Error

Returns: Log entries with timestamp, level, source, and message

Examples:

  • Recent errors → level="error"

  • Business rule failures → source="BusinessRule", level="error"

  • Logs for a specific operation → query="messageLIKEMyScriptInclude"

Inputs: level, limit, query, offset, +3 more.

servicenow_query_recordsQuery ServiceNow TableA
Read-onlyIdempotent

Query records from any ServiceNow table using an encoded query string.

Use this for ad-hoc queries on any table not covered by specialized tools.

Args:

  • table (string): ServiceNow table name (e.g., incident, change_request, sys_user, cmdb_ci)

  • query (string): Encoded query string (e.g., 'state=1^priority=1', 'assigned_to=CURRENT_USER'). Leave empty for all records.

  • fields (string): Comma-separated field list (e.g., 'sys_id,number,short_description'). Empty = all fields.

  • limit (number): Max records to return (1–100, default 20)

  • offset (number): Pagination offset (default 0)

  • display_value ('true'|'false'|'all'): 'all' returns both display values and raw values (default)

  • response_format ('markdown'|'json'): Output format

Returns: List of matching records with pagination metadata

Examples:

  • "Find all P1 incidents" → table="incident", query="priority=1^state!=7"

  • "List active users in IT" → table="sys_user", query="active=true^department.name=IT"

  • "Get open problems" → table="problem", query="state!=4"

Inputs: table (required), limit, query, fields, +3 more.

servicenow_run_atf_testRun ATF TestA

Execute an ATF test or test suite and return the result.

Requires the ATF plugin (com.glide.automated-test-framework) and appropriate role (atf_test_admin or admin).

Args:

  • sys_id (string): sys_id of the test or suite to run (from servicenow_list_atf_tests)

  • is_suite (boolean): True if running a test suite, false for a single test (default: false)

  • browser (string): Browser to run tests in (default: "any"). Options: "any", "chrome", "firefox", "ie", "safari", "edge"

  • response_format: Output format

Returns: Test run result including pass/fail status and individual step results

Note: Test execution is asynchronous. Results may not be immediately available — check sys_atf_result table if the call times out.

Inputs: sys_id (required), browser, is_suite, response_format.

servicenow_search_artifactsSearch Code ArtifactsA
Read-onlyIdempotent

Search across ServiceNow developer artifacts — business rules, script includes, client scripts, UI actions, and scripted REST operations — by name or script content.

Args:

  • search_term (string): Text to search in artifact names and scripts

  • artifact_types (array): Which artifact types to search. Default: all.

    • "business_rule" — sys_business_rule

    • "script_include" — sys_script_include

    • "client_script" — sys_script_client

    • "ui_action" — sys_ui_action

    • "rest_operation" — sys_ws_operation (Scripted REST)

  • table_name (string): Filter by the table the artifact applies to (e.g., 'incident')

  • active_only (boolean): Only return active artifacts (default: true)

  • limit (number): Max results per artifact type (default 10)

  • response_format: Output format

Returns: Matching artifacts with name, type, table, and script preview

Examples:

  • Find all incident business rules → artifact_types=["business_rule"], table_name="incident"

  • Search for a function → search_term="calculatePriority"

  • Find OAuth script includes → search_term="oauth", artifact_types=["script_include"]

Inputs: limit, table_name, active_only, search_term, +2 more.

servicenow_search_ciSearch CMDB Configuration ItemsA
Read-onlyIdempotent

Search for ServiceNow CMDB configuration items (CIs) by name, type, location, or any filter.

Args:

  • query (string): Encoded query (e.g., 'nameLIKEweb-server', 'sys_class_name=cmdb_ci_server', 'location.name=Data Center'). Default: operational CIs.

  • class_name (string): Filter by CI class (e.g., 'cmdb_ci_server', 'cmdb_ci_database', 'cmdb_ci_application', 'cmdb_ci_network_adapter'). Leave empty to search all classes.

  • name_contains (string): Shortcut to filter by name contains

  • limit / offset: Pagination

  • response_format: Output format

Common class names:

  • cmdb_ci_server — Physical/virtual servers

  • cmdb_ci_computer — Workstations/laptops

  • cmdb_ci_app_server — Application servers

  • cmdb_ci_database — Database instances

  • cmdb_ci_web_server — Web servers

  • cmdb_ci_service — Business services

Returns: CI records with name, class, status, assignment, and location

Inputs: limit, query, offset, class_name, +2 more.

servicenow_search_knowledgeSearch Knowledge BaseA
Read-onlyIdempotent

Search the ServiceNow knowledge base for articles by keyword, category, or filter.

Args:

  • search_text (string): Text to search for in article titles and content

  • query (string): Encoded query for additional filters (e.g., 'workflow_state=published', 'category.labelLIKEnetwork')

  • knowledge_base (string): sys_id of a specific knowledge base to search within

  • limit / offset: Pagination

  • response_format: Output format

Returns: Matching KB articles with title, category, author, state, and view count

Examples:

  • Search VPN articles → search_text="VPN"

  • Search published password resets → search_text="password reset", query="workflow_state=published"

  • By category → query="category.labelLIKEsecurity"

Inputs: limit, query, offset, search_text, +2 more.

servicenow_submit_catalog_requestSubmit Service Catalog RequestA

Submit a service catalog request using the ServiceNow Service Catalog API.

Args:

  • catalog_item_sys_id (string): sys_id of the catalog item to order

  • requested_for (string): sys_id of the user this is requested for (default: current user)

  • variables (object): Form variable name→value pairs required by the catalog item (get from servicenow_get_catalog_item)

  • quantity (number): Number of items to request (default: 1)

Returns: Created request number (REQ...) and request item number (RITM...)

Tip: First use servicenow_get_catalog_item to see required variables before submitting.

Inputs: catalog_item_sys_id (required), quantity, variables, requested_for, +1 more.

servicenow_update_changeUpdate Change RequestA

Update a ServiceNow change request's state, plan fields, or assignment.

State transitions:

  • New (-5) → Assess (-4) → Authorize (-3) → Scheduled (-2) → Implement (-1) → Review (0) → Closed (3)

  • Emergency can move more freely

Args:

  • identifier (string): Change number (CHG...) or sys_id

  • state (string): New state value (e.g., '-2' for Scheduled, '-1' for Implement)

  • close_code (string): Required when closing (e.g., 'successful', 'unsuccessful')

  • close_notes (string): Closure notes

  • work_notes (string): Internal work note to add

  • additional_fields (object): Any other field updates

Returns: Updated change request

Inputs: identifier (required), state, end_date, test_plan, +10 more.

servicenow_update_incidentUpdate IncidentA

Update a ServiceNow incident's state, assignment, priority, or any field.

Args:

  • identifier (string): Incident number (INC...) or sys_id

  • state (number): New state — 1=New, 2=In Progress, 3=On Hold, 6=Resolved, 7=Closed

  • resolution_code (string): Required when resolving (e.g., 'Solved (Permanently)')

  • resolution_notes (string): Resolution description (required when resolving)

  • priority (number): New priority (1–5)

  • assignment_group (string): New group sys_id

  • assigned_to (string): New assignee sys_id

  • additional_fields (object): Any other field updates

Returns: Updated incident details

Inputs: identifier (required), state, impact, urgency, +9 more.

servicenow_update_recordUpdate ServiceNow RecordA

Update fields on an existing ServiceNow record by sys_id (PATCH — only specified fields are changed).

Args:

  • table (string): Table name

  • sys_id (string): 32-character sys_id of the record to update

  • data (object): Fields to update with their new values

  • response_format: Output format

Returns: The updated record

Examples:

  • Close a problem → table="problem", sys_id="...", data={"state":"4"}

  • Reassign a task → table="task", sys_id="...", data={"assigned_to":"user_sys_id","assignment_group":"group_sys_id"}

Inputs: data (required), table (required), sys_id (required), response_format.

servicenow_upload_attachmentUpload AttachmentA

Upload a file as an attachment to a ServiceNow record.

Args:

  • table_name (string): Table of the parent record (e.g., incident, change_request)

  • table_sys_id (string): sys_id of the parent record

  • file_name (string): Name for the file (e.g., "report.txt", "screenshot.png")

  • content (string): File content (text for text files, base64 for binary files)

  • content_type (string): MIME type (e.g., "text/plain", "application/json", "image/png")

  • encrypt (boolean): Encrypt the attachment at rest (default: false)

Returns: The created attachment record with sys_id and download link

Examples:

  • Attach a log file to an incident → table_name="incident", table_sys_id="...", file_name="server.log", content="...", content_type="text/plain"

  • Attach JSON config → file_name="config.json", content_type="application/json"

Inputs: content (required), file_name (required), table_name (required), table_sys_id (required), +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 41 tools

    Disambiguation3/5

    There is significant overlap between generic tools (query_records, get_record, create_record, update_record) and specialized tools (list_incidents, get_incident, create_incident, etc.). While descriptions suggest using specialized tools when available, an agent could easily be confused about which tool to call for listing incidents vs. querying the incident table.

    Naming Consistency5/5

    All tools follow a consistent 'servicenow_verb_noun' pattern using snake_case. Verbs like get/list/search/create/update/delete are used predictably across the set, and even compound names like get_ci_relationships follow the same structure.

    Tool Count2/5

    With 41 tools, this server exceeds the recommended threshold for a well-scoped tool set. While the domain is broad, many tools could be consolidated (e.g., generic CRUD already covers core record operations), making the set feel heavy and harder to navigate.

    Completeness4/5

    The tool surface covers major ServiceNow domains (incidents, changes, CMDB, knowledge, catalog, users, groups) plus admin and development tools. Gaps exist for problems, approvals, and knowledge article management, but generic record tools can work around these limitations.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers