resolve_incident
Resolve ServiceNow incidents by providing resolution codes and notes to close tickets and document solutions.
Instructions
Resolve an incident in ServiceNow
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| incident_id | Yes | Incident ID or sys_id | |
| resolution_code | Yes | Resolution code for the incident | |
| resolution_notes | Yes | Resolution notes for the incident |
Implementation Reference
- The main handler function that implements the logic to resolve an incident in ServiceNow by updating its state to resolved, setting close_code and close_notes.def resolve_incident( config: ServerConfig, auth_manager: AuthManager, params: ResolveIncidentParams, ) -> IncidentResponse: """ Resolve an incident in ServiceNow. Args: config: Server configuration. auth_manager: Authentication manager. params: Parameters for resolving the incident. Returns: Response with the result of the operation. """ # Determine if incident_id is a number or sys_id incident_id = params.incident_id if len(incident_id) == 32 and all(c in "0123456789abcdef" for c in incident_id): # This is likely a sys_id api_url = f"{config.api_url}/table/incident/{incident_id}" else: # This is likely an incident number # First, we need to get the sys_id try: query_url = f"{config.api_url}/table/incident" query_params = { "sysparm_query": f"number={incident_id}", "sysparm_limit": 1, } response = requests.get( query_url, params=query_params, headers=auth_manager.get_headers(), timeout=config.timeout, ) response.raise_for_status() result = response.json().get("result", []) if not result: return IncidentResponse( success=False, message=f"Incident not found: {incident_id}", ) incident_id = result[0].get("sys_id") api_url = f"{config.api_url}/table/incident/{incident_id}" except requests.RequestException as e: logger.error(f"Failed to find incident: {e}") return IncidentResponse( success=False, message=f"Failed to find incident: {str(e)}", ) # Build request data data = { "state": "6", # Resolved "close_code": params.resolution_code, "close_notes": params.resolution_notes, "resolved_at": "now", } # Make request try: response = requests.put( api_url, json=data, headers=auth_manager.get_headers(), timeout=config.timeout, ) response.raise_for_status() result = response.json().get("result", {}) return IncidentResponse( success=True, message="Incident resolved successfully", incident_id=result.get("sys_id"), incident_number=result.get("number"), ) except requests.RequestException as e: logger.error(f"Failed to resolve incident: {e}") return IncidentResponse( success=False, message=f"Failed to resolve incident: {str(e)}", )
- Pydantic model defining the input parameters for the resolve_incident tool: incident_id, resolution_code, resolution_notes.class ResolveIncidentParams(BaseModel): """Parameters for resolving an incident.""" incident_id: str = Field(..., description="Incident ID or sys_id") resolution_code: str = Field(..., description="Resolution code for the incident") resolution_notes: str = Field(..., description="Resolution notes for the incident")
- src/servicenow_mcp/utils/tool_utils.py:385-391 (registration)Registration of the resolve_incident tool in the central tool definitions dictionary, including the aliased function, params model, description, and serialization method."resolve_incident": ( resolve_incident_tool, ResolveIncidentParams, str, "Resolve an incident in ServiceNow", "str", ),
- src/servicenow_mcp/tools/__init__.py:42-48 (registration)Import of resolve_incident from incident_tools.py in the tools package __init__.py, making it available for export.from servicenow_mcp.tools.incident_tools import ( add_comment, create_incident, list_incidents, resolve_incident, update_incident, )