Persistent semantic memory for AI agents — a single self-contained stdio MCP server over SQLite + sqlite-vec with local llama.cpp embeddings.
8 tools with complete JSON schemas and descriptions. Naming is verb-noun consistent (memory_*). Descriptions are adequate (50-150 chars) but lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Parameters are well-typed with constraints (enums for mode/tag_match, ranges for limit/page_size). Output schemas are documented in code comments but not exposed in tool definitions, LLMs cannot see them. Error handling is present but generic (no recovery guidance). Security: no secrets in params, but no permission gates or audit trail declarations. Composition is clean, each tool has one responsibility. Major gap: output schemas not visible to clients; descriptions lack dependency hints and use-case guidance.
Delete memories by content hash, tags, or date range
Query the association graph for connected memories, paths, or suggestions
Check database health and query statistics
List memories with pagination and filtering
Search memories using semantic, exact, hybrid, or ranked modes
Get memory statistics and database metrics
Store a memory in the persistent store
Output schemas not exposed to clients. Code comments document return shapes (plain text vs JSON-stringified), but tool definitions lack explicit output schema declarations. LLMs cannot plan downstream parsing or validate responses.
Descriptions lack LLM-optimized guidance. No hints on WHEN to use memory_search vs memory_list, or when semantic vs exact mode is appropriate. No dependency hints (e.g., 'Call memory_list first to discover available tags'). Descriptions are functional but not agent-optimized.
Destructive operations (memory_delete, memory_update) lack confirmation/dry-run guidance in descriptions. memory_delete has dry_run param but description does not explain when to use it or how to confirm before executing.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Update memory metadata or content
Error handling is generic. No recovery guidance in tool descriptions. If memory_search returns no results or memory_store fails due to embedding service, LLM has no guidance on next steps.
memory_graph action parameter accepts free-form string ('connected | path | subgraph | infer | suggest') but should be an enum. LLMs may hallucinate invalid actions like 'entity' or 'abduct' (which code comments note are unimplemented).