NewAgent Observability is live.
Back to directory
PagerDuty logo

PagerDuty MCP server: 101 tools, read-only at 63 by default

PagerDuty starts safer than most connectors. One transport setting removes that protection.

Connector
Official, local only
Coverage
Incidents, schedules, escalation, services, status pages
Tools
101 available, 63 read-only by default
Biggest risk for an agent
HTTP transports have no authentication

Last verified 1 September 2026 · from PagerDuty's repository, its documentation and the server's own tools/list response

This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.

Summary

PagerDuty publishes an official MCP server that runs locally. It starts read-only, which most connectors in this guide do not.

63 of its 101 tools are available by default. The 38 that change your PagerDuty account need --enable-write-tools, which is a deliberate step rather than a default.

On streamable HTTP or SSE the endpoint has no authentication, and every request uses the single API key the server started with.

What is the PagerDuty MCP server?

It is PagerDuty's server for the Model Context Protocol. The agent gains tools for reading incidents, schedules, escalation policies and services.

It runs on your machine. There is no authenticated hosted endpoint, so the server holds a PagerDuty user API key and acts with that user's permissions.

Read-only is the default state rather than a flag you remember to set. Write tools are absent from the tool list entirely until the server is started with --enable-write-tools, so an agent cannot call one by accident.

PagerDuty covers production observability partially through incident response, and reaches nothing in code review, release, agent observability or cost.

Part of the workWhat PagerDuty has hereCan an agent reach it
Code, tests & reviewNoneNo code-review product
CI & releaseChange eventsPartial. Change events record that a deploy happened, which is release context rather than a pipeline
Production observabilityIncidents, alerts, escalation, on-call schedulesPartial. Specific. PagerDuty holds the human response to an outage, not the telemetry that detected it
Agent observability & evalsNoneNo traces, evaluations or prompt versioning for your own agents
AI cost managementNoneNo token or model spend data

For an agent, PagerDuty answers questions about who was paged and what happened next, and nothing about why the system broke. An agent connected here can tell you which service alerted, who was on call and how long acknowledgement took. It cannot show you the failing query behind it, so this connector sits beside a telemetry one.

What can an AI agent do with PagerDuty?

TaskToolsWorksWatch out for
Understand a live incidentget_incident list_incidents get_alert_from_incidentYesIncident detail, not the underlying telemetry
Find who is on call nowlist_oncalls get_escalation_policy list_schedulesYesOverrides matter; read the schedule rather than the rotation alone
Review how a service is configuredget_service list_services get_business_service_dependenciesYesDependencies are what someone declared, not what the system does
Check what changed before the pageget_change_event list_change_eventsYesOnly present if your pipeline sends change events to PagerDuty
Analyze response performancelist_log_entries list_alerts_from_incidentYesLog entries are the incident timeline, not application logs
Acknowledge or resolve an incidentEnable --enable-write-tools manage_incidents add_note_to_incident add_respondersYesAbsent by default. Enabling writes adds 38 tools, including create_incident
Explain why the service degradedNoNo tool covers this. PagerDuty records the response, not the cause, so there are no metrics, logs or traces

The write row behaves differently from the read rows. Its tools are not disabled but absent: on a default connection they are not in tools/list at all, so an agent cannot see them, describe them or call them.

101 tools registered, of which 63 need no write flag

Incidents6
get_incidentlist_incidentsget_alert_from_incidentlist_alerts_from_incidentget_past_incidentsget_related_incidents
Incidents, write4
create_incidentmanage_incidentsadd_note_to_incidentadd_responders
On call3
list_oncallslist_schedulesget_escalation_policy
Schedules, write3
create_schedulecreate_schedule_overridecreate_schedule_v3_rotation
Services3
get_servicelist_servicesget_business_service_dependencies
Change and analytics4
get_change_eventlist_change_eventsget_incident_metrics_allget_incident_metrics_by_service
Timeline2
get_log_entrylist_log_entries
Teams and users, write3
create_teamcreate_useradd_team_member

The write groups are absent from tools/list entirely unless the server is started with --enable-write-tools, so an agent on a default connection cannot see or describe them. Of the 101 registered, 28 are named here. Counted from the server's own response on 19 August 2026, captured twice.

What connecting costs before the first question

A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.

Enabling writes here is expensive twice over. It adds 38 tools that can change your on-call configuration, and it takes the connector from roughly 6% of a 200,000-token window to roughly 16%.

