MCP-native second brain with an automatic entity graph over your markdown notes.
korely-graphrag demonstrates solid fundamentals: all 5 tools have clear, action-verb names (search, read_item, get_related, list_notes, list_folders) and substantive descriptions (100-180 chars). Input schemas are fully visible with proper types and descriptions. Pagination is implemented (limit/offset). However, output schemas are not formally documented, the code returns dicts but LLMs cannot see the structure in advance. Parameter descriptions are adequate but lack constraint details (e.g., limit ranges, query format expectations). Error handling is minimal (read_item returns {"error": ...} but no recovery guidance). No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Overall: competent but missing polish for production-grade agent integration.
Return notes related to a given note via shared entities (graph traversal). Surfaces non-keyword connections — the killer feature vs vanilla RAG.
List distinct folders in the knowledge base with item counts.
List ingested notes, paginated, optionally filtered by folder.
Return full content + metadata for a single note by id.
Hybrid keyword + semantic search across all ingested notes.
Output schemas not documented. Code returns dicts (e.g., {"query", "count", "results"}) but LLMs cannot see the structure in advance. This forces agents to guess field names and types, increasing errors.
Parameter constraints missing. 'limit' parameters lack min/max bounds (e.g., list_notes accepts limit up to 100 in code but description does not state this). 'query' in search has no format guidance (length, character restrictions).
Error handling lacks recovery guidance. read_item and get_related return {"error": "item X not found"} but do not suggest next steps (e.g., 'Try search() to find the item'). Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
No tool annotations. All 5 tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. This prevents agents from reasoning about safety and retry semantics.
Parameter descriptions lack dependency hints. 'folder' in list_notes could reference list_folders() to discover valid values, but does not. 'item_id' in read_item and get_related could suggest search() as a discovery path.