Roam Research

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MEMORIES_TAGNoThe tag used for marking memories in Roam#[[LLM/Memories]]
ROAM_API_TOKENYesYour Roam Research API token from graph settings
ROAM_GRAPH_NAMEYesThe name of your Roam Research graph

Schema

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Tools

Functions exposed to the LLM to take actions

NameDescription
roam_add_todo

Add a list of todo items as individual blocks to today's daily page in Roam. Each item becomes its own actionable block with todo status. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words).

roam_fetch_page_by_title

Retrieve complete page contents by exact title, including all nested blocks and resolved block references. Use for accessing daily pages, reading and analyzing existing Roam pages.

roam_create_page

Create a new standalone page in Roam with optional content using explicit nesting levels. Best for:

  • Creating foundational concept pages that other pages will link to/from
  • Establishing new topic areas that need their own namespace
  • Setting up reference materials or documentation
  • Making permanent collections of information.
roam_create_block

Add a new block to an existing Roam page. If no page specified, adds to today's daily note. Best for capturing immediate thoughts, additions to discussions, or content that doesn't warrant its own page. Can specify page by title or UID. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words).

roam_create_outline

Add a structured outline to an existing page or block (by title text or uid), with customizable nesting levels. Best for:

  • Adding supplementary structured content to existing pages
  • Creating temporary or working outlines (meeting notes, brainstorms)
  • Organizing thoughts or research under a specific topic
  • Breaking down subtopics or components of a larger concept
roam_import_markdown

Import nested markdown content into Roam under a specific block. Can locate the parent block by UID or by exact string match within a specific page.

roam_search_for_tag

Search for blocks containing a specific tag and optionally filter by blocks that also contain another tag nearby. Example: Use this to search for memories that are tagged with the MEMORIES_TAG.

roam_search_by_status

Search for blocks with a specific status (TODO/DONE) across all pages or within a specific page.

roam_search_block_refs

Search for block references within a page or across the entire graph. Can search for references to a specific block or find all block references.

roam_search_hierarchy

Search for parent or child blocks in the block hierarchy. Can search up or down the hierarchy from a given block.

roam_find_pages_modified_today

Find pages that have been modified today (since midnight), with limit.

roam_search_by_text

Search for blocks containing specific text across all pages or within a specific page.

roam_update_block

Update a single block identified by its UID. Use this for individual block updates when you need to either replace the entire content or apply a transform pattern to modify specific parts of the content. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words).

roam_update_multiple_blocks

Efficiently update multiple blocks in a single batch operation. Use this when you need to update several blocks at once to avoid making multiple separate API calls. Each block in the batch can independently either have its content replaced or transformed using a pattern. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words).

roam_search_by_date

Search for blocks or pages based on creation or modification dates. Not for daily pages with ordinal date titles.

roam_remember

Add a memory or piece of information to remember, stored on the daily page with MEMORIES_TAG tag and optional categories. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words).

roam_recall

Retrieve all stored memories on page titled MEMORIES_TAG, or tagged block content with the same name. Returns a combined, deduplicated list of memories. Optionally filter blcoks with a specified tag and sort by creation date.

roam_datomic_query

Execute a custom Datomic query on the Roam graph beyond the available search tools. This provides direct access to Roam's query engine for advanced data retrieval. Note: Roam graph is case-sensitive. List of some of Roam's data model Namespaces and Attributes: ancestor (descendants), attrs (lookup), block (children, heading, open, order, page, parents, props, refs, string, text-align, uid), children (view-type), create (email, time), descendant (ancestors), edit (email, seen-by, time), entity (attrs), log (id), node (title), page (uid, title), refs (text). Predicates (clojure.string/includes?, clojure.string/starts-with?, clojure.string/ends-with?, <, >, <=, >=, =, not=, !=). Aggregates (distinct, count, sum, max, min, avg, limit). Tips: Use :block/parents for all ancestor levels, :block/children for direct descendants only; combine clojure.string for complex matching, use distinct to deduplicate, leverage Pull patterns for hierarchies, handle case-sensitivity carefully, and chain ancestry rules for multi-level queries.