PagerDuty Workflow Automation MCP Server
Provides tools for interacting with PagerDuty Workflow Automation (formerly Catalytic) to list workflows, trigger runs with input fields, check instance status, and abort running instances.
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., "@PagerDuty Workflow Automation MCP ServerStart the 'Customer Renewal' workflow for Acme with high priority."
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.
PagerDuty Workflow Automation MCP Server
Unofficial MCP server for PagerDuty Workflow Automation (formerly Catalytic). This project is not affiliated with, endorsed by, or supported by PagerDuty. It uses the legacy Catalytic v1 API that PagerDuty may change or remove at any time. Use at your own risk.
MCP server that connects Claude to PagerDuty Workflow Automation (formerly Catalytic). Lets Claude find processes (workflows), trigger runs with input fields, and check or abort running instances.
Requires username/password login. SSO teams are not supported. The v1 API authenticates with a user key obtained by posting a username and password, and there is currently no working way to get that key on a team that logs in through SSO. See Authentication for details.
Built against the Catalytic internal v1 API (swagger spec in the local legacy_api/ folder, which is gitignored since it is internal PagerDuty documentation). Base URL is https://<team>.pushbot.com/v1 and every request authenticates with an x-user-key header.
Setup
pip install -r requirements.txt
cp .env.example .envGet your User Key:
python3 get_token.pyIt POSTs your username and password to /v1/teams/<team>/auth (you type them locally, they go only to your team's endpoint) and prints the CATALYTIC_USER_KEY and CATALYTIC_TEAM lines to paste into .env, using vi .env.
Related MCP server: ServiceNow MCP Server
Authentication
Every request carries an x-user-key header holding a 64-character user key. The only known way to obtain one is POST /v1/teams/<team>/auth with a username and password, which is what get_token.py does.
SSO teams do not work today. If your team logs in through an identity provider, that endpoint rejects your credentials and there is no substitute. Approaches that were tried and failed:
Access tokens created in the web UI. These are a different credential format (a ~180-character serialized token). They are rejected by the v1 API as an
x-user-key, and rejected as a Bearer token by the newer/apisurface.The user-token request/approve/poll endpoints documented in the swagger spec (
POST /teams/<team>/user-tokens,:approve,:poll). Only partially deployed: creation works, but polling returns 401 and approve/revoke/list return 404.Copying the key out of the web app. The current web UI no longer uses the v1 API. It authenticates with a
catalytic.sidsession cookie against a GraphQL endpoint, so nox-user-keyheader ever appears in its traffic.Reusing the browser session. The v1 API ignores session cookies and returns 403 without the header.
Capturing the key from the SAML exchange. The spec's
saml-authschema shows auserKeyin the response toPOST /saml/auth, but on current deployments that request returns a 302 with no key in the redirect.
If you find a working method on an SSO team, please open an issue.
Use with Claude Code
The included .mcp.json registers the server for this project automatically. To register it globally instead:
claude mcp add "PagerDuty Workflow Automation" -- python3 /path/to/pagerduty-wfa-mcp-server/server.pyUse with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"PagerDuty Workflow Automation": {
"command": "python3",
"args": ["/path/to/pagerduty-wfa-mcp-server/server.py"]
}
}
}Multiple teams
The server can hold credentials for several teams at once. Copy config.json.example to config.json (gitignored) next to server.py:
{
"default": "my-team",
"teams": {
"my-team": "<userKey>",
"other-team": "<userKey>"
}
}Every tool accepts an optional team argument; when omitted, the default team is used. In Claude you can just say "list the workflows on other-team" and the right credentials are used. When there is no config.json, the server falls back to the single-team CATALYTIC_TEAM/CATALYTIC_USER_KEY values in .env.
Tools
Every tool takes an optional team. API paths below are relative to /v1/teams/{team}.
Tool | API call | Purpose |
| (local) | Show configured teams and the default |
|
| Search processes, runs, tasks, users, and tables by name |
|
| Data tables on the team |
Workflows (processes):
Tool | API call | Purpose |
|
| List processes, filter by category, owner, published |
|
| Process details, including expected fields |
|
| The steps that make up a process |
|
| One step's configuration |
|
| Processes this one can start |
|
| Processes that can start this one |
|
| Data tables tied to a process |
Runs (instances):
Tool | API call | Purpose |
|
| Trigger a run with optional name, description, and inputs |
|
| Status, tasks, and progress of a run |
|
| Field values of a run |
|
| Search runs by owner, status, or date range |
|
| Runs of one specific process |
|
| Tasks in a run, with status and assignees |
|
| One task, including failure detail |
|
| Execution log, for diagnosing failures |
|
| Comments on a run |
|
| Post a comment, visible to everyone with access |
|
| Complete a task and advance the workflow |
|
| Set one field on a run |
|
| Abort a running instance |
Triggers and webhooks:
Tool | API call | Purpose |
|
| All triggers on the team |
|
| Triggers on one process |
|
| Webhooks on one process |
Users:
Tool | API call | Purpose |
|
| Users on the team |
|
| One user by username, email, or ID |
|
| Change user fields, including deactivation |
|
| Destructive. Permanently removes a user |
start_workflow takes inputs as a plain dict of field names to values:
start_workflow(
process_id="8bf3db91-a8b2-4e34-aade-38c08a49170e",
name="Renewal for Acme",
inputs={"customer-name": "Acme", "priority": "High"}
)API notes
Run statuses:
running,completed,failed,aborted.The swagger spec does not formally define the
POST /runsrequest body; the server sends{processID, displayName, description, fields: [{fieldName, value}]}based on the run schema's writable fields. If the API rejects it, compare against a request the web UI makes (browser dev tools, Network tab) and adjuststart_workflowin server.py.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables Claude Code to browse, create, edit, and publish Pulse workflows by exposing workflow operations as MCP tools.Last updated36MIT
- Alicense-qualityCmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API, supporting record management, service catalog operations, change management, and more via natural language.Last updatedMIT
- Alicense-qualityDmaintenanceEnables AI assistants to manage PagerDuty incidents, view alerts, and check on-call schedules with both read-only and write operations.Last updatedApache 2.0
- Flicense-qualityCmaintenanceConnects Claude to your Freshservice ITSM instance, enabling management of tickets, changes, assets, knowledge base, and more through natural language.Last updated1
Related MCP Connectors
Connect Claude to Fathom meeting recordings, transcripts, and summaries
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Create, test, publish, and manage Dreamlit notification workflows from AI clients.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mattlinebarger/pagerduty-wfa-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server