# ServiceNow MCP Server

Hooks your assistant up to ServiceNow: query any table, read schemas and CMDB, inspect update sets. Runs against a free developer instance.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 26
- Author: jschuller
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/jschuller/mcp-server-servicenow
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/servicenow-mcp-server

## What it does

The server opens ServiceNow's developer data plane to an AI client: Table API, data dictionary, aggregates through Stats API, CMDB and update sets. `uvx mcp-server-servicenow` launches it without a prior install. Both stdio and streamable-http transports are available, and auth can be basic, OAuth or api_key. ServiceNow releases from Tokyo onward are listed as supported.

You connect with a dedicated integration user rather than `admin`. New instances reject REST basic auth for `admin`, and the server needs far less anyway. The setup described in the repo: create a user with Identity type Machine, mark it Internal Integration User, assign `itil` and `snc_read_only`. That covers incidents, changes, problems, CMDB and aggregates but keeps the user read-only. Schema, update sets and writes ask for extra roles.

You also need `uv` on the machine, since `uvx` pulls the server through it. For Claude a plugin variant bundles four skills as slash commands and reuses the `SERVICENOW_*` variables from the shell you launched it in. With a wrong `SERVICENOW_INSTANCE_URL` or password, nothing reaches the instance.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `SERVICENOW_INSTANCE_URL`, `SERVICENOW_AUTH_TYPE`, `SERVICENOW_USERNAME`, `SERVICENOW_PASSWORD`, `SERVICENOW_CLIENT_ID`, `SERVICENOW_CLIENT_SECRET`, `SERVICENOW_API_KEY`, `SERVICENOW_API_KEY_HEADER`, `SERVICENOW_TOKEN_URL`, `SERVICENOW_TIMEOUT` — keys and tokens: ask the human for the values, never commit them or put them in shared files.
- Works with: ServiceNow

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env SERVICENOW_INSTANCE_URL=<SERVICENOW_INSTANCE_URL> --env SERVICENOW_AUTH_TYPE=<SERVICENOW_AUTH_TYPE> --env SERVICENOW_USERNAME=<SERVICENOW_USERNAME> --env SERVICENOW_PASSWORD=<SERVICENOW_PASSWORD> --env SERVICENOW_CLIENT_ID=<SERVICENOW_CLIENT_ID> --transport stdio servicenow-mcp-server -- uvx mcp-server-servicenow
```
Replace <…> with your own values. 9 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from mcp-server-servicenow <command>

### Codex

**Platform CLI**
```bash
codex mcp add servicenow-mcp-server --env SERVICENOW_INSTANCE_URL=<SERVICENOW_INSTANCE_URL> --env SERVICENOW_AUTH_TYPE=<SERVICENOW_AUTH_TYPE> --env SERVICENOW_USERNAME=<SERVICENOW_USERNAME> --env SERVICENOW_PASSWORD=<SERVICENOW_PASSWORD> --env SERVICENOW_CLIENT_ID=<SERVICENOW_CLIENT_ID> -- uvx mcp-server-servicenow
```
Replace <…> with your own values. 9 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from mcp-server-servicenow <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "servicenow-mcp-server": {
            "command": "uvx",
            "args": [
                "mcp-server-servicenow"
            ],
            "env": {
                "SERVICENOW_INSTANCE_URL": "<SERVICENOW_INSTANCE_URL>",
                "SERVICENOW_AUTH_TYPE": "<SERVICENOW_AUTH_TYPE>",
                "SERVICENOW_USERNAME": "<SERVICENOW_USERNAME>",
                "SERVICENOW_PASSWORD": "<SERVICENOW_PASSWORD>",
                "SERVICENOW_CLIENT_ID": "<SERVICENOW_CLIENT_ID>"
            }
        }
    }
}
```
Replace <…> with your own values. 9 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from mcp-server-servicenow <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "servicenow-mcp-server": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "mcp-server-servicenow"
            ],
            "env": {
                "SERVICENOW_INSTANCE_URL": "<SERVICENOW_INSTANCE_URL>",
                "SERVICENOW_AUTH_TYPE": "<SERVICENOW_AUTH_TYPE>",
                "SERVICENOW_USERNAME": "<SERVICENOW_USERNAME>",
                "SERVICENOW_PASSWORD": "<SERVICENOW_PASSWORD>",
                "SERVICENOW_CLIENT_ID": "<SERVICENOW_CLIENT_ID>"
            }
        }
    }
}
```
Replace <…> with your own values. 9 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from mcp-server-servicenow <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e SERVICENOW_INSTANCE_URL=<SERVICENOW_INSTANCE_URL> -e SERVICENOW_AUTH_TYPE=<SERVICENOW_AUTH_TYPE> -e SERVICENOW_USERNAME=<SERVICENOW_USERNAME> -e SERVICENOW_PASSWORD=<SERVICENOW_PASSWORD> -e SERVICENOW_CLIENT_ID=<SERVICENOW_CLIENT_ID> servicenow-mcp-server uvx mcp-server-servicenow
```
Replace <…> with your own values. 9 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from mcp-server-servicenow <command>

## When to use it
- list the fields of `cmdb_ci_server`, inherited ones included
- find admin holders and roles granted directly instead of via a group
- review an update set before promoting it
- spot server CIs with no IP address or no owner
- count open incidents per assignment group

## Example prompts
- List the fields of `cmdb_ci_server`, inherited ones included.
- Review the 'Q3 fixes' update set before I promote it.

## Similar
- [ServiceNow MCP Server (NowAIKit)](https://affpapa.org/en/nevibecode/mcp/servicenow-mcp-server-nowaikit.md) — MCP server · ★ 264
- [ServiceNow](https://affpapa.org/en/nevibecode/mcp/servicenow.md) — MCP server · ★ 13
- [servicenow-nodejs](https://affpapa.org/en/nevibecode/mcp/servicenow-nodejs.md) — MCP server · ★ 56
- [service-itsm-agentic-setup-cmdb-bundle-deploy](https://affpapa.org/en/nevibecode/skills/service-itsm-agentic-setup-cmdb-bundle-deploy.md) — skill · 1700 installs
- [service-itsm-agentic-setup-cmdb-coordinate](https://affpapa.org/en/nevibecode/skills/service-itsm-agentic-setup-cmdb-coordinate.md) — skill · 1700 installs
- [dt-alerting](https://affpapa.org/en/nevibecode/skills/dt-alerting.md) — skill · 1800 installs

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
