Standalone MCP server that wraps the Remembra Python SDK, exposing memory operations as tools for AI assistants. Supports stdio, SSE, and streamable-http transports.
Two tools with adequate descriptions and clear action verbs, but critical gaps in input schema documentation and output schemas. Tool names follow verb_noun convention (store_memory, recall_memories). Both descriptions explain WHAT the tools do and WHEN to use them, meeting the 10-1024 char baseline. However, the input schemas visible in the source lack proper type definitions and detailed parameter constraints. Output schemas are not documented at all, LLMs cannot plan downstream calls or understand return structures. Parameter descriptions are present but inconsistent in detail (metadata and ttl lack constraint information). No error handling guidance provided. The semantic search feature (hybrid search) is mentioned but not formally constrained (what constitutes 'relevance', exact threshold behavior). The WRITE and READ_ONLY risk classifications are correct but not reflected in tool annotations. Overall, this is a functional but incomplete definition that would require agent experimentation to use safely.
Search persistent memory for relevant information. Use this BEFORE answering questions about past decisions, context, people, projects, or anything that might have been discussed previously. Performs hybrid search (semantic + keyword) across all stored memories.
Store information in persistent memory. Use this to save important facts, decisions, context, and notes that should persist across sessions. The content is automatically processed to extract entities (people, organizations, locations) and facts.
No documented output schema. LLMs cannot determine what fields to expect from store_memory (does it return a memory_id? confirmation? metadata echoed back?) or recall_memories (what structure contains the matched memories? Are they arrays of objects? What fields per memory?). This forces agents to infer structure from trial and error.
Parameters lack formal type constraints. 'ttl' is documented as a string with examples ("24h", "7d") but no regex pattern or enum is defined. 'filters' is described as 'metadata filters' and 'object' but the expected shape (key names, value types) is not specified. 'threshold' accepts 0.0-1.0 but no explicit min/max constraints in schema. LLMs must guess valid formats.
Missing parameter descriptions for compound types. 'metadata' (object) and 'filters' (object) lack examples of valid structures. E.g., are metadata values strings only, or can they be numbers/booleans? Can filters nest (e.g. {"source": {"type": "meeting"}}), or are they flat? Description text does not clarify.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | 1.0.0+ | v1 |
No error handling guidance. What happens if store_memory hits storage quota? If recall_memories query is malformed? If entity extraction fails (mentioned in description)? Tools provide no recovery hints ('Try reducing limit', 'Check filter syntax', 'Contact admin if quota exceeded'). Agents cannot self-correct.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are declared as present but not visible in source. recall_memories should have readOnlyHint=true; store_memory should not. Without explicit annotations in the schema, clients cannot optimize routing or enforce safety policies.
recall_memories 'slim' parameter trades payload size for structure. If slim=true returns a synthesized string, LLMs cannot extract individual memory IDs or metadata for follow-up calls. This breaks tool chaining, agents cannot call store_memory with references to recalled facts.
Pagination not addressed. recall_memories accepts 'limit' (1-50, default 5) but no cursor, offset, or next_page indicator. If a query matches 100 memories, agents cannot iterate through results. Large result sets risk context window exhaustion.
TTL behavior underdocumented. store_memory accepts ttl ("24h", "7d", etc.) but what happens at expiry? Is the memory deleted silently? Returned with an 'expired' flag? Does recall_memories filter out expired memories automatically? Agents cannot reason about stale data without knowing lifecycle behavior.