get_jobs_stats
Retrieve aggregated statistics for agent jobs to monitor and analyze performance. Filter by organization, time range, job type, channel, tags, or status for efficient dashboard integration.
Instructions
Get aggregated statistics for agent jobs without retrieving individual job data. Optimized for dashboards and monitoring with minimal network overhead.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| channel_code | No | Channel filter | |
| created_at_gte | No | Filter for jobs created at or after a specific time (ISO 8601). | |
| created_at_lte | No | Filter for jobs created at or before a specific time (ISO 8601). | |
| job_type_id | No | Job type filter | |
| org_id | No | Filter by organization ID. | |
| scheduled_at_gte | No | Start of period (ISO 8601) | |
| scheduled_at_lte | No | End of period (ISO 8601) | |
| status | No | Status filter | |
| tags | No | Tags filter (comma-separated) |
Implementation Reference
- src/tools/get_jobs_stats.ts:37-69 (handler)The handler function for the get_jobs_stats tool. It invokes agentJobsClient.getStats(params), processes the stats and filters from the response meta, formats them using formatJobStats, and returns a text content result or an error message.async (params) => { mcpDebugger.toolCall("get_jobs_stats", params); try { const response = await withTiming( () => agentJobsClient.getStats(params), "get_jobs_stats API call" ); const stats = response.meta?.stats || {}; const filters = response.meta?.filters || {}; mcpDebugger.debug("Raw API response", { stats, filters }); const result = { content: [{ type: "text" as const, text: formatJobStats(stats, filters), }] }; mcpDebugger.toolResponse("get_jobs_stats", result); return result; } catch (error: any) { mcpDebugger.toolError("get_jobs_stats", error); return { content: [{ type: "text" as const, text: `Error getting job stats: ${error.message}`, }], }; }
- src/tools/get_jobs_stats.ts:8-35 (schema)Schema definitions including jobStatusSchema (Zod enum for job statuses) and the inputSchema object defining optional parameters for filtering job stats like org_id, date ranges, job_type_id, etc.const jobStatusSchema = z.enum([ "waiting", "scheduled", "running", "completed", "failed", "canceled" ]); export default (server: McpServer) => { server.registerTool( "get_jobs_stats", { description: "Get aggregated statistics for agent jobs without retrieving individual job data. Optimized for dashboards and monitoring with minimal network overhead.", annotations: { title: "Get Job Statistics" }, inputSchema: { org_id: z.string().optional().describe("Filter by organization ID."), scheduled_at_gte: flexibleDateTimeSchema.optional().describe("Start of period (ISO 8601)"), scheduled_at_lte: flexibleDateTimeSchema.optional().describe("End of period (ISO 8601)"), created_at_gte: flexibleDateTimeSchema.optional().describe("Filter for jobs created at or after a specific time (ISO 8601)."), created_at_lte: flexibleDateTimeSchema.optional().describe("Filter for jobs created at or before a specific time (ISO 8601)."), job_type_id: z.string().optional().describe("Job type filter"), channel_code: z.string().optional().describe("Channel filter"), tags: z.string().optional().describe("Tags filter (comma-separated)"), status: jobStatusSchema.optional().describe("Status filter"), }
- src/tools/get_jobs_stats.ts:17-72 (registration)Default export is a function that registers the 'get_jobs_stats' tool on the MCP server, specifying the tool name, description, annotations, input schema, and handler callback.export default (server: McpServer) => { server.registerTool( "get_jobs_stats", { description: "Get aggregated statistics for agent jobs without retrieving individual job data. Optimized for dashboards and monitoring with minimal network overhead.", annotations: { title: "Get Job Statistics" }, inputSchema: { org_id: z.string().optional().describe("Filter by organization ID."), scheduled_at_gte: flexibleDateTimeSchema.optional().describe("Start of period (ISO 8601)"), scheduled_at_lte: flexibleDateTimeSchema.optional().describe("End of period (ISO 8601)"), created_at_gte: flexibleDateTimeSchema.optional().describe("Filter for jobs created at or after a specific time (ISO 8601)."), created_at_lte: flexibleDateTimeSchema.optional().describe("Filter for jobs created at or before a specific time (ISO 8601)."), job_type_id: z.string().optional().describe("Job type filter"), channel_code: z.string().optional().describe("Channel filter"), tags: z.string().optional().describe("Tags filter (comma-separated)"), status: jobStatusSchema.optional().describe("Status filter"), } }, async (params) => { mcpDebugger.toolCall("get_jobs_stats", params); try { const response = await withTiming( () => agentJobsClient.getStats(params), "get_jobs_stats API call" ); const stats = response.meta?.stats || {}; const filters = response.meta?.filters || {}; mcpDebugger.debug("Raw API response", { stats, filters }); const result = { content: [{ type: "text" as const, text: formatJobStats(stats, filters), }] }; mcpDebugger.toolResponse("get_jobs_stats", result); return result; } catch (error: any) { mcpDebugger.toolError("get_jobs_stats", error); return { content: [{ type: "text" as const, text: `Error getting job stats: ${error.message}`, }], }; } } ); }