FastMCP server that reads a pre-computed knowledge graph and suggests wikilinks, God Node connections, and community memberships for Obsidian vault notes.
Server has 4 tools with complete input schemas and descriptions, but quality is uneven. Tool names lack action verbs (suggest_links is acceptable, but check_god_nodes and community_match are vague). Descriptions are present but generic, most lack WHEN to use guidance or dependency hints. Parameters have types and descriptions, but lack constraints (enums, ranges). Output schemas are documented in descriptions but not formally specified. Error handling is minimal, no recovery guidance or actionable error messages. The log_suggestion tool is a write operation but lacks confirmation/dry-run pattern. Overall: functional but below production baseline.
Check which God Nodes (top 20 by degree) are relevant to the note. God Nodes are the most connected concepts in your vault. Linking to them creates high-value connections to the core ideas in your knowledge graph. Returns {node_id, label, degree, linked, should_link, reason} for each God Node.
Find which graph communities the note most closely belongs to. Returns top max_matches communities: {community_id, match_score, matching_nodes, total_nodes_in_community}.
Log a user decision (accept/reject) on a suggestion to the SQLite log. Used to track which suggestions were helpful, enabling future refinement.
Suggest wikilinks for an Obsidian note based on the knowledge graph. Returns a list of {node_id, label, confidence, reason} sorted by confidence desc.
Tool names lack clear action verbs. 'check_god_nodes' and 'community_match' are vague, LLMs cannot infer intent from names alone. Should be 'find_god_nodes' and 'find_communities' or similar.
Descriptions lack WHEN-to-use guidance and dependency hints. E.g., suggest_links does not explain when to call it vs. check_god_nodes, or that it requires note_content to be non-empty. Descriptions should be 50 - 200 chars and answer: What? When? Why?
No input validation or error guidance. If graph.json is missing or malformed, suggest_links returns [{'error': str(e)}], unstructured and unhelpful to LLM. Should return structured error with recovery hint: 'Graph not found. Ensure GRAPH_JSON_PATH is set and graph.json exists.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
log_suggestion is a write operation (modifies SQLite) but lacks confirmation/dry-run pattern. Agents should be able to preview what will be logged before committing. No idempotency guarantee, repeated calls with same params create duplicate log entries.
Output schemas are documented in prose but not formally specified. Descriptions say 'Returns {node_id, label, confidence, reason}' but no JSON Schema for response. LLMs cannot reliably parse unstructured output.