Model Context Protocol server for org-roam knowledge base integration
This server presents moderate definition quality with complete schemas and reasonable descriptions, but exhibits several pattern gaps. All 7 tools have explicit registrations in server.py with input schemas and descriptions. Tool names follow verb-noun convention (search_, get_, create_, update_, add_, list_). However, descriptions are inconsistent in depth, some are 8-11 words while others lack contextual clarity about when to use them versus similar tools. Parameter descriptions are present but generic ('ID of the node to retrieve' repeated across get_node and get_backlinks). Output schemas are entirely undocumented, the tool implementations suggest JSON responses, but the tool definitions omit schema documentation, leaving LLMs unable to plan downstream calls or extract specific fields. Error handling is absent from tool descriptions, callers cannot distinguish retryable from fatal failures. All write tools (create_node, update_node, add_link) lack confirmation steps or dry-run capability, violating the confirmation-request pattern for irreversible operations.
Add a link from one node to another
Create a new org-roam node
Get all nodes that link to a specific node
Get detailed information about a specific node
List all org files in the org-roam directory
Search for nodes by title, tags, or aliases
Update content of an existing node
Output schemas are completely undocumented. Tool definitions provide no schema for return values. LLMs cannot plan downstream calls, extract required fields for chaining, or validate response structure. This violates pattern:tool and pattern:response-shaper.
Write tools (create_node, update_node, add_link) have no confirmation step or dry-run capability. Agents can irreversibly modify the knowledge base without approval. Violates pattern:confirmation-request.
Descriptions lack context about when to use each tool. 'Get detailed information about a specific node' (get_node) vs 'Get all nodes that link to a specific node' (get_backlinks) are described identically, no guidance on which to call first or when backlinks are needed. Violates pattern:tool-description.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Error handling is absent. Tool descriptions provide no guidance on what errors may occur, whether they are retryable, or what the LLM should do next. Violates pattern:recovery-guide and pattern:error-classification.
Parameter descriptions are generic and lack actionable constraints. 'ID of the node to retrieve' repeated across tools. No guidance on format (UUID, integer, string?), required structure, or what happens if node_id is invalid. Violates pattern:tool-description and review:param-validation-rules.
search_nodes accepts 'limit' parameter with default 50, but no minimum/maximum bounds documented. Unbounded integers can cause runaway queries and context window exhaustion. Violates review:param-validation-rules.
create_node offers 'tags' as array with no schema for individual tag elements (string?), no length limits, and no validation guidance. Agents may pass invalid tag structures. Violates pattern:constrained-input.
list_files has no parameter constraints or description of what constitutes an 'org file'. Does it recurse into subdirectories? Does it include backups or temporary files? Does it return absolute paths or relative? Violates pattern:tool-description.