servicenow-mcp
An MCP (Model Context Protocol) server that lets Claude interact with a ServiceNow instance. Exposes ServiceNow functionality as tools Claude can call directly from Claude Desktop or any MCP-compatible client.
Requirements
- Python 3.10+
- A ServiceNow instance (developer instance works fine)
- Claude Desktop or another MCP client
Installation
pip install -r requirements.txt
For RAG-based knowledge search (optional):
pip install chromadb sentence-transformers
Configuration
Set the following environment variables (or copy .env.example to .env):
SERVICENOW_INSTANCE_URL=https://your-instance.service-now.com
SERVICENOW_USERNAME=your-username
SERVICENOW_PASSWORD=your-password
# Optional — enables semantic knowledge search
OPENAI_API_KEY=your-openai-key
Choosing a transport
The server supports two transports:
| Transport | When to use | |---|---| | stdio (default) | Claude Desktop — the standard local setup | | http | Cursor, Cline, LangChain, OpenAI Agents SDK, any web client |
Claude Desktop setup
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"servicenow": {
"command": "python",
"args": ["-m", "servicenow_mcp"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password"
}
}
}
}
HTTP transport (Cursor, Cline, LangChain, OpenAI Agents SDK)
Start the server in HTTP mode:
MCP_TRANSPORT=http python -m servicenow_mcp
The MCP endpoint is at http://localhost:8000/mcp.
To require an API key on all requests:
MCP_TRANSPORT=http MCP_API_KEY=your-secret-key python -m servicenow_mcp
Clients must then include Authorization: Bearer your-secret-key in every request.
Cursor / Cline config
{
"mcpServers": {
"servicenow": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-secret-key"
}
}
}
}
Docker + HTTP mode
docker run -p 8000:8000 \
-e MCP_TRANSPORT=http \
-e MCP_API_KEY=your-secret-key \
-e SERVICENOW_INSTANCE_URL=https://your-instance.service-now.com \
-e SERVICENOW_USERNAME=your-username \
-e SERVICENOW_PASSWORD=your-password \
servicenow-mcp
What's included
Tools are grouped into packs by domain:
| Category | Packs | |---|---| | Core development | scripts, dev, background scripts, senior dev | | Data / config | tables, data import/export, update sets, attachments | | ITSM | incidents, changes, problems, requests, approvals | | CMDB / discovery | CMDB, CSDM, discovery, ITAM, ITOM, SAM/HAM | | Workflow | Flow Designer, pipelines, planner | | Integrations | Scripted REST APIs, integration hub | | UI | UI Builder, service catalog, UX | | App development | scoped apps, best practices, naming conventions | | Testing | ATF, troubleshooting | | Knowledge | docs search, knowledge base, RAG search | | Security | governance, impersonation, events |
Running with Docker
If you don't want to deal with Python environments, you can run the server inside Docker instead.
- Make sure you have Docker Desktop installed and running.
- Copy
.env.exampleto.envand fill in your ServiceNow credentials:
cp .env.example .env
# then open .env and set SERVICENOW_INSTANCE_URL, SERVICENOW_USERNAME, SERVICENOW_PASSWORD
- Build and start the container:
docker-compose up --build
The first run will take a minute to download and build everything. After that it's fast.
- To stop it:
docker-compose down
That's it. Logs are saved to a logs/ folder in the project directory.
If you want to use it with Claude Desktop, you still need to run it via
python -m servicenow_mcp(the Claude Desktop integration talks over stdin/stdout, not HTTP). Docker is more useful if you're running this as a standalone service or testing it independently.
Running tests
pytest
Contributing
See CONTRIBUTING.md.
License
MIT — see LICENSE.






