pagerduty-mcp-community
Provides tools to interact with your PagerDuty account, enabling management of incidents, services, schedules, event orchestrations, alert grouping settings, and more.
Click on "Deploy 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-mcp-communityShow me the current ongoing incidents"
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 MCP Server - Community Edition
About This Fork
This is a community-maintained fork of PagerDuty's official MCP Server with additional capabilities and features. The enhancements in this fork have been submitted as a pull request to the upstream repository but have not yet been merged.
Key differences from the official package:
Additional tools and functionality (see capabilities below)
Community-driven development and faster iteration
Published on PyPI as
pagerduty-mcp-communityfor easy installation
For the official PagerDuty package, see pagerduty-mcp on PyPI.
Related MCP server: MCP Setup Server
Overview
PagerDuty's local MCP (Model Context Protocol) server which provides tools to interact with your PagerDuty account, allowing you to manage incidents, services, schedules, event orchestrations, and more directly from your MCP-enabled client.
Prerequisites
asdf-vm installed.
uv installed globally.
A PagerDuty User API Token. To obtain a PagerDuty User API Token, follow these steps:
Navigate to User Settings. Click on your user profile icon, then select My Profile and then User Settings.
In your user settings, locate the API Access section.
Click the Create API User Token button and follow the prompts to generate a new token.
Copy the generated token and store it securely. You will need this token to configure the MCP server.
Use of the PagerDuty User API Token is subject to the PagerDuty Developer Agreement.
Using with MCP Clients
Cursor Integration
You can configure this MCP server directly within Cursor's settings.json file, by following these steps:
Open Cursor settings (Cursor Settings > Tools > Add MCP, or
Cmd+,on Mac, orCtrl+,on Windows/Linux).Add the following configuration:
{ "mcpServers": { "pagerduty-mcp": { "type": "stdio", "command": "uvx", "args": [ "pagerduty-mcp-community", "--enable-write-tools" // This flag enables write operations on the MCP Server enabling you to creating incidents, schedule overrides and much more ], "env": { "PAGERDUTY_USER_API_KEY": "${input:pagerduty-api-key}" } } } }
VS Code Integration
You can configure this MCP server directly within Visual Studio Code's settings.json file, allowing VS Code to manage the server lifecycle.
Open VS Code settings (File > Preferences > Settings, or
Cmd+,on Mac, orCtrl+,on Windows/Linux).Search for "mcp" and ensure "Mcp: Enabled" is checked under Features > Chat.
Click "Edit in settings.json" under "Mcp > Discovery: Servers".
Add the following configuration:
{ "mcp": { "inputs": [ { "type": "promptString", "id": "pagerduty-api-key", "description": "PagerDuty API Key", "password": true } ], "servers": { "pagerduty-mcp": { "type": "stdio", "command": "uvx", "args": [ "pagerduty-mcp-community", "--enable-write-tools" // This flag enables write operations on the MCP Server enabling you to creating incidents, schedule overrides and much more ], "env": { "PAGERDUTY_USER_API_KEY": "${input:pagerduty-api-key}", "PAGERDUTY_API_HOST": "https://api.pagerduty.com" // If your PagerDuty account is located in EU update your API host to https://api.eu.pagerduty.com } } } } }
Trying it in VS Code Chat (Agent)
Ensure MCP is enabled in VS Code settings (Features > Chat > "Mcp: Enabled").
Configure the server as described above.
Open the Chat view in VS Code (
View>Chat).Make sure
Agentmode is selected. In the Chat view, you can enable or disable specific tools by clicking the 🛠️ icon.Enter a command such as
Show me the latest incidentorList my event orchestrationsto interact with your PagerDuty account through the MCP server.You can start, stop, and manage your MCP servers using the command palette (
Cmd+Shift+P/Ctrl+Shift+P) and searching forMCP: List Servers. Ensure the server is running before sending commands. You can also try to restart the server if you encounter any issues.
Claude Desktop Integration
You can configure this MCP server to work with Claude Desktop by adding it to Claude's configuration file.
Locate your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Create or edit the configuration file and add the following configuration:
{ "mcpServers": { "pagerduty-mcp": { "command": "uvx", "args": [ "pagerduty-mcp-community", "--enable-write-tools" ], "env": { "PAGERDUTY_USER_API_KEY": "your-pagerduty-api-key-here", "PAGERDUTY_API_HOST": "https://api.pagerduty.com" } } } }Replace the placeholder values:
Replace
/path/to/your/mcp-server-directorywith the full path to the directory where you cloned the MCP server (e.g.,/Users/yourname/code/pagerduty-mcp)Replace
your-pagerduty-api-key-herewith your actual PagerDuty User API TokenIf your PagerDuty account is located in the EU, update the API host to
https://api.eu.pagerduty.com
Restart Claude Desktop completely for the changes to take effect.
Test the integration by starting a conversation with Claude and asking something like "Show me my latest PagerDuty incidents" or "List my event orchestrations" to verify the MCP server is working.
Security Note: Unlike VS Code's secure input prompts, Claude Desktop requires you to store your API key directly in the configuration file. Ensure this file has appropriate permissions (readable only by your user account) and consider the security implications of storing credentials in plain text.
Set up locally
Clone the repository
Install
asdfpluginsasdf plugin add python asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git asdf plugin add uvInstall tool versions using
asdf:asdf installCreate a virtual environment and install dependencies using
uv(now thatasdfhas set the correct Python anduvversions):uv syncEnsure
uvis available globally.The MCP server can be run from different places so you need
uvto be available globally. To do so, follow the official documentation.Tip: You may need to restart your terminal and/or VS Code for the changes to take effect.
Run it locally
To run your cloned PagerDuty MCP Server you need to update your configuration to use
uvinstead ofuvx."pagerduty-mcp": { "type": "stdio", "command": "uv", "args": [ "run", "--directory", "/path/to/your/mcp-server-directory", // Replace with the full path to the directory where you cloned the MCP server, e.g. "/Users/yourname/code/mcp-server", "python", "-m", "pagerduty_mcp", "--enable-write-tools" // This flag enables write operations on the MCP Server enabling you to creating incidents, schedule overrides and much more ], "env": { "PAGERDUTY_USER_API_KEY": "${input:pagerduty-api-key}", "PAGERDUTY_API_HOST": "https://api.pagerduty.com" // If your PagerDuty account is located in EU update your API host to https://api.eu.pagerduty.com } }
Available Tools and Resources
This section describes the tools provided by the PagerDuty MCP server. They are categorized based on whether they only read data or can modify data in your PagerDuty account.
Important: By default, the MCP server only exposes read-only tools. To enable tools that can modify your PagerDuty account (write-mode tools), you must explicitly start the server with the
--enable-write-toolsflag. This helps prevent accidental changes to your PagerDuty data.
Tool | Area | Description | Read-only |
create_alert_grouping_setting | Alert Grouping | Creates a new alert grouping setting | ❌ |
delete_alert_grouping_setting | Alert Grouping | Deletes an alert grouping setting | ❌ |
get_alert_grouping_setting | Alert Grouping | Retrieves a specific alert grouping setting | ✅ |
list_alert_grouping_settings | Alert Grouping | Lists alert grouping settings with filtering | ✅ |
update_alert_grouping_setting | Alert Grouping | Updates an existing alert grouping setting | ❌ |
get_event_orchestration | Event Orchestrations | Retrieves a specific event orchestration | ✅ |
get_event_orchestration_router | Event Orchestrations | Gets the router configuration for an event orchestration | ✅ |
list_event_orchestrations | Event Orchestrations | Lists event orchestrations with optional filtering | ✅ |
update_event_orchestration_router | Event Orchestrations | Updates the router configuration for an event orchestration | ❌ |
append_event_orchestration_router_rule | Event Orchestrations | Adds a new routing rule to an event orchestration router | ❌ |
list_escalation_policies | Escalation Policy | Lists escalation policies | ✅ |
get_escalation_policy | Escalation Policy | Retrieves a specific escalation policy | ✅ |
add_note_to_incident | Incidents | Adds note to an incident | ❌ |
add_responders | Incidents | Adds responders to an incident | ❌ |
create_incident | Incidents | Creates a new incident | ❌ |
get_incident | Incidents | Retrieves a specific incident | ✅ |
list_incidents | Incidents | Lists incidents | ✅ |
manage_incidents | Incidents | Updates status, urgency, assignment, or escalation level | ❌ |
add_team_member | Teams | Adds a user to a team with a specific role | ❌ |
create_team | Teams | Creates a new team | ❌ |
delete_team | Teams | Deletes a team | ❌ |
get_team | Teams | Retrieves a specific team | ✅ |
list_team_members | Teams | Lists members of a team | ✅ |
list_teams | Teams | Lists teams | ✅ |
remove_team_member | Teams | Removes a user from a team | ❌ |
update_team | Teams | Updates an existing team | ❌ |
get_user_data | Users | Gets the current user's data | ✅ |
list_users | Users | Lists users in the PagerDuty account | ✅ |
list_oncalls | On-call | Lists on-call schedules | ✅ |
create_schedule_override | Schedules | Creates an override for a schedule | ❌ |
get_schedule | Schedules | Retrieves a specific schedule | ✅ |
list_schedule_users | Schedules | Lists users in a schedule | ✅ |
list_schedules | Schedules | Lists schedules | ✅ |
create_service | Services | Creates a new service | ❌ |
get_service | Services | Retrieves a specific service | ✅ |
list_services | Services | Lists services | ✅ |
update_service | Services | Updates an existing service | ❌ |
Support
PagerDuty's MCP server is an open-source project, and as such, we offer only community-based support. If assistance is required, please open an issue in GitHub or PagerDuty's community forum.
Contributing
If you are interested in contributing to this project, please refer to our Contributing Guidelines.
Available Tools
20 toolsget_alert_grouping_settingBRead-onlyIdempotent
Get details for a specific alert grouping setting.
Args:
setting_id: The ID of the alert grouping setting to retrieve
Returns:
Alert grouping setting details
| Name | Required | Description | Default |
|---|---|---|---|
| setting_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The ID of the alert grouping setting |
| name | No | An optional short-form string that provides succinct information about an AlertGroupingSetting object suitable for primary labeling of the entity. It is not intended to be an identifier. |
| description | No | An optional description in string that provides more information about an AlertGroupingSetting object. |
| type | Yes | The type of alert grouping configuration |
| config | Yes | The configuration for the alert grouping setting based on the type |
| services | Yes | The array of one or many Services with just ServiceID/name that the AlertGroupingSetting applies to. Type of content_based_intelligent allows for only one service in the array. |
| created_at | No | The ISO8601 date/time an AlertGroupingSetting got created at. |
| updated_at | No | The ISO8601 date/time an AlertGroupingSetting last got updated at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false, which fully convey the behavioral profile. The description adds no additional behavioral context beyond restating 'Get details'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but includes an 'Args' and 'Returns' section that largely duplicates schema and is not needed. It could be more concise by omitting these structural elements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an existing output schema, the description is minimally adequate but lacks parameter semantics and does not leverage the output schema (though not required). It fails to provide distinct guidance from its sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It merely lists 'setting_id' without any additional meaning, such as format, source, or constraints. This is insufficient for a parameter that is not self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details for a specific alert grouping setting,' which is a specific verb+resource. It distinguishes from sibling tool 'list_alert_grouping_settings' which lists all settings, and other get tools target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing details for a specific setting by ID, but it does not explicitly mention when to use this vs alternatives like 'list_alert_grouping_settings' or provide excluding conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_escalation_policyBRead-onlyIdempotent
Get a specific escalation policy.
Args:
policy_id: The ID of the escalation policy to retrieve
Returns:
Escalation policy details
| Name | Required | Description | Default |
|---|---|---|---|
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The ID of the escalation policy |
| summary | Yes | A short-form, server-generated string that provides succinct information about the escalation policy |
| name | Yes | The name of the escalation policy |
| description | No | The description of the escalation policy |
| escalation_rules | Yes | The ordered list of escalation rules for the policy |
| num_loops | No | The number of times the escalation policy will repeat after reaching the end of its escalation |
| on_call_handoff_notifications | No | Determines how on call handoff notifications will be sent for users on theescalation policy |
| self_url | No | The API URL at which this escalation policy is accessible |
| html_url | No | The URL at which this escalation policy is accessible in the PagerDuty UI |
| services | No | The services that are using this escalation policy |
| teams | No | The teams associated with this escalation policy |
| created_at | No | The date/time when this escalation policy was created |
| updated_at | No | The date/time when this escalation policy was last updated |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the tool is safe and non-destructive. The description adds no extra behavioral details beyond stating it retrieves details. It does not mention permissions, caching, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: one line plus docstring structure. The main purpose is front-loaded. It is appropriately sized for a simple get operation, though it could include more structure without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no nested objects) and has an output schema (implied). The description provides minimal but adequate context for a straightforward retrieval. However, it lacks details on the output structure or any error conditions, which would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'policy_id' with type string and no description. The description repeats 'The ID of the escalation policy to retrieve,' adding no semantic value beyond what the schema title 'Policy Id' provides. Schema description coverage is 0%, and the description does not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get a specific escalation policy.' The verb 'Get' and the resource 'escalation policy' are clear. The naming and description distinguish it from sibling tool 'list_escalation_policies,' which retrieves multiple policies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a specific policy_id is known, but it does not explicitly state when to use this tool versus alternatives like 'list_escalation_policies.' No exclusion criteria or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_orchestrationARead-onlyIdempotent
Get details for a specific event orchestration.
Args:
orchestration_id: The ID of the event orchestration to retrieve
Returns:
The event orchestration details
| Name | Required | Description | Default |
|---|---|---|---|
| orchestration_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | ID of the Orchestration. |
| self | Yes | The API show URL at which the object is accessible |
| name | Yes | Name of the Orchestration. |
| description | No | A description of this Orchestration's purpose. |
| team | No | Reference to the team that owns the Orchestration. If none is specified, only admins have access. |
| integrations | No | List of integrations for the orchestration |
| routes | Yes | Number of different Service Orchestration being routed to |
| created_at | Yes | The date the Orchestration was created at. |
| created_by | No | Reference to the user that has created the Orchestration. |
| updated_at | Yes | The date the Orchestration was last updated. |
| updated_by | No | Reference to the user that has updated the Orchestration last. |
| version | No | Version of the Orchestration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description only needs to add minimal context. It states 'Get details' which aligns, but doesn't disclose additional behavior like potential 404 errors or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two short sentences in the body plus structured Args/Returns. It is front-loaded with the purpose and contains no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with good annotations and an output schema, the description is largely complete. It could mention that the orchestration_id must exist, but the essential info is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'orchestration_id' has 0% schema description coverage, but the description's Args section adds 'The ID of the event orchestration to retrieve', providing essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details for a specific event orchestration', using a specific verb and resource. It distinguishes itself from sibling tools like list_event_orchestrations and get_event_orchestration_router.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With many sibling get/list tools, the absence of contextual clues (e.g., requiring orchestration_id from list) is a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_orchestration_routerARead-onlyIdempotent
Get the router configuration for a specific event orchestration.
Args:
orchestration_id: The ID of the event orchestration to retrieve router for
Returns:
The event orchestration router configuration
| Name | Required | Description | Default |
|---|---|---|---|
| orchestration_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| orchestration_path | No | The orchestration router path configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and idempotentHint=true. The description adds no additional behavioral context beyond these annotations. It does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with docstring-style Args/Returns. It is front-loaded and every part earns its place. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, existing annotations, output schema), the description is mostly complete. It explains the parameter and purpose, leaving return format to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the single parameter orchestration_id by stating 'The ID of the event orchestration to retrieve router for', which is missing from the schema (0% coverage). Could be improved by specifying the expected format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'router configuration for a specific event orchestration'. It distinguishes itself from siblings like get_event_orchestration by targeting a specific subcomponent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_event_orchestration vs. get_event_orchestration_router). The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incidentARead-onlyIdempotent
Get a specific incident.
Args:
incident_id: The ID or number of the incident to retrieve.
Returns:
Incident details
| Name | Required | Description | Default |
|---|---|---|---|
| incident_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The ID of the incident |
| summary | No | A short summary of the incident |
| incident_number | Yes | The number of the incident. This is unique across your account |
| status | Yes | The current status of the incident |
| title | Yes | A succinct description of the nature, symptoms, cause, or effect of the incident |
| created_at | Yes | The time the incident was first triggered |
| updated_at | Yes | The time the incident was last modified |
| resolved_at | No | The time the incident became resolved or null if the incident is not resolved |
| service | Yes | The service the incident is on |
| assignments | No | The users assigned to the incident |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, making the behavior clear. The description does not add further behavioral context, but it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 lines) with no extra text, front-loaded with purpose, and includes structured sections for args and returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, one parameter, and presence of an output schema, the description covers the essentials. However, it could mention potential error scenarios (e.g., incident not found) for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the single parameter 'incident_id' as 'The ID or number of the incident to retrieve,' adding meaning beyond the schema's type-only definition. Schema coverage is 0%, so the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a specific incident,' using a specific verb and resource, which distinguishes it from sibling tools like list_incidents that retrieve multiple incidents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any exclusions or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleARead-onlyIdempotent
Get a specific schedule by ID.
Args:
schedule_id: The ID of the schedule to retrieve
Returns:
Schedule details
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The ID of the schedule |
| summary | Yes | A short-form, server-generated string that provides succinct information about the schedule |
| name | Yes | The name of the schedule |
| description | No | The description of the schedule |
| time_zone | Yes | The time zone of the schedule |
| self_url | No | The API URL at which this schedule is accessible |
| html_url | No | The URL at which this schedule is accessible in the PagerDuty UI |
| created_at | No | The date/time when this schedule was created |
| updated_at | No | The date/time when this schedule was last updated |
| users | No | The users associated with this schedule |
| teams | No | The teams associated with this schedule |
| schedule_layers | No | A list of schedule layers for this schedule |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe, read-only operation. The description confirms 'Get' and returns schedule details, adding no contradictory information but also not adding extra behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a one-line purpose, followed by structured Args and Returns sections. Every sentence adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 parameter, output schema exists, rich annotations), the description is complete. It explains what the tool retrieves and what the input is, without needing to detail return fields since an output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the single parameter 'schedule_id: The ID of the schedule to retrieve', adding meaning beyond the schema which only specifies type and required status. With 0% schema description coverage, the description compensates well, though the parameter is straightforward.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a specific schedule by ID', which is a specific verb ('get') and resource ('schedule'). It distinguishes from sibling tools like list_schedules (retrieve all schedules) and get_schedule_users (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single schedule by ID, but does not explicitly state when to use this over alternatives like list_schedules or provide conditions or exclusions. The context is clear but lacks explicit guidance on when not to use or what alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serviceARead-onlyIdempotent
Get details for a specific service.
Args:
service_id: The ID of the service to retrieve
Returns:
The service details
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The ID of the service |
| name | No | The name of the service |
| description | No | The description of the service |
| escalation_policy | Yes | |
| teams | No | List of teams associated with the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no additional behavioral context beyond 'Get details', which aligns with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three lines covering purpose, args, and returns. Every sentence is necessary and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one required param, read-only, output schema exists), the description is complete. It explains what, how, and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining 'service_id: The ID of the service to retrieve', adding meaning beyond the type string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get details for a specific service' with a clear verb and resource. It distinguishes from sibling 'list_services' by specifying 'specific service'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, like using it when you have a service_id vs. listing services. Usage is implied but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teamARead-onlyIdempotent
Get a specific team.
Args:
team_id: The ID or name of the team to retrieve
Returns:
Team details
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The ID of the team |
| summary | No | A short-form, server-generated string that provides succinct information about the team |
| name | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so no additional safety info is needed. The description adds that team_id accepts 'the ID or name', a behavioral detail beyond the schema. However, it doesn't elaborate on response structure or pagination, but output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences for purpose and one line each for Args and Returns. Every sentence is informative and essential. No redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and an output schema, the description is complete. It covers the action, required parameter, and what is returned. Annotations handle safety. The sibling context reinforces that this is a standard pattern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains team_id as 'The ID or name of the team to retrieve', adding semantic value by specifying it can be either ID or name. This clearly defines the parameter's meaning and usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a specific team', which is a specific verb+resource. It distinguishes from sibling tools like get_incident or get_service, which target different resources. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention that this tool should be used when you have a team ID, while list_teams is for retrieving all teams. The sibling list includes list_teams, but the description lacks any contextual cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_dataARead-onlyIdempotent
Get the current user's data.
Returns:
User: User name, role, id, and summary and teams
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The ID of the user |
| summary | No | A short-form, server-generated string that provides succinct information about the user |
| name | Yes | The name of the user |
| Yes | The email of the user | |
| role | Yes | The user role in PagerDuty (admin, limited_user, observer, etc.) |
| teams | Yes | The list of teams to which the user belongs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, and idempotent behavior. The description adds value by listing the returned fields (name, role, id, summary, teams), providing context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no wasted words. The first sentence states the purpose, the second lists the return fields. Perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters, annotations are present, and an output schema exists, the description is complete. It explains the return structure adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to add parameter information, and it correctly focuses on the return value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current user's data.' It uses a specific verb ('Get') and resource ('current user's data'), effectively distinguishing it from sibling tools like get_incident or list_services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving the current user's data but provides no explicit guidance on when to use this tool over alternatives or when not to use it. No exclusion criteria or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alert_grouping_settingsBRead-onlyIdempotent
List all alert grouping settings with optional filtering.
Args:
query_model: Optional filtering parameters
Returns:
List of alert grouping settings matching the query parameters
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no behavioral context beyond 'List all', but fails to mention pagination behavior (schema includes limit/after/before), which could mislead an agent into expecting a single unfiltered list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and structured with Args/Returns. It could be slightly more concise by omitting the redundant block since schema and output schema exist, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and annotations, the description lacks important context about pagination behavior (e.g., results are paginated, use cursors). The statement 'List all' is misleading given the pagination fields. The description is insufficiently complete for an agent to understand the tool's full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only says 'query_model: Optional filtering parameters', which adds no value beyond the schema. However, the schema itself provides full descriptions for all nested fields, so the tool description need not repeat them. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('all alert grouping settings'), and it distinguishes from the sibling tool 'get_alert_grouping_setting' which retrieves a single setting. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing with optional filtering but does not explicitly state when to use this tool versus alternatives like 'get_alert_grouping_setting' or other list tools. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_escalation_policiesBRead-onlyIdempotent
List escalation policies with optional filtering.
Returns:
List of escalation policies matching the query parameters
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, so description adds little beyond stating it returns a list. No mention of pagination behavior, default limit, or response format. But no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no extraneous content. The 'Returns:' line is somewhat redundant but keeps it concise. Could be more informative without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (indicated by context signals) and the complexity of a list tool, the description lacks crucial details like pagination limit (though present in schema), default behavior, and response structure. It is incomplete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the top-level parameter, and the description does not compensate. It only mentions 'optional filtering' without explaining the query_model structure, which is detailed in nested schema but still requires the description to bridge the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists escalation policies with optional filtering, which is a specific verb and resource. It distinguishes from sibling tools like get_escalation_policy, which retrieves a single policy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_escalation_policy for a single policy). No exclusions or context for when filtering is beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_event_orchestrationsBRead-onlyIdempotent
List event orchestrations with optional filtering.
Args:
query_model: Optional filtering parameters
Returns:
List of event orchestrations matching the query parameters
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no extra behavioral context (e.g., pagination details, behavior with no filters). It is consistent but not additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but includes an Args and Returns section that largely duplicate information already in the schema and output schema. It could be more concise by dropping these repetitive sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a detailed schema (with sub-field descriptions) and an output schema, the description is adequate but missing some context such as default sorting behavior or pagination defaults. It does not explain what happens if no query_model is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the tool parameter level. The description describes 'query_model' as 'Optional filtering parameters' but does not elaborate on its fields (limit, offset, sort_by) which are documented only in the nested schema. This adds minimal meaning beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('List') and the resource ('event orchestrations'), and mentions optional filtering. It distinguishes from the sibling 'get_event_orchestration' which is for a single item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing with optional filtering but does not explicitly state when to use this tool versus alternatives like 'get_event_orchestration' or other list tools. No guidance on prerequisites or exclusion scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_incidentsARead-onlyIdempotent
List incidents with optional filtering.
Args:
query_model: Optional filtering parameters
Returns:
List of Incident objects matching the query parameters
Examples:
Basic usage filtering by status:
>>> from pagerduty_mcp.models import IncidentQuery
>>> result = list_incidents(IncidentQuery(status=["triggered"]))
>>> isinstance(result.response, list)
True
Multiple statuses with a limit:
>>> result = list_incidents(IncidentQuery(status=["triggered", "acknowledged"], limit=10))
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds that it performs optional filtering and returns a list, which is consistent but not rich. No additional behavioral details (e.g., pagination, rate limits) are disclosed beyond the schema's limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a header, Args, Returns, and a code example. It is concise and front-loads the core purpose. Every element serves a clear purpose without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers basic usage and includes examples, it omits explanations of pagination, sorting (though present in schema), and result format details. Given the tool's complexity (many filter parameters) and the existence of an output schema (not shown), the description is adequate but incomplete for an agent needing full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides the Args line 'query_model: Optional filtering parameters', adding minimal top-level parameter meaning since the schema lacks a description for query_model. The examples significantly enhance semantics by showing usage with IncidentQuery fields, compensating for the 0% schema description coverage of the top-level parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List incidents with optional filtering', specifying the verb and resource. The name 'list_incidents' and sibling tools like 'get_incident' naturally differentiate, and the description reinforces the listing action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like 'get_incident' for single incidents or other list tools. It does not mention exclusions or context, leaving the agent without clear decision-making criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_oncallsBRead-onlyIdempotent
List on-call schedules with optional filtering.
Returns:
List of on-call schedules matching the query parameters
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description does not need to elaborate. It adds no behavioral context beyond 'List', which is consistent. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences with a return line. It is front-loaded and avoids unnecessary detail, though the return line is redundant given the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with good annotations and a clear schema, the description covers the basic purpose. However, it lacks contextual details like the difference from list_schedules or how filtering works, leaving some gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has detailed descriptions for all nested properties, so schema documentation is strong. The tool description adds no additional parameter meaning beyond what the schema provides, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists on-call schedules with optional filtering, using a specific verb and resource. It distinguishes itself from sibling tools like list_schedules (which lists schedules) by focusing on on-call schedules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., list_schedules) or context about filtering. It simply states the function without any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesBRead-onlyIdempotent
List schedules with optional filtering.
Returns:
List of schedules matching the query parameters
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds no additional behavioral context. It does not disclose pagination, ordering, or any side effects beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, consisting of two short sentences with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple list operation but lacks details on pagination, ordering, or behavior with no filters. Given the complexity of the schema and existence of output schema, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description should compensate by detailing parameters, but it merely says 'with optional filtering' without mentioning any specific fields. The schema itself provides descriptions, but the tool description adds no value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('list') and resource ('schedules'), and mentions 'optional filtering'. It effectively distinguishes from sibling 'get_schedule' which retrieves a single schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_schedule'. The description does not mention use cases, limitations, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedule_usersARead-onlyIdempotent
List users in a schedule.
Args:
schedule_id: The ID of the schedule
Returns:
List of users in the schedule
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds a return type but no further behavioral details (e.g., error behavior, pagination, ordering). It is adequate but does not extend beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 lines) and front-loaded with the purpose. Every sentence is necessary; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one parameter and an output schema, the description is nearly complete. It states the action, input, and output type. Minor omission: it could mention that the output is a list of user objects, but the output schema exists so the description is not required to detail it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. However, it merely restates the parameter name as 'The ID of the schedule', adding no semantic richness beyond what the schema already shows (type string, required).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List users in a schedule' with a specific verb and resource. It distinguishes from siblings like 'list_users' (all users) and 'list_schedules' by specifying the schedule context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context but does not explicitly state when to use this tool versus alternatives like 'list_users' or 'list_team_members'. No alternative or exclusion is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesBRead-onlyIdempotent
List all services.
Args:
query_model: Optional filtering parameters
Returns:
List of services matching the query parameters
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's simple 'list' behavior is consistent but adds no extra behavioral context beyond the schema (e.g., pagination details are only in schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the key action. The Args/Returns section is slightly redundant given the schema, but overall it is efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is minimally adequate. However, it omits practical details like pagination semantics or default limits, which are only in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description vaguely mentions 'Optional filtering parameters' but does not detail the query_model structure. Since schema_description_coverage is 0%, the description should compensate, but it fails to add meaning beyond what the input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists services, with optional filtering. It distinguishes from sibling tools like list_incidents or list_teams by the resource type, though it could be more specific about what constitutes a service.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With many sibling list tools, explicit usage context or exclusions would help agents decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_membersARead-onlyIdempotent
List members of a team.
Args:
team_id: The ID of the team
Returns:
List of UserReference objects
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, indicating a safe, read-only operation. The description adds no further behavioral context (e.g., no mention of permissions, rate limits, or side effects), but does not contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three short sentences: purpose, parameter documentation, and return documentation. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations are present, the description adequately covers the tool's purpose and return type. It could be slightly improved by mentioning potential edge cases (e.g., empty team) or pagination, but for a simple list operation, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explicitly documents the sole parameter 'team_id: The ID of the team', adding clear meaning beyond the schema's title. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List members of a team.' which specifies the verb (list) and resource (members of a team). This distinguishes it from sibling tools like list_teams (lists teams) and list_users (lists users).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it does not mention that this tool is for retrieving members of a specific team, not for listing all users or teams, which could be confusing given the many list_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teamsBRead-onlyIdempotent
List teams based on the provided query model.
Args:
query_model: The model containing the query parameters
Returns:
List of teams.
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds minimal behavioral context beyond 'List teams based on the provided query model.' It does not mention pagination, rate limits, or other traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with a clear verb and resource. The docstring format is structured. However, it could be slightly more informative without adding much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations, input schema, and output schema present, the description is adequate but could be more complete. It does not summarize default values, pagination behavior, or the scope parameter's effect, though these are covered in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the required parameter 'query_model', yet the description only says 'The model containing the query parameters'—a generic statement. The nested schema fields have descriptions, but the description fails to explain the parameter structure or usage, so it does not compensate for the lack of coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List teams' with a specific verb and resource. It distinguishes from sibling 'get_team' by indicating a list operation. The docstring structure with Args and Returns adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like 'get_team' or other list tools. The description does not mention context, when-not, or provide any selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersARead-onlyIdempotent
List users, optionally filtering by name (query) and team IDs.
Args:
query_model: Optional filtering parameters
Returns:
List of users matching the criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| query_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so description does not need to add safety info. Description adds no extra behavioral context beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, using a structured docstring format with Args and Returns. No superfluous words; could be slightly tighter but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers listing, optional filtering, and return type. Output schema exists to provide further details. Adequate for an LLM to understand usage without significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already has rich descriptions for sub-parameters (query, teams_ids, limit). Description adds a high-level summary ('optionally filtering by name and team IDs') but does not significantly expand beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'list users' with optional filtering by name and team IDs. Distinguishes from sibling tools like list_teams, list_services, and get_user_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., get_user_data for a single user). Only implicit from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v0.1.0- First observed
get_alert_grouping_setting - First observed
get_escalation_policy - First observed
get_event_orchestration - First observed
get_event_orchestration_router - First observed
get_incident - First observed
get_schedule - First observed
get_service - First observed
get_team - First observed
get_user_data - First observed
list_alert_grouping_settings - First observed
list_escalation_policies - First observed
list_event_orchestrations - First observed
list_incidents - First observed
list_oncalls - First observed
list_schedule_users - First observed
list_schedules - First observed
list_services - First observed
list_team_members - First observed
list_teams - First observed
list_users
TDQS
Scored across 20 tools
Each tool targets a distinct resource or specific sub-resource (e.g., get_escalation_policy vs list_escalation_policies, get_event_orchestration_router). No two tools have overlapping purposes, making selection unambiguous.
All tools follow a consistent verb_noun pattern using snake_case: get_<resource> for single items, list_<resource> for collections. There are no deviations or mixed conventions.
With 20 tools covering the major PagerDuty resources (incidents, services, teams, users, schedules, escalation policies, etc.), the count is appropriate for a comprehensive read-only API surface.
The server is entirely read-only; there are no create, update, delete, or action tools (e.g., acknowledge incident, create service). This is a significant gap for most workflows, leaving agents unable to take any action.
Maintenance
Related MCP Connectors
The official Planning Center MCP server for interacting with your ministry's data.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for the Splunk On-Call (VictorOps) API providing comprehensive incident management, on-call schedules, team administration, and alert reporting through natural language.MIT
- FlicenseNot gradedqualityDmaintenanceA modular MCP server exposing tools for integrating with services like GitHub, Redash, Jenkins, Figma, Jira, Confluence, Teams, Datadog, PagerDuty, Slack, and Presto, enabling users to manage these platforms through natural language via an MCP client.-

pagerduty-mcpofficial
AlicenseBqualityFmaintenanceEnables management of PagerDuty incidents, services, schedules, and more directly from MCP-enabled clients, with embedded interactive UIs for incident command center, on-call management, and other features.6377Apache 2.0- AlicenseBqualityCmaintenanceUnified MCP server for DevOps engineers that provides real-time read and write access to Kubernetes, ArgoCD, Prometheus, and PagerDuty from any MCP-compatible AI agent.2173 npm3MIT