Enhanced MCP server for enabling memory for Claude through a knowledge graph with semantic search, temporal tracking, confidence scores, and entity management
Better Memory MCP demonstrates solid foundational quality with 12 well-named tools following verb_noun conventions (create_entities, delete_relations, search_graph). All tools have descriptions (avg ~120 chars, within baseline 194 char average). Input schemas are visible and typed with JSON Schema. However, output schemas are not documented, the response structures for tools like read_graph and search_graph are inferred from code but not formally declared to the LLM. Error handling lacks recovery guidance and actionable error messages. Many parameter descriptions are generic ('Array of...') without explaining intent, constraints, or when to use them. Tool composition is sound, operations are atomic and chainable, but the server lacks confirmation/dry-run patterns for destructive operations (delete_entities, delete_observations, delete_relations), which is risky for agent autonomy. Parameter descriptions average ~50 chars but often omit format details, ranges, and dependencies.
Add new observations to existing entities. Observations are facts or notes about an entity with optional confidence scores and timestamps.
Archive entities without deleting them. Archived entities are marked as inactive but retain all their data.
Create new entities in the knowledge graph. Entities are the main objects in the knowledge graph and can have multiple observations.
Create relations between entities in the knowledge graph. Relations define how entities are connected.
Delete entities from the knowledge graph. When an entity is deleted, all relations connected to it are also deleted (cascade).
Delete specific observations from entities. Individual observation content can be removed while keeping the entity.
Output schemas not documented. Tools like read_graph, search_graph, and add_observations return structured responses (GraphSummary, EntitySummary, search results) but the schema is not formally declared to the LLM. This forces LLMs to infer response structure from behavior, increasing hallucination risk and preventing confident downstream tool chaining.
Destructive tools (delete_entities, delete_observations, delete_relations) lack confirmation or dry-run support. Agents can permanently erase data without multi-step confirmation. Pattern requires confirmation_request for irreversible operations.
Error handling lacks recovery guidance. The code (index.ts snippet truncated) does not show error messages that tell LLMs 'call X next' or categorize errors as retryable/user-fixable/fatal. Generic errors like 'Entity not found' offer no recovery path.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Delete specific relations from the knowledge graph. Relations connect entities together.
Merge two entities into one. The source entity is marked as merged and all its observations and relations are transferred to the target entity.
Read the entire knowledge graph. Returns a summary of all entities, relations, and observation counts. Can be filtered by entity type.
Rebuild the semantic search index from the current knowledge graph. Use this after making large changes to ensure semantic search accuracy.
Search the knowledge graph using semantic search powered by ModernColBERT. Returns entities and observations matching the query based on semantic similarity.
Restore archived entities back to active status.
Parameter descriptions lack specificity. Examples: 'Array of entity names to delete' (generic), 'Array of observation content strings' (does not explain format, length limits, or character restrictions). Descriptions should include format hints and constraints.
read_graph parameter 'entityType' has no default documented, and response schema (GraphSummary structure with entitySummary array, totalObservations count) is not declared in tool definition. LLMs cannot predict response fields for chaining.
search_graph 'limit' parameter has no max bound documented. Unbounded numeric parameters allow LLMs to pass absurd values (e.g., limit=999999) that could timeout or exhaust resources.
rebuild_search_index has empty input schema ({}). Tool purpose is clear (rebuild semantic index), but no documentation of when to call it, side effects, or expected duration. Should include description of triggering conditions.
Merge_entities description says 'The source entity is marked as merged and all its observations and relations are transferred to the target entity' but does not clarify: is the source deleted, archived, or kept? This ambiguity affects agent reasoning about side effects.