Tool setToolsTokens (GPT-5.6, GPT-5.5)Tokens (GPT-4, GPT-3.5)Tokens (Claude Haiku 4.5 to Opus 5)Share of a 200,000-token window
Read-only, the default6312,695 to 19,28712,371 to 19,30417,684 to 23,0636.2% to 11.5%
With --enable-write-tools10131,904 to 48,12931,058 to 48,20943,430 to 57,72915.5% to 28.9%

Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 19 August 2026 from tools/list on pagerduty-mcp 1.1.0, run locally with a placeholder key. It ran once with defaults and once with --enable-write-tools.

Registration is static, so no PagerDuty account was involved. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 52%. Reasoning tokens are output, spent per request. The tool list is input, charged once at connection.

The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer, so the definitions were sent to the API's count_tokens endpoint and a no-tools baseline subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end, Opus 5 and Sonnet 5 at the high end. The gap between them is about a third.

PagerDuty MCP server limits: where answers come back incomplete

PagerDuty documents every limit below. The first is the sharpest, and it appears as a warning in the repository's own README.

The agent says: The server is running locally, so it is private. On HTTP transports it is open to anything that can reach the port.

PagerDuty states it plainly: when running streamable-http or sse, the MCP endpoint is exposed with no authentication, and every request uses the single PAGERDUTY_USER_API_KEY the server was started with.

Any client that can reach the host and port can invoke tools with that key's full PagerDuty privileges. If the server was also started with --enable-write-tools, that includes creating incidents and changing schedules.

Guard: Use stdio unless you have a specific reason not to. If you need HTTP, bind it to localhost and put an authenticating proxy in front of it.

The agent says: I have no tool for acknowledging an incident. Correct, and that is the default.

The server exposes read-only tools unless started with --enable-write-tools. The 38 write tools are not listed at all in the default state, so the agent is telling the truth about what it can see.

This is the safer failure. An agent that cannot see a tool cannot call it by mistake, which is a stronger guarantee than a tool that exists and is discouraged.

Guard: Keep the default for investigation. Start a separate server with writes enabled only for a session where changing PagerDuty is the point.

The agent says: Nothing changed before the incident. Nothing was sent to PagerDuty.

Change events exist only if your deployment pipeline sends them. A pipeline that never integrated produces a real, empty answer, and the response does not distinguish that from a quiet period.

Guard: Confirm the change-events integration exists before treating an empty result as evidence that nothing shipped.

How to configure PagerDuty MCP for agents

  1. 1

    Keep the read-only default

    Write tools are omitted from the tool list rather than disabled, which is a stronger guarantee than a flag an agent is asked to respect. Start a separate server with --enable-write-tools only for a session where changing PagerDuty is the point.

  2. 2

    Use stdio unless you have a reason not to

    On streamable-http or sse the endpoint has no authentication at all, and every request uses the single API key the server started with.

  3. 3

    Scope the key to a user

    PAGERDUTY_USER_API_KEY is a user token, so the agent inherits that user's permissions across every team and service they can reach.

  4. 4

    Budget the context

    Read-only costs about 12,695 tokens, roughly 6% of a 200,000-token window. Enabling writes takes it to about 31,904, roughly 16%.

Paste this into your agent’s instructions

PagerDuty's silent failure is absence rather than truncation: change events that were never sent, and write tools that are not there. The block makes the agent distinguish an empty result from an unconfigured integration.

Terminal
When you answer using PagerDuty MCP tools, state:
- Whether write tools are available in this session. They are
  absent unless the server was started with --enable-write-tools.
- The time window you searched, and the service or team scope.
- Whether change events exist for the period. They appear only
  if a pipeline sends them, so an empty result is not evidence
  that nothing shipped.
Never state that data does not exist. State that none was
returned under the constraints above.
Write your answer in ASD-STE100 Simplified Technical
English. Use short sentences with one idea in each.

Do you need the MCP server at all?

Sometimes. PagerDuty's REST API is well documented and a coding agent can call it with the same user API key, which is what the server does underneath.

The server earns its place through the read-only default and the tool descriptions. Raw API calls give you the same safety only if you build the allowlist yourself. An agent choosing endpoints without descriptions chooses less well.

The trade is context. 63 tool definitions cost roughly 6% of a window before the agent asks anything, where a curated set of three or four API calls costs nothing.

