list_incidents
Retrieve Grafana incidents with filtering options for status and drill incidents to monitor and manage system alerts effectively.
Instructions
List Grafana incidents. Allows filtering by status and optionally including drill incidents
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| drill | No | Whether to include drill incidents | |
| limit | No | Maximum number of incidents to return | |
| status | No | The status of incidents to include |
Implementation Reference
- src/tools/incident.ts:58-91 (handler)The listIncidents tool definition, including the async handler function that creates an API client, queries incidents with optional filters, formats the response, and handles errors.export const listIncidents: ToolDefinition = { name: 'list_incidents', description: 'List Grafana incidents. Allows filtering by status and optionally including drill incidents', inputSchema: ListIncidentsSchema, handler: async (params, context: ToolContext) => { try { const client = createIncidentClient(context.config.grafanaConfig); const queryParams: any = {}; if (params.status) queryParams.status = params.status; if (params.drill !== undefined) queryParams.includeDrills = params.drill; if (params.limit) queryParams.limit = params.limit; const response = await client.get('/IncidentService.QueryIncidents', { params: queryParams }); const incidents = response.data.incidents || []; // Format the response const formatted = incidents.map((incident: any) => ({ incidentID: incident.incidentID, title: incident.title, status: incident.status, severity: incident.severity, createdTime: incident.createdTime, modifiedTime: incident.modifiedTime, labels: incident.labels, })); return createToolResult(formatted); } catch (error: any) { return createErrorResult(error.response?.data?.message || error.message); } }, };
- src/tools/incident.ts:6-10 (schema)Zod input schema defining optional parameters for filtering incidents by status, drill flag, and limit.const ListIncidentsSchema = z.object({ status: z.enum(['active', 'resolved']).optional().describe('The status of incidents to include'), drill: z.boolean().optional().describe('Whether to include drill incidents'), limit: z.number().optional().describe('Maximum number of incidents to return'), });
- src/tools/incident.ts:187-192 (registration)Function to register the list_incidents tool (along with related incident tools) with the MCP server.export function registerIncidentTools(server: any) { server.registerTool(listIncidents); server.registerTool(getIncident); server.registerTool(createIncident); server.registerTool(addActivityToIncident); }
- src/tools/incident.ts:39-55 (helper)Helper function to create a configured axios client for making requests to the Grafana Incident API.function createIncidentClient(config: any) { const headers: any = { 'User-Agent': 'mcp-grafana/1.0.0', }; if (config.serviceAccountToken) { headers['Authorization'] = `Bearer ${config.serviceAccountToken}`; } else if (config.apiKey) { headers['Authorization'] = `Bearer ${config.apiKey}`; } return axios.create({ baseURL: `${config.url}/api/plugins/grafana-incident-app/resources/api/v1`, headers, timeout: 30000, }); }