Production MCP server + worker daemon: a durable SQLite job queue with isolated child-process execution, per-job timeouts, retries, and backpressure.
Five tools with clear verb-noun naming (submit_job, get_job, list_jobs, cancel_job, get_stats). All have descriptions (194 - 392 chars, within baseline). Input schemas use Zod with type definitions and parameter descriptions. Error handling returns typed errors with recovery guidance (e.g., 'Unknown job type' lists valid types). Output structure documented via toJobView(). Key gaps: no tool annotations (readOnlyHint/destructiveHint/idempotentHint), output schemas not formally documented in tool registration, and parameter constraints (e.g., maxAttempts min=1) are in Zod but not always reflected in descriptions.
Cancel a job that is still queued. Running or already-finished jobs cannot be cancelled and return a NOT_CANCELLABLE error.
Fetch a single job by id, including its status, result, and artifact path.
Return queue health: job counts by status, total, age of the oldest queued job, and the active configuration. No sensitive data.
List recent jobs (newest first), optionally filtered by status.
Enqueue a job for asynchronous execution by the worker. Returns the created job (status 'queued'). Valid `type` values are the registered handlers: echo, wait, hash, fibonacci, fail. The job runs in an isolated process under a timeout, with automatic retries.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot infer which tools are safe to retry or have side effects without explicit hints.
Output schemas not formally documented in tool registration. Descriptions mention 'returns the created job' but do not specify the structure (id, status, type, payload, result, etc.). LLMs must infer output shape from examples.
Parameter descriptions do not always reflect Zod constraints. E.g., maxAttempts has min(1) in schema but description says 'default 3' without stating the minimum. Constraints should be explicit in descriptions for LLM clarity.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2025-06-18+ | v2 |
get_stats description is vague ('Return queue health'). Does not explain what 'health' means or what fields are returned. LLMs cannot determine when to call this vs list_jobs.
Error messages are typed (jobError) but recovery guidance is inconsistent. submit_job lists valid types on error; cancel_job does not suggest alternatives. Standardize error responses across all tools.