MCP server for enabling memory for Claude through a knowledge graph
The MCP Memory Server defines 4 tools with explicit Zod schemas and descriptions. All tools have input schemas with types and descriptions present. However, there are notable gaps in output schema documentation, parameter naming clarity, and error handling guidance. The naming follows verb_noun patterns (remember, retrieve, remove), which is good. Descriptions are present but generic (100-150 chars), lacking context on WHEN to use each tool or recovery guidance. Parameter descriptions are adequate but lack examples of valid formats. No output schemas are documented, forcing LLMs to infer response structure. Error handling exists (try-catch blocks) but returns raw error messages without actionable recovery guidance. Tool composition is clean, each tool has a single responsibility, but missing features like dry-run for destructive operations and batch variants.
Stores a memory with optional tags in a specified category
Removes all memories within a specified category
Removes a specific memory within a specified category
Retrieves all memories from a specified category
Output schemas not documented. All tools return text content without specifying expected fields, structure, or format. LLMs cannot plan downstream tool calls or extract structured data reliably.
Destructive tools (remove_memory_category, remove_specific_memory) lack confirmation/dry-run capability. An LLM can wipe all memories in a category with no safety gate or preview step before execution.
Error messages are raw and non-actionable. Returning 'Error: <message>' does not guide the LLM on whether to retry, ask the user, or try an alternative. Example: 'File not found' gives no recovery path.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Parameter descriptions lack format/constraint hints. The 'category' param (minLength:1) requires a string but does not explain valid naming patterns (alphanumeric, spaces, special chars?). 'data' parameter lacks guidance on size limits or format.
Tool descriptions lack WHEN-to-use context. 'Stores a memory...' tells WHAT it does but not WHEN an agent should call it vs. alternative approaches or dependencies. Descriptions average 80-120 chars; should target 150-250 for context-rich selection.
'retrieve_memories' returns JSON.stringify(memories, null, 2) without structure hint. LLMs cannot know if 'memories' is an array of strings, objects with {id, content, tags}, or nested maps. Undocumented output forces parsing guesses.
No pagination support. 'retrieve_memories' with category='*' could return thousands of entries, exhausting context window. Missing limit and offset/cursor parameters.
Global vs. local memory distinction uses a boolean flag (is_global) rather than semantic parameter names. LLMs may conflate this with 'include_global' or forget the parameter. Consider separate tools or an enum like storage_scope: 'global|local'.