An MCP server that gives LLMs persistent, searchable semantic memory
Server provides 7 well-named tools with complete input schemas and descriptions. All tools follow verb_noun naming (memory_store, memory_search, memory_get, memory_delete, memory_list, memory_stats, memory_update). Descriptions are present and actionable (avg ~80 chars). All parameters have type definitions and descriptions. However, output schemas are not formally documented, responses are inferred from code (e.g., memory_search returns {results, count} but this is not declared in a schema artifact). Error handling is minimal: memory_get returns {error: ...} on miss, but no guidance on recovery. No parameter constraints (enums, ranges) despite opportunities (e.g., min_score should be 0.0 - 1.0). No idempotency hints despite memory_store accepting optional id for upserts. Missing documentation of embedding generation side effects and potential failures.
Delete a memory by its ID.
Retrieve a specific memory by its ID.
List stored memories, optionally filtered by namespace or tags.
Semantic search over stored memories.
Return memory store statistics: total memories, namespace counts, DB path.
Persist a piece of information to long-term semantic memory.
Update an existing memory's content, namespace, tags, and/or metadata.
Output schemas not formally documented. Responses inferred from code (e.g., memory_search returns {results, count, score per item}) but no schema artifact or docstring declares structure. LLMs cannot reliably extract fields or plan downstream calls.
No parameter constraints despite opportunities. min_score accepts 0.0 - 1.0 but no range declared; top_k and limit have no bounds; namespace and tags have no format hints. Free-form strings invite invalid values.
Error handling lacks recovery guidance. memory_get returns {error: ...} on miss but does not suggest search_memories() or list_memories() as alternatives. memory_search silently returns empty results on embedding failure (no error signal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Embedding generation side effects undocumented. memory_store and memory_update call embedding_provider.generate() which may fail (network, rate limit, API key missing) but no error handling or timeout declared. LLM has no visibility into failure modes.
No idempotency or confirmation pattern for destructive operations. memory_delete has no dry-run or confirmation step. memory_update with content regenerates embedding but no rollback mechanism if embedding fails mid-operation.