Memory server for universal-memory — wraps mem0 OSS, exposes REST + MCP HTTP endpoints
Two read-only tools with complete input schemas and reasonable descriptions. memory_search has a well-structured schema (query, limit, project) with proper constraints (limit 1-20). memory_state accepts a project parameter with regex validation. Both descriptions explain purpose and use cases. However, output schemas are not documented, LLMs cannot predict response structure. Descriptions are adequate (120-180 chars) but lack actionable guidance on when to use each tool or how results chain together. No error handling guidance provided. Risk classification (READ_ONLY) is present but tool annotations (readOnlyHint) are absent from the MCP protocol layer.
Semantic search over the universal-memory vault. Returns up to `limit` documents ranked by relevance to `query`. Use this to recall past decisions, session summaries, or authored knowledge. Default response is compact: each result has `id`, `title`, `score`, and `snippet` (first ~240 chars of body). The snippet is usually enough to answer the question — only use `?full=1` (append to the URL) when you need the complete document body.
Load the current state.md for a project. Returns the frontmatter and body. state.md is the LLM-merged snapshot of the project — current focus, in-flight work, recent decisions, next actions.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). memory_search returns 'id, title, score, snippet' but this is only in prose description, not a formal schema.
No error handling guidance. If a project slug is invalid or search returns no results, LLMs have no recovery path. Descriptions lack 'If X fails, try Y' recovery hints.
Tool annotations missing from MCP protocol layer. Risk classification (READ_ONLY) is noted in metadata but readOnlyHint is not exposed via MCP tool definition, limiting client-side optimization.
memory_search description mentions '?full=1' URL parameter but this is not reflected in the input schema. Parameter should be explicit (e.g., 'full_text' boolean) for LLM clarity.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
No guidance on tool composition. Descriptions do not explain when to call memory_search vs memory_state, or how results from one should inform the other.