PagerDuty MCP Server

by wpfleger96
Verified
"""Parser for PagerDuty incidents.""" from typing import Dict, Any def parse_incident(*, result: Dict[str, Any]) -> Dict[str, Any]: """Parses a raw incident API response into a structured format without unneeded fields. Args: result (Dict[str, Any]): The raw incident API response Returns: Dict[str, Any]: A dictionary containing: - id (str): The incident ID - html_url (str): URL to view the incident in PagerDuty - incident_number (int): The incident number - title (str): The incident title - status (str): Current status of the incident - urgency (str): Urgency level of the incident - priority (dict): Priority information - created_at (str): Creation timestamp - updated_at (str): Last update timestamp - resolved_at (str): Resolution timestamp - resolve_reason (str): Reason for resolution - assignments (List[Dict]): List of assignments with assignee and timestamp - acknowledgements (List[Dict]): List of acknowledgements with acknowledger and timestamp - service (Dict): Service information with id, summary, and html_url - teams (List[Dict]): List of teams with id, summary, and html_url - alert_counts (Dict): Counts of alerts - summary (str): Incident summary - description (str): Incident description - escalation_policy (Dict): Escalation policy information with id, summary, and html_url - incident_key (str): Unique incident key - last_status_change_at (str): Last status change timestamp - last_status_change_by (Dict): User who last changed status with id, summary, and html_url Note: If the input is None or not a dictionary, returns an empty dictionary. All fields are optional and will be None if not present in the input. Raises: KeyError: If accessing nested dictionary fields fails """ if not result: return {} return { "id": result.get("id"), "html_url": result.get("html_url"), "incident_number": result.get("incident_number"), "title": result.get("title"), "status": result.get("status"), "urgency": result.get("urgency"), "priority": result.get("priority"), "created_at": result.get("created_at"), "updated_at": result.get("updated_at"), "resolved_at": result.get("resolved_at"), "resolve_reason": result.get("resolve_reason"), "assignments": [ { "assignee": { "id": assignment.get("assignee", {}).get("id"), "summary": assignment.get("assignee", {}).get("summary"), "html_url": assignment.get("assignee", {}).get("html_url") }, "at": assignment.get("at") } for assignment in result.get("assignments", []) ], "acknowledgements": [ { "acknowledger": { "id": ack.get("acknowledger", {}).get("id"), "summary": ack.get("acknowledger", {}).get("summary"), "html_url": ack.get("acknowledger", {}).get("html_url") }, "at": ack.get("at") } for ack in result.get("acknowledgements", []) ], "service": { "id": result.get("service", {}).get("id"), "summary": result.get("service", {}).get("summary"), "html_url": result.get("service", {}).get("html_url") }, "teams": [ { "id": team.get("id"), "summary": team.get("summary"), "html_url": team.get("html_url") } for team in result.get("teams", []) ], "alert_counts": result.get("alert_counts", {}), "summary": result.get("summary"), "description": result.get("description"), "escalation_policy": { "id": result.get("escalation_policy", {}).get("id"), "summary": result.get("escalation_policy", {}).get("summary"), "html_url": result.get("escalation_policy", {}).get("html_url") }, "incident_key": result.get("incident_key"), "last_status_change_at": result.get("last_status_change_at"), "last_status_change_by": { "id": result.get("last_status_change_by", {}).get("id"), "summary": result.get("last_status_change_by", {}).get("summary"), "html_url": result.get("last_status_change_by", {}).get("html_url") } }