Connect the server for open-ended incident investigation. Call the API directly when the question is fixed and you want the context back.

PagerDuty MCP server setup

The server runs locally from PyPI or Docker. It needs a PagerDuty user API key in PAGERDUTY_USER_API_KEY, and PAGERDUTY_API_HOST if your account is not on the default host.

There is no hosted endpoint, so every user runs a process holding that key.

Claude Code, read-only

This is the default state: the 38 write tools are simply not registered.

Terminal
claude mcp add-json "pagerduty" '{"command":"uvx",
  "args":["pagerduty-mcp"],
  "env":{"PAGERDUTY_USER_API_KEY":"<your-key>"}}'

Cursor

In ~/.cursor/mcp.json for all projects, or .cursor/mcp.json in one.

Terminal
{"mcpServers":{"pagerduty":{"command":"uvx",
  "args":["pagerduty-mcp"],
  "env":{"PAGERDUTY_USER_API_KEY":"<your-key>"}}}}

Codex CLI

Codex reads TOML, so the JSON blocks above will not transfer.

Terminal
[mcp_servers.pagerduty]
command = "uvx"
args = ["pagerduty-mcp"]
env = { PAGERDUTY_USER_API_KEY = "<your-key>" }

Every other client

Each block below is the configuration for one client, with the file path and the key that client expects.

Claude Desktop

macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.

Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.

Terminal
{"mcpServers":{"pagerduty":{"command":"uvx",
  "args":["pagerduty-mcp"],
  "env":{"PAGERDUTY_USER_API_KEY":"<your-key>"}}}}
Gemini CLI

~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.

Terminal
{"mcpServers":{"pagerduty":{"command":"uvx",
  "args":["pagerduty-mcp"],
  "env":{"PAGERDUTY_USER_API_KEY":"<your-key>"}}}}
VS Code Copilot

.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.

Terminal
{"servers":{"pagerduty":{"command":"uvx",
  "args":["pagerduty-mcp"],
  "env":{"PAGERDUTY_USER_API_KEY":"<your-key>"}}}}

The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.

Windsurf

~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same user API key.

Zed

~/.config/zed/settings.json, carrying the same user API key as the blocks above.

The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.

Google Antigravity

~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.

Terminal
{"mcpServers":{"pagerduty":{"command":"uvx",
  "args":["pagerduty-mcp"],
  "env":{"PAGERDUTY_USER_API_KEY":"<your-key>"}}}}
Amp (Sourcegraph)

~/.config/amp/settings.json or .amp/settings.json, carrying the same user API key. The amp mcp CLI covers approve, doctor and oauth.

The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.

Cline

~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same user API key. Supports stdio, streamable HTTP and SSE.

Goose (Block)

~/.config/goose/config.yaml, carrying the same user API key.

YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.

Kiro (AWS)

.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same user API key.

Warp

~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same user API key. Also addable through the /agent-add-mcp skill.

JetBrains Junie

.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same user API key. Use /mcp in the CLI to manage.

Roo Code

.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same user API key.

Continue

