Skip to main content
Glama
carlyou

pagerduty-mcp-community

by carlyou

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-community for 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:

    1. Navigate to User Settings. Click on your user profile icon, then select My Profile and then User Settings.

    2. In your user settings, locate the API Access section.

    3. Click the Create API User Token button and follow the prompts to generate a new token.

    4. 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:

  1. Open Cursor settings (Cursor Settings > Tools > Add MCP, or Cmd+, on Mac, or Ctrl+, on Windows/Linux).

  2. 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.

  1. Open VS Code settings (File > Preferences > Settings, or Cmd+, on Mac, or Ctrl+, on Windows/Linux).

  2. Search for "mcp" and ensure "Mcp: Enabled" is checked under Features > Chat.

  3. Click "Edit in settings.json" under "Mcp > Discovery: Servers".

  4. 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)

  1. Ensure MCP is enabled in VS Code settings (Features > Chat > "Mcp: Enabled").

  2. Configure the server as described above.

  3. Open the Chat view in VS Code (View > Chat).

  4. Make sure Agent mode is selected. In the Chat view, you can enable or disable specific tools by clicking the 🛠️ icon.

  5. Enter a command such as Show me the latest incident or List my event orchestrations to interact with your PagerDuty account through the MCP server.

  6. You can start, stop, and manage your MCP servers using the command palette (Cmd+Shift+P/Ctrl+Shift+P) and searching for MCP: 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.

  1. Locate your Claude Desktop configuration file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. 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"
          }
        }
      }
    }
  3. Replace the placeholder values:

    • Replace /path/to/your/mcp-server-directory with the full path to the directory where you cloned the MCP server (e.g., /Users/yourname/code/pagerduty-mcp)

    • Replace your-pagerduty-api-key-here with your actual PagerDuty User API Token

    • If your PagerDuty account is located in the EU, update the API host to https://api.eu.pagerduty.com

  4. Restart Claude Desktop completely for the changes to take effect.

  5. 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

  1. Clone the repository

  2. Install asdf plugins

    asdf plugin add python
    asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
    asdf plugin add uv
  3. Install tool versions using asdf:

    asdf install
  4. Create a virtual environment and install dependencies using uv (now that asdf has set the correct Python and uv versions):

    uv sync
  5. Ensure uv is available globally.

    The MCP server can be run from different places so you need uv to 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.

  6. Run it locally

    To run your cloned PagerDuty MCP Server you need to update your configuration to use uv instead of uvx.

    "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-tools flag. 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 tools
get_alert_grouping_settingB
Read-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
ParametersJSON Schema
NameRequiredDescriptionDefault
setting_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe ID of the alert grouping setting
nameNoAn 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.
descriptionNoAn optional description in string that provides more information about an AlertGroupingSetting object.
typeYesThe type of alert grouping configuration
configYesThe configuration for the alert grouping setting based on the type
servicesYesThe 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_atNoThe ISO8601 date/time an AlertGroupingSetting got created at.
updated_atNoThe ISO8601 date/time an AlertGroupingSetting last got updated at.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_policyB
Read-onlyIdempotent

Get a specific escalation policy.

Args:
    policy_id: The ID of the escalation policy to retrieve

Returns:
    Escalation policy details
ParametersJSON Schema
NameRequiredDescriptionDefault
policy_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe ID of the escalation policy
summaryYesA short-form, server-generated string that provides succinct information about the escalation policy
nameYesThe name of the escalation policy
descriptionNoThe description of the escalation policy
escalation_rulesYesThe ordered list of escalation rules for the policy
num_loopsNoThe number of times the escalation policy will repeat after reaching the end of its escalation
on_call_handoff_notificationsNoDetermines how on call handoff notifications will be sent for users on theescalation policy
self_urlNoThe API URL at which this escalation policy is accessible
html_urlNoThe URL at which this escalation policy is accessible in the PagerDuty UI
servicesNoThe services that are using this escalation policy
teamsNoThe teams associated with this escalation policy
created_atNoThe date/time when this escalation policy was created
updated_atNoThe date/time when this escalation policy was last updated

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_orchestrationA
Read-onlyIdempotent

Get details for a specific event orchestration.

Args:
    orchestration_id: The ID of the event orchestration to retrieve

Returns:
    The event orchestration details
ParametersJSON Schema
NameRequiredDescriptionDefault
orchestration_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesID of the Orchestration.
selfYesThe API show URL at which the object is accessible
nameYesName of the Orchestration.
descriptionNoA description of this Orchestration's purpose.
teamNoReference to the team that owns the Orchestration. If none is specified, only admins have access.
integrationsNoList of integrations for the orchestration
routesYesNumber of different Service Orchestration being routed to
created_atYesThe date the Orchestration was created at.
created_byNoReference to the user that has created the Orchestration.
updated_atYesThe date the Orchestration was last updated.
updated_byNoReference to the user that has updated the Orchestration last.
versionNoVersion of the Orchestration.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_routerA
Read-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
ParametersJSON Schema
NameRequiredDescriptionDefault
orchestration_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
orchestration_pathNoThe orchestration router path configuration

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_incidentA
Read-onlyIdempotent

