memoryhub provides 16 tools with complete JSON schemas and descriptions for all parameters. Naming follows verb_noun conventions (add_, search_, delete_, etc.). Descriptions are present and substantive (avg ~150 chars), explaining WHAT each tool does and WHEN to use it. However, several tools lack output schema documentation, error handling guidance is minimal, and some parameter descriptions could be more prescriptive about constraints and formats. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Batch operations and pagination are well-designed. Security-sensitive tools (delete_all_memories, update_config) lack permission gates or confirmation patterns.
Store text (LLM extracts facts, embeds, stores). Deduplicates semantically similar memories by default.
Add multiple texts in one call. Each item follows add_memories semantics; results are reported per item and item-level failures do not abort the batch.
Delete ALL memories (or filter by project).
Delete specific memories by IDs.
Export all memories (optionally filtered by project/source) as JSON for backup or migration.
Show current runtime configuration.
Get multiple memories by IDs.
No output schemas documented. Tools return results but LLMs cannot plan downstream calls without knowing response structure (e.g., what fields does search_memory return? Is there a next_cursor for pagination?).
Destructive tools (delete_memories, delete_all_memories, update_config with persist=true) lack confirmation patterns or dry-run support. Agents can irreversibly delete all memories without safeguards.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in metadata. LLMs cannot infer safety properties from names alone.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Get a single memory by ID.
Check connectivity to Qdrant.
Import memories from export_memories JSON (array or {memories: [...]}). Texts are re-embedded on import; original IDs and metadata are preserved.
List stored memories with pagination; filter by project and/or source.
Get collection statistics (totals, per project/source, expiry, age).
Report-only audit of stale memories: expired, expiring soon, or older than N days. Never modifies data.
Semantic search across stored memories. Set exact=true to match the query text verbatim instead of by similarity; filter by project and/or source; min_score drops hits below a similarity threshold.
Update a config value at runtime. Set persist=true to write it to the config file (survives restart).
Update a memory's text (re-embeds).
Parameter descriptions lack prescriptive constraints. E.g., 'importance' accepts 0-1 but description does not state range; 'threshold' for deduplication lacks min/max; 'days' in review_stale is ambiguous (older_than_days also exists).
Error handling is not documented. Tools do not specify what errors are retryable, what user-fixable errors look like, or how to recover from failures (e.g., if Qdrant is unreachable, what should the agent do?).