A Model Context Protocol (MCP) server for Roam Research API integration
18 tools with mostly complete schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. Tool names follow verb_noun convention well (roam_remember, roam_search_by_text). Descriptions average ~80 chars, below the 194-char baseline for A+ tools. Most parameters lack detailed format/constraint guidance. No output schemas documented. Error handling present but minimal recovery guidance. Composition is reasonable, tools are single-purpose and chainable via UIDs.
Add one or more todos to the Roam Research graph
Create a new block in Roam Research
Create a hierarchical outline structure in Roam Research
Create a new page in Roam Research with optional content
Execute a raw Datomic query against the Roam Research graph
Fetch a page from Roam Research by its title
Find pages that were modified today
Output schemas not documented. LLMs cannot infer what fields are returned or plan downstream tool calls. E.g., roam_fetch_page_by_title, roam_search_by_text, roam_datomic_query lack return type documentation.
Parameter descriptions lack format/constraint guidance. E.g., 'start_date' and 'end_date' in roam_search_by_date do not specify ISO 8601 format. 'max_depth' in roam_search_hierarchy lacks min/max bounds. 'max_num_pages' in roam_find_pages_modified_today has no range.
Tool descriptions are brief (avg ~70 chars vs 194-char baseline). Missing WHEN to use, prerequisites, and side-effect clarity. E.g., roam_datomic_query description does not explain Datomic syntax requirements or when to use vs higher-level search tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Import markdown content into Roam Research, converting it to Roam format
Retrieve stored memories, optionally sorted and filtered by tag
Store a memory with optional categories for later recall
Search for block references within the graph
Search for blocks or pages created or modified within a date range
Search for blocks with a specific status (TODO or DONE)
Search for blocks containing specific text
Search for blocks that reference a specific tag/page
Search for parent-child relationships in the block hierarchy
Update the content of a block, optionally using a regex transformation
Update multiple blocks in a single operation
No error handling guidance. Tools return errors but do not tell LLMs what to do next (retry, ask user, try alternative tool). E.g., roam_fetch_page_by_title does not guide recovery if page not found.
Destructive operations (roam_update_block, roam_update_multiple_blocks, roam_create_page) lack confirmation/dry-run support. Agents can accidentally overwrite or delete content without safeguards.