Get a specific incident.

Args:
    incident_id: The ID or number of the incident to retrieve.

Returns:
    Incident details
ParametersJSON Schema
NameRequiredDescriptionDefault
incident_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe ID of the incident
summaryNoA short summary of the incident
incident_numberYesThe number of the incident. This is unique across your account
statusYesThe current status of the incident
titleYesA succinct description of the nature, symptoms, cause, or effect of the incident
created_atYesThe time the incident was first triggered
updated_atYesThe time the incident was last modified
resolved_atNoThe time the incident became resolved or null if the incident is not resolved
serviceYesThe service the incident is on
assignmentsNoThe users assigned to the incident

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_scheduleA
Read-onlyIdempotent

Get a specific schedule by ID.

Args:
    schedule_id: The ID of the schedule to retrieve

Returns:
    Schedule details
ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe ID of the schedule
summaryYesA short-form, server-generated string that provides succinct information about the schedule
nameYesThe name of the schedule
descriptionNoThe description of the schedule
time_zoneYesThe time zone of the schedule
self_urlNoThe API URL at which this schedule is accessible
html_urlNoThe URL at which this schedule is accessible in the PagerDuty UI
created_atNoThe date/time when this schedule was created
updated_atNoThe date/time when this schedule was last updated
usersNoThe users associated with this schedule
teamsNoThe teams associated with this schedule
schedule_layersNoA list of schedule layers for this schedule

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_serviceA
Read-onlyIdempotent

Get details for a specific service.

Args:
    service_id: The ID of the service to retrieve

Returns:
    The service details
ParametersJSON Schema
NameRequiredDescriptionDefault
service_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe ID of the service
nameNoThe name of the service
descriptionNoThe description of the service
escalation_policyYes
teamsNoList of teams associated with the service

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_teamA
Read-onlyIdempotent

Get a specific team.

Args:
    team_id: The ID or name of the team to retrieve
Returns:
    Team details
ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe ID of the team
summaryNoA short-form, server-generated string that provides succinct information about the team
nameYes
descriptionNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_dataA
Read-onlyIdempotent

Get the current user's data.

Returns:
    User: User name, role, id, and summary and teams
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe ID of the user
summaryNoA short-form, server-generated string that provides succinct information about the user
nameYesThe name of the user
emailYesThe email of the user
roleYesThe user role in PagerDuty (admin, limited_user, observer, etc.)
teamsYesThe list of teams to which the user belongs

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_settingsB
Read-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
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_policiesB
Read-onlyIdempotent

List escalation policies with optional filtering.

Returns:
    List of escalation policies matching the query parameters
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_orchestrationsB
Read-onlyIdempotent

List event orchestrations with optional filtering.

Args:
    query_model: Optional filtering parameters

Returns:
    List of event orchestrations matching the query parameters
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_incidentsA
Read-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))
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_oncallsB
Read-onlyIdempotent

List on-call schedules with optional filtering.

Returns:
    List of on-call schedules matching the query parameters
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_schedulesB
Read-onlyIdempotent

List schedules with optional filtering.

Returns:
    List of schedules matching the query parameters
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_usersA
Read-onlyIdempotent

List users in a schedule.

Args:
    schedule_id: The ID of the schedule

Returns:
    List of users in the schedule
ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_servicesB
Read-onlyIdempotent

List all services.

Args:
    query_model: Optional filtering parameters

Returns:
    List of services matching the query parameters
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_membersA
Read-onlyIdempotent

List members of a team.

Args:
    team_id: The ID of the team

Returns:
    List of UserReference objects
ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_teamsB
Read-onlyIdempotent

List teams based on the provided query model.

Args:
    query_model: The model containing the query parameters
Returns:
    List of teams.
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_usersA
Read-onlyIdempotent

List users, optionally filtering by name (query) and team IDs.

Args:
    query_model: Optional filtering parameters

Returns:
    List of users matching the criteria.
ParametersJSON Schema
NameRequiredDescriptionDefault
query_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
responseYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 20 tool updatesv0.1.0
    • First observedget_alert_grouping_setting
    • First observedget_escalation_policy
    • First observedget_event_orchestration
    • First observedget_event_orchestration_router
    • First observedget_incident
    • First observedget_schedule
    • First observedget_service
    • First observedget_team
    • First observedget_user_data
    • First observedlist_alert_grouping_settings
    • First observedlist_escalation_policies
    • First observedlist_event_orchestrations
    • First observedlist_incidents
    • First observedlist_oncalls
    • First observedlist_schedule_users
    • First observedlist_schedules
    • First observedlist_services
    • First observedlist_team_members
    • First observedlist_teams
    • First observedlist_users

TDQS

A3.7/5.0

Scored across 20 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness2/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for the Splunk On-Call (VictorOps) API providing comprehensive incident management, on-call schedules, team administration, and alert reporting through natural language.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    -
  • A
    license
    B
    quality
    F
    maintenance
    Enables 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.
    63
    77
    Apache 2.0
  • A
    license
    B
    quality
    C
    maintenance
    Unified 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.
    21
    73 npm
    3
    MIT