Python implementation of an MCP server that processes and saves memory in the form of knowledge graph.
Server provides 8 tools with complete JSON schemas and basic descriptions. However, descriptions are generic and lack actionable context for LLM selection. Parameter descriptions are minimal (1-5 words). No error handling guidance, no output schema documentation, and no tool annotations (destructiveHint, readOnlyHint). Tool names follow verb_noun convention but descriptions do not explain WHEN to use each tool or what happens on failure. Schemas are present but descriptions fall short of the 50-200 char LLM-optimized baseline (avg ~60 chars, mostly under 20 chars for params).
Add observations to existing entities in the knowledge graph. Filters out observations that already exist.
Create entities in the knowledge graph. Filters out entities that already exist by name.
Create relations between entities in the knowledge graph. Filters out relations that already exist.
Delete entities from the knowledge graph. Also removes all relations that reference the deleted entities.
Delete specific observations from entities in the knowledge graph.
Delete relations from the knowledge graph.
Read the entire knowledge graph.
Destructive tools (delete_entities, delete_observations, delete_relations) lack confirmation/dry-run support and error recovery guidance. No description warns LLMs of irreversible consequences.
Tool descriptions are generic and do not explain WHEN to use each tool vs alternatives. E.g., 'Create entities' does not distinguish from 'add_observations'. LLMs cannot infer selection criteria.
No output schema documentation. read_graph and search_nodes return unspecified structures. LLMs cannot plan downstream calls or extract required fields (e.g., entity IDs for chaining).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Search for entities and relations in the knowledge graph by query string. Returns filtered entities and relations between them.
Parameter descriptions are minimal (1-5 words). 'List of entities to create' lacks format guidance, constraints, or examples. LLMs cannot validate input before calling.
No tool annotations (destructiveHint, readOnlyHint, idempotentHint). Clients cannot distinguish safe reads from destructive writes without parsing descriptions.