ServiceNow Cowork Automation API
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., "@ServiceNow Cowork Automation APIanalyze incident INC0010001"
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.
ServiceNow Cowork Automation API
FastAPI + MCP-compatible backend for Microsoft 365 Copilot Cowork ServiceNow incident automation.
What this backend does
Receives ServiceNow new-incident webhooks.
Deduplicates automation jobs.
Queues jobs to Azure Service Bus when enabled.
Exposes controlled
/api/cowork/*APIs for Cowork plugin/MCP use.Exposes a remote MCP-compatible
/mcpJSON-RPC endpoint.Applies backend policy checks before ServiceNow or Microsoft Graph actions.
Searches/classifies ServiceNow KB articles.
Performs eligible Microsoft Entra ID password reset/profile update through Graph.
Writes job, policy, KB, and audit records.
Never returns or logs temporary passwords.
Related MCP server: servicenow-api
Local setup
python -m venv .venv
.\.venv\Scripts\activate
pip install -e ".[dev]"
copy .env.example .env
uvicorn app.main:app --reloadTest
pytest -q
pytest --cov=appRequired environment variables
See .env.example.
For local/dev, keep:
SERVICE_BUS_ENABLED=false
GRAPH_ENABLED=false
DATABASE_URL=sqlite+aiosqlite:///./cowork.dbFor Azure, set DATABASE_URL, ServiceNow credentials, Graph settings, and Service Bus settings in App Service/Function App configuration or Key Vault references.
REST examples
Health:
curl http://localhost:8000/healthWebhook:
curl -X POST http://localhost:8000/api/servicenow/webhook/incidents ^
-H "Content-Type: application/json" ^
-H "x-api-key: local-test-key" ^
-d "{\"sys_id\":\"inc-1\",\"number\":\"INC0010001\",\"state\":\"New\",\"category\":\"access\",\"priority\":\"3\",\"short_description\":\"forgot password\"}"Analyze:
curl -X POST http://localhost:8000/api/cowork/incidents/analyze ^
-H "Content-Type: application/json" ^
-H "x-api-key: local-test-key" ^
-d "{\"incident_sys_id\":\"inc-1\",\"authenticated_user_upn\":\"user@contoso.com\"}"MCP initialize:
curl -X POST http://localhost:8000/mcp ^
-H "Content-Type: application/json" ^
-d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{}}"List MCP tools:
curl -X POST http://localhost:8000/mcp ^
-H "Content-Type: application/json" ^
-d "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/list\",\"params\":{}}"Safety model
Cowork should mainly call:
analyze_incidentrun_incident_automationget_automation_job_status
The backend remains the final trust boundary for identity, policy, VIP/admin/security exclusions, KB safety classification, and Graph actions.
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.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/FarhanAkhtar46/foundry-agent-sn-automation-backend'
If you have feedback or need assistance with the MCP directory API, please join our Discord server