ServiceNow is large enough that exposing everything is its own problem: clients with tool limits fail to load, and models pick badly from a long list. Setting MCP_TOOL_PACKAGE to a role trims it to what that person actually does, and an invalid name falls back to none rather than silently loading everything. The package definitions are a YAML file you can edit into your own roles.
A ServiceNow bridge covering records, the service catalog, change management, knowledge and scripting, with tool packages so a client only loads the subset a given role needs.
- Incidents — create_incident, update_incident, add_comment, resolve_incident and list_incidents
- Service catalog — list_catalog_items, get_catalog_item, list_catalogs, list_catalog_categories, create_catalog_category, update_catalog_category, move_catalog_items, and the catalog item variable tools
- Catalog optimisation — get_optimization_recommendations and update_catalog_item
- Change management — create_change_request, update_change_request and the rest of the change lifecycle including tasks and approvals
- Knowledge, user and group management, workflow development, script includes and changesets
- Tool packages selected with MCP_TOOL_PACKAGE: service_desk, catalog_builder, change_coordinator, knowledge_author, platform_developer, system_administrator, agile_management, full or none
- list_tool_packages, which reports the available packages and which one is loaded — present in every package except none
- Both stdio and an SSE server exposing /sse and /messages/
Python 3.11 or higher and a ServiceNow instance you have credentials for. A .env file with SERVICENOW_INSTANCE_URL, SERVICENOW_USERNAME, SERVICENOW_PASSWORD and SERVICENOW_AUTH_TYPE — basic, oauth or api_key. Clone and pip install -e, then run the CLI; the SSE server listens on 0.0.0.0:8080 by default and takes --host and --port.
One command plus a key — uvx servicenow-mcp, then supply credentials
