One memory that follows you across every AI app. A user-owned JSON memory store exposed over MCP, so Claude, ChatGPT, Cursor and anything else read and write the SAME memory. No vendor lock-in, no cloud, no embeddings.
Five tools with clear verb-noun naming (remember, recall, forget, list-memories, export-memories). All have descriptions (avg 120 chars, within baseline 34-392). Input schemas present with Zod validation and type constraints. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) correctly applied. However, parameter descriptions are minimal (1-2 sentences), output schemas are undocumented (responses are free-text JSON via text() helper), and error handling lacks recovery guidance. No pagination support despite recall accepting a limit parameter. Missing field-level documentation for returned objects (e.g., what fields does a memory object contain?).
Export the entire memory store as JSON — it's yours, take it anywhere. Free.
Delete a memory by id. The user owns their data — including the right to remove it.
List all stored memories, newest first. Free.
Retrieve the most relevant stored memories for a query. Call this at the start of a task to load what you already know about the user.
Store a durable memory about the user (a preference, fact, project, person). Available to every AI app that connects this server.
Output schemas undocumented. All tools return free-text JSON via text() helper with no declared structure. LLMs cannot plan downstream operations or extract typed fields reliably.
Parameter descriptions are minimal (1-2 words). 'The thing to remember' and 'What you want to remember about' lack format guidance, constraints, or examples. Baseline for A+ tools is 72 chars avg per param.
No error recovery guidance. forget() returns bare strings ('No memory with id X') instead of actionable errors. recall() returns 'No relevant memories' without suggesting next steps (e.g., 'Try list-memories to see all stored items').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
recall() accepts limit parameter but no pagination cursor/offset. Large memory stores will return all results up to limit, risking context window exhaustion. No next_cursor or total_count in response.
No dry-run or confirmation for destructive forget() operation. Agents can permanently delete memories without a confirmation step, risking data loss from LLM mistakes.