SQLite-backed MCP server for persistent memory, full-text retrieval, and graph traversal.
Memory MCP Server demonstrates strong schema discipline, comprehensive parameter documentation, and thoughtful tool design centered around a graph-backed memory abstraction. All 13 tools are explicitly registered with input/output schemas (visible in src/lib/tool-contracts.ts), descriptions range 75 - 180 chars (within baseline 34 - 392), and parameters consistently include type, description, and constraints. Tool annotations (readOnlyHint, idempotentHint, destructiveHint) are correctly applied per operation semantics. Batch operations (store_memories, delete_memories) follow composition best practices. However, several gaps prevent an A grade: (1) error handling is declared at the schema level but lacks actionable recovery guidance in descriptions (e.g., 'Returns E_NOT_FOUND if missing' does not explain what the agent should do next); (2) output schema documentation is complete but terse, no guidance on which fields enable chaining (e.g., which fields from recall() should be passed to downstream tools); (3) some parameter constraints are encoded in descriptions but lack formal JSON Schema constraints (e.g., 'importance_min: 0-10' is stated in text, not as minValue/maxValue); (4) secret injection and audit trail patterns are not addressed in visible code.
Create directed edge. Idempotent. Errors if endpoints missing.
Delete 1-50 memories atomically. Cascade deletes. Rolls back on error.
Delete memory by hash. Cascade deletes relationships. Idempotent.
Delete edge. Exact match required. Idempotent (deleted: false if missing).
Retrieve memory by SHA-256 hash. Returns E_NOT_FOUND if missing.
Get relationships for memory. Filter direction. Inlines related memory.
Get global stats: counts, timestamps, importance.
Error handling descriptions lack actionable recovery guidance. E.g., get_memory states 'Returns E_NOT_FOUND if missing' but does not suggest the agent call search_memories() first or provide alternative actions.
Output schema documentation is complete but lacks explicit chaining guidance. E.g., recall() returns 'memories+edges' but does not document which fields (hash, relation_type) downstream tools (update_memory, create_relationship) require for continuation.
Numeric parameter constraints are stated in descriptions (e.g., 'importance: 0-10', 'limit: 1-100') but not formalized in JSON Schema minValue/maxValue properties. This prevents schema-level validation and LLM guidance.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 71 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
FTS search + BFS traversal (depth hops). Returns memories+edges. Emits progress. Aborts on limit.
FTS search within token budget. Sorts by relevance/importance/recency. Supports importance and type filters. Returns truncated: true if limit hit.
Full-text search (content+tags). Ranked, paginated. Alphanumeric/underscore only. Implicit AND.
Store 1-50 memories atomically. Idempotent. Rolls back on error.
Store single memory. Returns hash. Idempotent (created: false if exists). Prefer store_memories.
Update content and/or tags (at least one required). Returns old+new hash. Cascade updates relationships.
No visible password/credential handling or server-side secret injection pattern. If credentials are required for downstream APIs (e.g., embedding service, external KG), they should not appear as tool parameters.
Destructive operations (delete_memory, delete_memories, delete_relationship) lack confirmation-request or dry-run support. An agent could accidentally cascade-delete an entire knowledge graph.
No visible audit trail or permission-gate pattern. The server does not document who called which tool, with what parameters, or what the authorization rules are. Compliance and debugging become difficult.