Schema-compatible Rust drop-in for the core tools of mcp-memory-service
Server has 8 well-structured tools with explicit schemas and descriptions. All tools are registered via rmcp macros with names, descriptions, and input parameter types. Schemas use schemars::JsonSchema derive, providing type safety. However, descriptions are terse (avg ~60 chars, below the 194-char baseline), lack WHEN/WHY context, and several parameters lack descriptions. Error handling is present but minimal, no recovery guidance or actionable error messages. Output schemas are documented in code but not in descriptions. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk levels.
Check database health and schema status.
Soft-delete memories matching the given filter. Pass dry_run=true to preview. Supports content_hash, tags, memory_type, and before/after ISO8601 or epoch timestamps.
Get cache and performance statistics.
List all memories with pagination and optional filtering.
Health probe: returns backend state and sqlite-vec version.
Semantic search: return top N memories by cosine similarity to query.
Return memories whose tags match. Tag matching is case-sensitive; multi-tag queries use 'any' (OR) or 'all' (AND).
Descriptions lack WHEN/WHY context and are below baseline (avg 60 chars vs 194-char baseline). LLMs cannot determine when to select store_memory vs retrieve_memory vs search_by_tag without richer guidance.
delete_memory is destructive but lacks dry_run guidance in description. While dry_run parameter exists, the description does not emphasize the confirmation pattern or explain when to use it.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are missing from all tool definitions. Risk levels are known (ping=READ_ONLY, delete_memory=DESTRUCTIVE) but not declared in schema.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Store a memory with semantic indexing. Dedup by SHA256 content hash.
Error handling is minimal. No recovery guidance (e.g., 'If embedding fails, check embedder service'). Error responses are likely raw internal_err() calls without actionable context for LLM retry logic.
store_memory accepts tags as 'either a comma-separated string or an array' but parameter schema shows type=['string','array']. This union type is ambiguous for LLMs; should normalize to array-only input.