MCP server wiring PagerDuty, Dynatrace, and runbook context for AI-driven incident response
Server has 7 tools with basic descriptions and parameter schemas, but significant gaps in parameter documentation and output schema clarity. All tools are READ_ONLY and well-intentioned for incident response, but descriptions lack actionable context for LLM selection. Parameter descriptions are minimal (e.g., 'Maximum number of incidents to retrieve' for limit). No output schemas documented. Tool names follow verb_noun convention (get_*, correlate_*) which is good, but descriptions don't explain WHEN to use each tool vs. alternatives or what fields are returned.
Cross-reference a PagerDuty incident with Dynatrace problems and runbooks.
Get currently open PagerDuty incidents with severity and assignee.
Get open Dynatrace problem cards with root cause analysis.
Get the current on-call roster from PagerDuty.
Retrieve a runbook for a given alert name.
Get upstream and downstream service dependencies from Dynatrace.
No output schemas documented. Tools return JSON strings but LLMs cannot infer field structure, types, or which fields enable chaining to other tools. E.g., get_active_incidents_tool returns JSON but no schema shows whether it includes 'service_name' (needed for correlate_incident_tool) or 'incident_id' (needed for downstream lookups).
Parameter descriptions are minimal and lack actionable context. E.g., 'Maximum number of incidents to retrieve' for limit parameter does not state the valid range (1-100?), default behavior if omitted, or performance implications. Descriptions should follow pattern: 'The maximum number of incidents to return (1 - 100, default 10). Larger limits may slow response time.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get SLO burn rate and remaining error budget from Dynatrace.
Tool descriptions lack WHEN-to-use guidance and differentiation. E.g., get_dynatrace_problems_tool and get_slo_status_tool both query Dynatrace but descriptions don't explain when to call one vs. the other or how they complement each other. LLMs cannot distinguish without explicit guidance.
get_oncall_roster_tool has no input parameters but description does not explain what data it returns (names? IDs? schedules? escalation policies?). LLM cannot determine if this tool answers 'Who is on call?' or 'What is the on-call schedule?'
get_slo_status_tool has optional slo_id parameter with default empty string. Description does not explain: What happens if slo_id is empty? Does it return all SLOs? Does it fail? This ambiguity forces LLMs to guess or retry.