An MCP server with two clocks, and the instruments that hold it to them
Strong schema definitions with complete JSON Schema validation and excellent descriptions that guide LLM tool selection. All 7 tools have clear, domain-specific descriptions (avg 180 chars) explaining WHAT, WHEN, and WHY. Schemas are properly typed with date patterns and constraints. However, parameter descriptions are sparse (entity, attribute, value lack detail), and output schemas are entirely undocumented. No error handling guidance or recovery paths. Tool naming is verb-based but unconventional (memory_* prefix rather than standard get_/create_/update_ verbs), which may reduce LLM discoverability. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write semantics.
What the system BELIEVED about an entity at a point in time. `valid_time` is when the fact was true of the world; `known_at` is when we knew it. Set `known_at` to a past date to reconstruct what an earlier decision was based on, including beliefs later found to be wrong. Omit it to use today.
Record a new fact. `valid_from` is when it became true of the world, which may be earlier than today; the system stamps its own clock separately and never overwrites it.
Supersede an earlier fact. Use this rather than asserting again when the previous value was WRONG: the old belief stays queryable at its original transaction time, so an audit can still see what a past decision was based on. `valid_from` may be back-dated.
Record that a fact was never true. It stops being returned from today onwards and stays visible to queries whose `known_at` predates this call.
Full-text search over entities and attributes. Deliberately thin: this server is about the two clocks, not about retrieval quality.
Output schemas completely undocumented. No tool returns a documented response structure. LLMs cannot plan downstream calls or extract required fields without trial-and-error.
Parameter descriptions missing or minimal. 'entity', 'attribute', 'value' lack detail on format, constraints, or examples. 'note' parameter in memory_correct and memory_retract has no description.
No error handling guidance. Tools provide no recovery hints (e.g., 'Entity not found. Try memory_search() first.'). LLMs cannot self-correct on failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Row counts and the date range each clock covers.
How one attribute's believed value changed across valid time, holding the transaction clock fixed at `known_at`. Two calls with different `known_at` return different timelines whenever a back-dated correction sits between them.
Tool naming uses memory_* prefix instead of standard action verbs (get_, create_, update_, delete_). Non-standard naming reduces LLM discoverability and conflicts with verb-first conventions.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools clearly have read vs. write semantics (memory_assert/correct/retract are destructive; memory_as_of/timeline/search are read-only), but this is not declared in the schema.