.continue/mcpServers/*.yaml, one file per server, carrying the same user API key.

YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.

Trae

.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same user API key.

Devin

Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same user API key.

With write tools enabled

Run this as a separate entry rather than replacing the read-only one, so an investigation session cannot reach it.

Terminal
uvx pagerduty-mcp --enable-write-tools
# env: PAGERDUTY_USER_API_KEY=<your-key>
Docker

Same key, same flags, without putting the package on your machine.

Terminal
docker run -i --rm -e PAGERDUTY_USER_API_KEY \
  pagerduty-mcp:latest

Read-only access, permissions and security

  • Read-only by construction

    Write tools are absent from tools/list without --enable-write-tools, so an agent cannot see, describe or call them. That is stronger than a flag it is asked to honor.

  • HTTP transports have no authentication

    PagerDuty documents that streamable-http and sse, which is server-sent events, expose the endpoint with no authentication, and that every request uses the single API key the server holds. Any client that can reach the port acts with that key's full privileges.

  • The key is a user key

    The agent inherits one person's permissions across every team and service they can reach, so scope it to a user with the access you would give an agent.

  • The server declares its own read-only tools

    63 of the 101 carry a readOnlyHint of true. That is the MCP field a server sets to mark a tool as one that does not change anything, and it matches the default set exactly.

Troubleshooting

The agent has no tool for acknowledging an incident
That is the default. Write tools appear only when the server is started with --enable-write-tools, and until then they are not in the tool list at all.
401 on connect
PAGERDUTY_USER_API_KEY is missing or not a user key. If your account is on a non-default host, set PAGERDUTY_API_HOST as well.
No change events for the period
Change events exist only if your deployment pipeline sends them. An unintegrated pipeline produces the same empty result as a quiet period.
Another machine is using your server
The HTTP transports have no authentication. Bind to localhost, or put an authenticating proxy in front of the endpoint.

PagerDuty MCP server: Reference

ItemValue
StatusPyPI 1.1.0 on 7 July 2026 · repository pushed 27 August 2026
Adoption76 stars · Apache 2.0 license
Packagepagerduty-mcp on PyPI, plus a Docker image. No hosted endpoint
Transportstdio, streamable HTTP and SSE. The HTTP transports carry no authentication
AuthPAGERDUTY_USER_API_KEY, a user token carrying that user's permissions
Tools101 registered · 63 without the write flag · 63 marked read-only by the server
Read-onlyThe default. Writes need --enable-write-tools

What engineers report

The server is at PyPI 1.1.0 of 7 July 2026, Apache 2.0, with 76 stars. Public discussion is small, so the two issues below are the whole record rather than a sample.

What was checkedWhat it shows
Stars76
Latest releasePyPI 1.1.0, 7 July 2026
LicenseApache 2.0
Tools101 registered, of which 63 need no flag
Hosted endpointNone; local only

“The PagerDuty MCP server is great! But it exposes a bit too many tools, especially given LLMs today will have degraded performance with the increase number of MCP tools available to them.”

tabletenniser, GitHub issue, 31 October 2025 · A request for a flag to filter tools by area, which is the tool-count problem this page measures.

“The MCP implementation does not support OAuth2 Tokens. The underlying api expects the Authorization header to be slightly different between API keys and OAuth2 Tokens.”

zhuethanca, GitHub issue, 12 November 2025 · Authentication options, on an issue still open at the time of writing.

Repository facts from the GitHub API and package facts from PyPI, both retrieved 19 August 2026. Tool counts come from the server's own tools/list response, captured twice: once with defaults and once with --enable-write-tools.

Should you connect an agent to PagerDuty?

Yes. Best for PagerDuty teams connecting over stdio, keeping the read-only default for investigation work.

Strongest fit
Teams who want an agent reading incident history, on-call schedules and escalation policies during or after an outage.
Main advantage
Read-only by default, implemented by leaving write tools out of the tool list rather than by asking the agent not to use them.
Main weakness
No hosted endpoint, so every user runs a local process holding a PagerDuty user API key.
Operational risk
The HTTP transports ship with no authentication and share one API key across every caller.

From Oodle

One platform for agent traces and infrastructure

Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.

See agent observability

Frequently asked questions

How many tools does the PagerDuty MCP server have?

101 in total, of which 63 are available by default. The other 38 need --enable-write-tools. Counted from the server's own tools/list response on version 1.1.0, 19 August 2026.

Is it read-only by default?

Yes. Write tools are absent from the tool list unless the server is started with --enable-write-tools, so an agent cannot see or call them by accident.

Is the HTTP transport safe to expose?

No. PagerDuty documents that streamable HTTP and SSE have no built-in authentication, and every request uses the single API key the server started with. Prefer stdio, or put an authenticating proxy in front.

Is there a hosted version?

No. The server runs locally from PyPI or Docker, so it holds a PagerDuty user API key on your machine.

Can it tell me why an incident happened?

No. PagerDuty records the alert and the human response, not the telemetry. Pair it with an observability connector.

Changelog

  • 15 July 2026. Last push. The repository has never tagged a GitHub release.
  • 6 June 2025. PagerDuty/pagerduty-mcp-server created on GitHub.

Sources

Every number on this page traces to one of these

  1. Repository facts from the GitHub API · PagerDuty/pagerduty-mcp-server, retrieved 19 August 2026
  2. Read-only default, the write flag and the transport warning from the repository README
  3. Package version from PyPI, retrieved 19 August 2026
  4. Tool counts from the server's own tools/list response, captured with and without --enable-write-tools

PagerDuty’s own MCP documentation

For the telemetry behind an incident:

For what shipped before it: