Local-first, MCP-native knowledge graph that turns your bookmarks, saves, and reads into a tool your AI agent queries — with source capture and agent indexing
Knowledge Graph server has solid naming conventions (verb_noun pattern: kg_search, kg_add_entity) and comprehensive parameter descriptions. All 9 tools have descriptions and input schemas with types. However, output schemas are documented only in docstrings, not formally in the schema definitions. Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. Parameter constraints (e.g., depth 1-3, importance_score 0.0-1.0) are documented in descriptions but not enforced via JSON Schema constraints. Missing tool annotations (readOnlyHint, destructiveHint) despite clear read/write distinction. Some descriptions are generic (kg_get_stats: 'Get knowledge graph statistics', 34 chars, below 50-char baseline for clarity).
Add a new entity to the knowledge graph.
Link two entities with a typed relation.
Find shortest conceptual path between two entities.
Get a single entity by ID with full details.
Get neighboring entities at a given traversal depth.
Get knowledge graph statistics: entity count, relation count, label distribution.
What changed: entities created in the last N days, newest first. No query needed — use for "what's new / what changed since last week" style recall.
Missing tool annotations (readOnlyHint, destructiveHint). Read-only tools (kg_search, kg_get_entity, etc.) and write tools (kg_add_entity, kg_add_relation) are not marked with MCP tool annotations, forcing LLMs to infer safety from descriptions alone.
Output schemas not formally documented in tool definitions. Docstrings describe return types (e.g., 'List of matching entities with id, name, label...'), but FastMCP tool registration does not include explicit output schema JSON Schema. LLMs cannot validate response structure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
Hybrid search (lexical + semantic + importance + recency) over the graph.
Update fields on an existing entity.
No error handling or recovery guidance. Tools return None or empty lists on failure without explaining why or suggesting next steps. E.g., kg_get_entity returns None if entity not found, no guidance to search first or list available entities.
Parameter constraints not enforced via JSON Schema. Depth (1-3), importance_score (0.0-1.0), and limit values are documented in descriptions but lack minimum/maximum in schema. LLMs may pass invalid values; server must validate and return actionable errors.
Generic description for kg_get_stats (34 chars). Below 50-char baseline for LLM clarity. Does not explain when to call it or what insights it provides. Should be: 'Retrieve entity count, relation count, and label distribution to understand graph structure and identify gaps.'