Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sn-mcplist active incidents where the category is network"
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.
sn-mcp
MCP server that gives AI coding assistants read access to a ServiceNow instance — useful when building or debugging ServiceNow apps.
Prerequisites
uv — Python package manager
A ServiceNow instance with a user that has read access to
sys_dictionaryand any tables you want to query
Setup
git clone <this-repo>
cd sn-mcp
cp .env.example .envEdit .env with your instance details:
SN_INSTANCE=https://yourinstance.service-now.com
SN_USERNAME=your_username
SN_PASSWORD=your_passwordAdding to Claude
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"sn-mcp": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/sn-mcp", "sn-mcp"],
"env": {
"SN_INSTANCE": "https://yourinstance.service-now.com",
"SN_USERNAME": "your_username",
"SN_PASSWORD": "your_password"
}
}
}
}You can use either the
envblock above or a.envfile in the repo directory — whichever you prefer.
Claude Code (CLI)
claude mcp add sn-mcp -- uv run --directory /absolute/path/to/sn-mcp sn-mcpThen set credentials in .env or pass them via the env block in .mcp.json.
Tools
Tool | Description |
| Field definitions for any table from |
| Query any table with an encoded query string (e.g. |
| Fetch a single record by sys_id from any table |
Verify it's working
uv run python server.pyOr test the MCP handshake directly:
python3 -c "
import subprocess, json, select
proc = subprocess.Popen(['uv','run','python','server.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def send(msg):
proc.stdin.write((json.dumps(msg)+'\n').encode()); proc.stdin.flush()
ready,_,_ = select.select([proc.stdout],[],[],5)
return json.loads(proc.stdout.readline()) if ready else None
r = send({'jsonrpc':'2.0','id':1,'method':'initialize','params':{'protocolVersion':'2024-11-05','capabilities':{},'clientInfo':{'name':'test','version':'0'}}})
print('server:', r['result']['serverInfo'])
proc.terminate()
"This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.