Mcp Servicenow Nodejs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Servicenow Nodejs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="https://happy-tech.biz/images/logo.svg" alt="Happy MCP Server" width="120" height="120"> </p>
<h1 align="center">Happy MCP Server</h1>
<p align="center"> <strong>Model Context Protocol Server for the ServiceNow® Platform</strong></p>
<p align="center"> A metadata-driven MCP server that auto-generates 480+ tools across 160+ tables, with multi-instance support, natural language search, and local script development. </p>
<p align="center"> <a href="https://www.npmjs.com/package/happy-platform-mcp"><img src="https://img.shields.io/npm/v/happy-platform-mcp.svg?style=flat-square" alt="npm version"></a> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square" alt="License: Apache 2.0"></a> <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg?style=flat-square" alt="Node.js Version"></a> </p>
<p align="center"> <a href="https://happy-tech.biz">Website</a> | <a href="https://github.com/Happy-Technologies-LLC/happy-platform-mcp">GitHub</a> | <a href="https://www.npmjs.com/package/happy-platform-mcp">npm</a> | <a href="#tool-overview">Tools</a> | <a href="CONTRIBUTING.md">Contributing</a> </p>
Migrating from `servicenow-mcp-server`? The npm package has been renamed tohappy-platform-mcpand the Docker image tonczitzer/happy-platform-mcp. The old names are deprecated but will continue to work temporarily. Update your dependencies: ```bash # npm npm uninstall servicenow-mcp-server && npm install happy-platform-mcp
>
# Docker docker pull nczitzer/happy-platform-mcp:latest ```
sys_triggernpx happy-platform-mcpOr install globally:
npm install -g happy-platform-mcpgit clone https://github.com/Happy-Technologies-LLC/happy-platform-mcp.git
cd happy-platform-mcp
npm installOption A: Multi-Instance (Recommended)
cp config/servicenow-instances.json.example config/servicenow-instances.jsonEdit config/servicenow-instances.json:
{
"instances": [
{
"name": "dev",
"url": "https://dev123456.service-now.com",
"username": "admin",
"password": "your-password",
"default": true
},
{
"name": "prod",
"url": "https://prod789012.service-now.com",
"authType": "oauth",
"grantType": "client_credentials",
"clientId": "your-oauth-client-id",
"clientSecret": "your-oauth-client-secret"
}
]
}Each instance can use "authType": "basic" (default) or "authType": "oauth". OAuth instances require clientId and clientSecret from your ServiceNow OAuth Application Registry. See Authentication for details.
Option B: Single Instance (via Environment)
cp .env.example .env
# Edit .env with your credentials# HTTP/SSE transport
npm run dev
# Stdio transport (for Claude Desktop)
npm run stdiocurl http://localhost:3000/health
curl http://localhost:3000/instancesAll tools accept an optional instance parameter:
// Uses default instance
SN-List-Incidents({ "limit": 10 })
// Routes to a specific instance
SN-List-Incidents({ "instance": "prod", "limit": 10 })| Category | Tools | Description |
|---|---|---|
| Generic CRUD | 7 | Query, Create, Get, Update on any table |
| Specialized ITSM | 8 | Incident, Change, Problem convenience wrappers |
| Convenience | 10 | Add-Comment, Add-Work-Notes, Assign, Resolve, Close |
| Natural Language | 1 | Query using plain English |
| Update Sets | 6 | Set, list, move, clone, inspect update sets |
| Scripts | 2 | Execute background scripts, create fix scripts |
| Script Sync | 3 | Sync scripts with local files, watch mode |
| Workflows | 4 | Create workflows, activities, transitions |
| Batch | 2 | Batch create/update across tables |
| Schema | 3 | Table schemas, field info, relationships |
| Service Catalog | 4 | Browse, inspect, and submit catalog forms |
| ServiceNow Docs | 5 | Discover, sync, search, and retrieve official ServiceNowDocs markdown |
| Resources | 8 | Read-only URIs for table lists, field info |
// Query with filtering
SN-Query-Table({ "table_name": "incident", "query": "active=true^priority=1", "limit": 10 })
// Create a record
SN-Create-Incident({ "short_description": "Email service down", "urgency": 1 })
// Natural language search
SN-NL-Search({ "table_name": "incident", "query": "high priority incidents assigned to me" })
// Background script execution (automated via sys_trigger)
SN-Execute-Background-Script({ "script": "gs.info('Hello');" })
// Update set management
SN-Set-Update-Set({ "update_set_sys_id": "abc123..." })
// Batch operations
SN-Batch-Update({ "updates": [{ "table": "incident", "sys_id": "id1", "data": {...} }] })
// Service Catalog AI-submission workflow
SN-Catalog-Search-Items({ "keyword": "VPN access" })
SN-Catalog-Get-Item({ "sys_id": "<catalog_item_sys_id>" })
SN-Catalog-Submit({ "sys_id": "<catalog_item_sys_id>", "variables": { "requested_for": "jsmith", "justification": "Project X" } })
// ServiceNow Docs local search workflow
SN-Docs-Families({})
SN-Docs-Sync({ "family": "australia" })
SN-Docs-Search({ "query": "create a Flow Designer action", "family": "australia" })Develop scripts locally with version control and automatic sync:
// Download script to local file
SN-Sync-Script-To-Local({
"script_sys_id": "abc123...",
"local_path": "/scripts/business_rules/validate_incident.js"
})
// Watch for changes and auto-sync
SN-Watch-Script({
"local_path": "/scripts/business_rules/validate_incident.js",
"script_sys_id": "abc123..."
})SN-NL-Search({
"table_name": "incident",
"query": "active high priority incidents that are unassigned"
})Supports 15+ patterns including field comparisons, text searches, date ranges, logical operators, and ordering.
Happy MCP can retrieve official ServiceNowDocs markdown directly from GitHub and optionally localize a docs family into a SQLite FTS5 index for fast local search. Local indexing is disabled by default; enable it with docs.localIndexEnabled=true in config/servicenow-instances.json or HAPPY_DOCS_ENABLE_LOCAL_INDEX=true.
SN-Docs-Families({})
SN-Docs-Status({})
SN-Docs-Sync({ "family": "australia" })
SN-Docs-Search({ "query": "update set best practices", "family": "australia", "limit": 5 })
SN-Docs-Get({ "family": "australia", "path": "platform/example.md" })SQLite local indexing is optional and disabled by default. Vector search is also optional; enable local indexing, set HAPPY_DOCS_ENABLE_VECTOR=true, and use HAPPY_DOCS_EMBEDDING_PROVIDER=local to build a sqlite-vec index with deterministic local embeddings. See ServiceNow Docs Search.
For docs-only deployments without ServiceNow credentials, set HAPPY_MCP_DOCS_ONLY=true. If no config file or ServiceNow environment credentials are present, the stdio server falls back to docs-only mode automatically.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Basic Auth:
{
"mcpServers": {
"happy-mcp-server": {
"command": "npx",
"args": ["-y", "happy-platform-mcp"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password"
}
}
}
}OAuth:
{
"mcpServers": {
"happy-mcp-server": {
"command": "npx",
"args": ["-y", "happy-platform-mcp"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password",
"SERVICENOW_AUTH_TYPE": "oauth",
"SERVICENOW_CLIENT_ID": "your-client-id",
"SERVICENOW_CLIENT_SECRET": "your-client-secret"
}
}
}
}Or if installed from source, use "command": "node" with "args": ["/path/to/happy-platform-mcp/src/stdio-server.js"] and "cwd": "/path/to/happy-platform-mcp".
For multi-instance configurations, use config/servicenow-instances.json instead of environment variables. See Configure Instances.
Restart Claude Desktop after editing the config.
Happy MCP Server supports two authentication methods per instance. Both can coexist — instance A can use basic auth while instance B uses OAuth.
No extra configuration needed. Provide username and password:
{
"name": "dev",
"url": "https://dev123456.service-now.com",
"username": "admin",
"password": "your-password",
"default": true
}Supports both Client Credentials (recommended) and Resource Owner Password Credentials grant types. Tokens are automatically requested, cached, and refreshed.
Client Credentials (recommended) — no user credentials needed, ideal for service-to-service integrations and federated identity environments:
{
"name": "prod",
"url": "https://prod789012.service-now.com",
"authType": "oauth",
"grantType": "client_credentials",
"clientId": "your-oauth-client-id",
"clientSecret": "your-oauth-client-secret"
}Resource Owner Password Credentials — for cases where user context is required:
{
"name": "staging",
"url": "https://staging.service-now.com",
"authType": "oauth",
"grantType": "password",
"clientId": "your-oauth-client-id",
"clientSecret": "your-oauth-client-secret",
"username": "integration_user",
"password": "your-password"
}If grantType is omitted, it defaults to client_credentials when no username is provided, or password when username is present.
ServiceNow setup:
How it works:
/oauth_token.doThe scope field is optional and defaults to ServiceNow's standard scope.
src/
├── server.js # Express HTTP server (SSE transport)
├── stdio-server.js # Stdio transport (Claude Desktop)
├── mcp-server-consolidated.js # MCP tool registration & routing
├── servicenow-client.js # REST API client
└── config-manager.js # Multi-instance configuration
config/
└── servicenow-instances.json # Instance configuration
docs/
├── API_REFERENCE.md # Complete tool reference
├── SETUP_GUIDE.md # Detailed setup instructions
└── research/ # Technical research & discoveries# Run tests
npm test
# Watch mode
npm run test:watch
# Coverage
npm run test:coverage
# MCP Inspector
npm run inspector# Test connectivity to your ServiceNow instance
curl -u username:password https://your-instance.service-now.com/api/now/table/incident?sysparm_limit=1
# Check server health
curl http://localhost:3000/healthconfig/servicenow-instances.json is valid JSON with one "default": true instance. Restart after changes.docs/SSE_SETUP_GUIDE.md.DEBUG=true npm run devSee docs/MCP_Tool_Limitations.md for details.
This project was inspired by the Echelon AI Labs ServiceNow MCP Server. We are grateful for their pioneering work in bringing MCP capabilities to the ServiceNow® platform.
See CONTRIBUTING.md for guidelines. All contributors must sign a CLA.
To report a vulnerability, see SECURITY.md. Do not open public issues for security concerns.
Licensed under the Apache License 2.0.
Copyright 2025 Happy Technologies LLC
ServiceNow® is a registered trademark of ServiceNow, Inc. "Now" is a registered trademark of ServiceNow, Inc. All ServiceNow® product names, logos, and brands are property of ServiceNow, Inc.
Model Context Protocol (MCP) is an open standard created by Anthropic, PBC. "Claude" is a trademark of Anthropic, PBC.
Happy MCP Server is an independent, community-driven project. It is not affiliated with, endorsed by, or sponsored by ServiceNow, Inc. or Anthropic, PBC. This project provides tooling that connects to ServiceNow® instances via their published REST APIs, and implements the open MCP specification. It is not a competitor to any ServiceNow® product or service.
All other trademarks are the property of their respective owners. See NOTICE for full attribution.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.