MCP server for recording and observing agent task execution, checkpoints, decisions, obstacles, and artifacts in a structured event stream.
Loomscope Observer provides three well-named, verb-prefixed tools (observe_start, observe_report, observe_finish) with clear, actionable descriptions (60 - 150 chars each). All tools have complete JSON Schema input definitions with required fields and typed properties. However, parameter descriptions are sparse or missing for many fields (e.g., 'metadata' in observe_start lacks guidance on expected structure; 'artifacts' array in observe_report has no item schema). Output schemas are not documented. Error handling is minimal, no recovery guidance or categorization. The tools follow a logical composition pattern (lifecycle: start → report → finish) but lack idempotency hints and confirmation patterns for the WRITE-risk operations.
Record the final outcome, verification result, and useful artifacts. Call exactly once when the task ends.
Record a meaningful checkpoint, decision, obstacle, or artifact. Do not report private reasoning or raw command logs.
Record the start of an agent task. Call once after the initial plan is known.
Parameter descriptions incomplete. 'metadata' (object type) in all three tools lacks guidance on expected structure, keys, or constraints. 'artifacts' array in observe_report and observe_finish has no item schema or format specification.
No output schema documented. LLMs cannot infer what these tools return (success confirmation, run ID, event ID, etc.), forcing guesswork on downstream chaining.
No error handling guidance. Tools marked WRITE risk but lack recovery hints (e.g., 'If runId not found, call observe_start first'). No categorization of retryable vs. fatal errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
No idempotency or confirmation pattern. observe_finish is irreversible (marks task complete) but lacks dry-run or confirmation step. Agents could accidentally finalize runs.
Enum constraints present but descriptions do not reinforce them. 'type' in observe_report has enum ['checkpoint','decision','obstacle','artifact'] but description does not explain when to use each.