get-events
Retrieve and analyze structured log events from Seq server using filters like time range, signal IDs, or custom expressions to investigate patterns and frequencies.
Instructions
Retrieve and analyze a list of event filtered by parameters. Use this tool when you need to:
Investigate events that are being logged in the SEQ server
Details of each event is a structured log and can provide usefull information
Events could be information, error, debug, or critical
Analyze error patterns and frequencies
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| signal | No | Comma-separated list of signal IDs | |
| filter | No | Filter expression for events | |
| count | No | Number of events to return (max 20) | |
| fromDateUtc | No | Start date/time in UTC | |
| toDateUtc | No | End date/time in UTC | |
| range | No | Time range (e.g., 1m, 15m, 1h, 1d, 7d) |
Implementation Reference
- src/seq-server.ts:157-197 (handler)Handler function that fetches events from the Seq API endpoint '/api/events' using the provided parameters (signal, filter, count, dates, range), formats the request, and returns the JSON events or error.async ({ signal, filter, count, fromDateUtc, toDateUtc, range }) => { try { const params: Record<string, string> = {}; // Handle date range parameters if (range) { // If range is provided, it takes precedence over fromDateUtc/toDateUtc params.range = range; } else if (fromDateUtc || toDateUtc) { // Only add date parameters if they're provided if (fromDateUtc) params.fromDateUtc = fromDateUtc; if (toDateUtc) params.toDateUtc = toDateUtc; } else { // Default to last hour if no time parameters provided params.range = '1h'; } // Add other optional parameters if (signal) params.signal = signal; if (filter) params.filter = filter; if (count) params.count = count.toString(); const events = await makeSeqRequest<Event[]>('/api/events', params); return { content: [{ type: "text", text: JSON.stringify(events) }] }; } catch (error) { const err = error as Error; return { content: [{ type: "text", text: `Error fetching events: ${err.message}` }], isError: true }; } }
- src/seq-server.ts:142-156 (schema)Input schema definition using Zod for the get-events tool parameters.{ signal: z.string().optional() .describe('Comma-separated list of signal IDs'), filter: z.string().optional() .describe('Filter expression for events'), count: z.number().min(1).max(MAX_EVENTS).optional() .default(MAX_EVENTS) .describe(`Number of events to return (max ${MAX_EVENTS})`), fromDateUtc: z.string().optional() .describe('Start date/time in UTC'), toDateUtc: z.string().optional() .describe('End date/time in UTC'), range: timeRangeSchema.optional() .describe('Time range (e.g., 1m, 15m, 1h, 1d, 7d)') },
- src/seq-server.ts:134-198 (registration)Registration of the 'get-events' tool on the MCP server using server.tool() with description, input schema, and handler function.server.tool( "get-events", `Retrieve and analyze a list of event filtered by parameters. Use this tool when you need to: - Investigate events that are being logged in the SEQ server - Details of each event is a structured log and can provide usefull information - Events could be information, error, debug, or critical - Analyze error patterns and frequencies `, { signal: z.string().optional() .describe('Comma-separated list of signal IDs'), filter: z.string().optional() .describe('Filter expression for events'), count: z.number().min(1).max(MAX_EVENTS).optional() .default(MAX_EVENTS) .describe(`Number of events to return (max ${MAX_EVENTS})`), fromDateUtc: z.string().optional() .describe('Start date/time in UTC'), toDateUtc: z.string().optional() .describe('End date/time in UTC'), range: timeRangeSchema.optional() .describe('Time range (e.g., 1m, 15m, 1h, 1d, 7d)') }, async ({ signal, filter, count, fromDateUtc, toDateUtc, range }) => { try { const params: Record<string, string> = {}; // Handle date range parameters if (range) { // If range is provided, it takes precedence over fromDateUtc/toDateUtc params.range = range; } else if (fromDateUtc || toDateUtc) { // Only add date parameters if they're provided if (fromDateUtc) params.fromDateUtc = fromDateUtc; if (toDateUtc) params.toDateUtc = toDateUtc; } else { // Default to last hour if no time parameters provided params.range = '1h'; } // Add other optional parameters if (signal) params.signal = signal; if (filter) params.filter = filter; if (count) params.count = count.toString(); const events = await makeSeqRequest<Event[]>('/api/events', params); return { content: [{ type: "text", text: JSON.stringify(events) }] }; } catch (error) { const err = error as Error; return { content: [{ type: "text", text: `Error fetching events: ${err.message}` }], isError: true }; } } );
- src/seq-server.ts:31-56 (helper)Shared helper function makeSeqRequest used by get-events tool to make authenticated HTTP requests to the Seq API.async function makeSeqRequest<T>(endpoint: string, params: Record<string, string> = {}): Promise<T> { const url = new URL(`${SEQ_BASE_URL}${endpoint}`); // Add API key as query parameter url.searchParams.append('apiKey', SEQ_API_KEY); // Add additional query parameters Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { url.searchParams.append(key, value); } }); const headers: Record<string, string> = { 'Accept': 'application/json', 'X-Seq-ApiKey': SEQ_API_KEY }; const response = await fetch(url.toString(), { headers }); if (!response.ok) { throw new Error(`SEQ API error: ${response.statusText} (${response.status})`); } return response.json(); }
- src/seq-server.ts:131-131 (schema)Zod enum schema for valid time ranges used in the get-events input schema.const timeRangeSchema = z.enum(['1m', '15m', '30m', '1h', '2h', '6h', '12h', '1d', '7d', '14d', '30d']);