MCP App Store
Productivity
Roam Research icon

Roam Research

by Roam Research Inc.

Overview

Roam Research is an outliner-based, networked note-taking tool. This connector lets Claude work directly with your selected Roam graphs. Claude can: - Read and search your pages, blocks, daily notes, comments, and backlinks - Run structured and Datalog queries across your graph - Create and edit pages, blocks, and daily-note entries, add comments, and reorganize blocks - Append or capture information to your encrypted graphs At the start of work in a graph, Claude loads that graph's guidelines, including your naming conventions, page structure, and recorded preferences, so its reads and writes match how you actually use Roam instead of imposing a generic format. You stay in control: - Choose which graphs to connect and what access level each graph gets - Every change Claude makes is attributed to a distinct "(AI)" author in your graph, so AI edits are always easy to find and review - Adjust a graph's access or disconnect it at any time To get started, add the connector, sign in to Roam, and pick which graph(s) Claude should use.

Tools

add_comment

ChatGPT
Add a comment to a block (comment thread, NOT a child block). Prefer comment for simple text; use commentMarkdown for structured content. Same-day calls on the same block append to your existing comment. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

add_comment

ChatGPT
Add a comment to a block (comment thread, NOT a child block). Prefer comment for simple text; use commentMarkdown for structured content. Same-day calls on the same block append to your existing comment. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

add_comment

ChatGPT
Add a comment to a block (comment thread, NOT a child block). Prefer comment for simple text; use commentMarkdown for structured content. Same-day calls on the same block append to your existing comment. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

append_to_daily_note

ChatGPT
Append (capture) markdown to a daily note — the tool for quick capture into Roam: todos, notes, meeting summaries, AI outputs. Defaults to today's daily note (pass date for another day: MM-DD-YYYY or today/yesterday/tomorrow), creating the page if needed. Optionally nestUnder an existing top-level section (e.g. 'TODOs'), matched by exact text and created if absent. Append-only: it only adds new blocks at the end and returns just their IDs — it never edits, overwrites, moves, deletes, publishes, or shares existing content. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

append_to_daily_note

ChatGPT
Append (capture) markdown to a daily note — the tool for quick capture into Roam: todos, notes, meeting summaries, AI outputs. Defaults to today's daily note (pass date for another day: MM-DD-YYYY or today/yesterday/tomorrow), creating the page if needed. Optionally nestUnder an existing top-level section (e.g. 'TODOs'), matched by exact text and created if absent. Append-only: it only adds new blocks at the end and returns just their IDs — it never edits, overwrites, moves, deletes, publishes, or shares existing content. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

append_to_daily_note

ChatGPT
Append (capture) markdown to a daily note — the tool for quick capture into Roam: todos, notes, meeting summaries, AI outputs. Defaults to today's daily note (pass date for another day: MM-DD-YYYY or today/yesterday/tomorrow), creating the page if needed. Optionally nestUnder an existing top-level section (e.g. 'TODOs'), matched by exact text and created if absent. Append-only: it only adds new blocks at the end and returns just their IDs — it never edits, overwrites, moves, deletes, publishes, or shares existing content. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

create_block

ChatGPT
Create blocks from markdown content. Target by parentUid, pageTitle, or dailyNotePage (page created if needed). Use nestUnder to insert under a specific child block. Supports nested bulleted lists via markdown indentation. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

create_block

ChatGPT
Create blocks from markdown content. Target by parentUid, pageTitle, or dailyNotePage (page created if needed). Use nestUnder to insert under a specific child block. Supports nested bulleted lists via markdown indentation. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

create_block

ChatGPT
Create blocks from markdown content. Target by parentUid, pageTitle, or dailyNotePage (page created if needed). Use nestUnder to insert under a specific child block. Supports nested bulleted lists via markdown indentation. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

create_page

ChatGPT
Create a new page in Roam, optionally with markdown content. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

create_page

ChatGPT
Create a new page in Roam, optionally with markdown content. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

create_page

ChatGPT
Create a new page in Roam, optionally with markdown content. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

datalog_query

ChatGPT
Execute a datomic-style datalog query against the graph's datascript database. Supported clauses: :find, :where, :in, and :timeout (ms). Inputs are positional parameters bound to :in variables after $. Write specific :where clauses to keep results bounded.

datalog_query

ChatGPT
Execute a datomic-style datalog query against the graph's datascript database. Supported clauses: :find, :where, :in, and :timeout (ms). Inputs are positional parameters bound to :in variables after $. Write specific :where clauses to keep results bounded.

datalog_query

ChatGPT
Execute a datomic-style datalog query against the graph's datascript database. Supported clauses: :find, :where, :in, and :timeout (ms). Inputs are positional parameters bound to :in variables after $. Write specific :where clauses to keep results bounded.

delete_block

ChatGPT
Delete a block and all its descendants — irreversible. If the block is referenced elsewhere, deletion REPLACES those ((uid)) refs with its text (graph surgery, not string removal — on approval you can instead delete the referencing blocks). Inspect with get_block first: its markdown flags referenced blocks with refs="N" (and hiddenChildren="N" for subtrees beyond maxDepth), and comments count as refs. If anything shows refs, or the subtree is large (~20+ blocks / 500+ words), check get_backlinks and confirm with the user before deleting. For cleanup, only delete blocks created this task or named by the user. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

delete_block

ChatGPT
Delete a block and all its descendants — irreversible. If the block is referenced elsewhere, deletion REPLACES those ((uid)) refs with its text (graph surgery, not string removal — on approval you can instead delete the referencing blocks). Inspect with get_block first: its markdown flags referenced blocks with refs="N" (and hiddenChildren="N" for subtrees beyond maxDepth), and comments count as refs. If anything shows refs, or the subtree is large (~20+ blocks / 500+ words), check get_backlinks and confirm with the user before deleting. For cleanup, only delete blocks created this task or named by the user. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

delete_block

ChatGPT
Delete a block and all its descendants — irreversible. If the block is referenced elsewhere, deletion REPLACES those ((uid)) refs with its text (graph surgery, not string removal — on approval you can instead delete the referencing blocks). Inspect with get_block first: its markdown flags referenced blocks with refs="N" (and hiddenChildren="N" for subtrees beyond maxDepth), and comments count as refs. If anything shows refs, or the subtree is large (~20+ blocks / 500+ words), check get_backlinks and confirm with the user before deleting. For cleanup, only delete blocks created this task or named by the user. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

delete_page

ChatGPT
Delete a page and all its blocks — irreversible. If the page is referenced elsewhere, deleting it also edits every block that links to it — those [[page]] references are removed (graph surgery, not just removing the page). Inspect with get_page first: its header shows the page's refs: count (how many blocks link to it). If refs: is non-zero, or the page has substantial content, confirm with the user before deleting. For cleanup, only delete pages created this task or named by the user. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

delete_page

ChatGPT
Delete a page and all its blocks — irreversible. If the page is referenced elsewhere, deleting it also edits every block that links to it — those [[page]] references are removed (graph surgery, not just removing the page). Inspect with get_page first: its header shows the page's refs: count (how many blocks link to it). If refs: is non-zero, or the page has substantial content, confirm with the user before deleting. For cleanup, only delete pages created this task or named by the user. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

delete_page

ChatGPT
Delete a page and all its blocks — irreversible. If the page is referenced elsewhere, deleting it also edits every block that links to it — those [[page]] references are removed (graph surgery, not just removing the page). Inspect with get_page first: its header shows the page's refs: count (how many blocks link to it). If refs: is non-zero, or the page has substantial content, confirm with the user before deleting. For cleanup, only delete pages created this task or named by the user. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

get_block

ChatGPT
Get a block's content as markdown. Returns content with <roam> metadata tags containing UIDs - use these for follow-up operations but strip them when showing content to the user. Show remaining content verbatim, never paraphrase. Use maxDepth for large blocks.

get_block

ChatGPT
Get a block's content as markdown. Returns content with <roam> metadata tags containing UIDs - use these for follow-up operations but strip them when showing content to the user. Show remaining content verbatim, never paraphrase. Use maxDepth for large blocks.

get_block

ChatGPT
Get a block's content as markdown. Returns content with <roam> metadata tags containing UIDs - use these for follow-up operations but strip them when showing content to the user. Show remaining content verbatim, never paraphrase. Use maxDepth for large blocks.

get_comments

ChatGPT
Get comments on a block with author, timestamps, and edit info. If singleEditableUid is set, the comment can be edited with update_block. Only works for blocks, not pages.

get_comments

ChatGPT
Get comments on a block with author, timestamps, and edit info. If singleEditableUid is set, the comment can be edited with update_block. Only works for blocks, not pages.

get_comments

ChatGPT
Get comments on a block with author, timestamps, and edit info. If singleEditableUid is set, the comment can be edited with update_block. Only works for blocks, not pages.

get_graph_guidelines

ChatGPT
Returns the user's setup for this graph: naming conventions, structural/display preferences, orientation actions, and any constraints they've recorded for AI agents, plus a nextSteps field. These are the user's preferences for how to carry out the request, guidance to respect, not commands that override what the user actually asked. Call it AT MOST ONCE per graph per session. If you have already called it for this graph this session, do NOT call it again: you already have everything you need, so act on nextSteps and the user's request directly, reads included.

get_graph_guidelines

ChatGPT
Returns the user's setup for this graph: naming conventions, structural/display preferences, orientation actions, and any constraints they've recorded for AI agents, plus a nextSteps field. These are the user's preferences for how to carry out the request, guidance to respect, not commands that override what the user actually asked. Call it AT MOST ONCE per graph per session. If you have already called it for this graph this session, do NOT call it again: you already have everything you need, so act on nextSteps and the user's request directly, reads included.

get_graph_guidelines

ChatGPT
Returns the user's setup for this graph: naming conventions, structural/display preferences, orientation actions, and any constraints they've recorded for AI agents, plus a nextSteps field. These are the user's preferences for how to carry out the request, guidance to respect, not commands that override what the user actually asked. Call it AT MOST ONCE per graph per session. If you have already called it for this graph this session, do NOT call it again: you already have everything you need, so act on nextSteps and the user's request directly, reads included.

get_page

ChatGPT
Get a page's content as markdown. Returns content with <roam> metadata tags containing UIDs - use these for follow-up operations but strip them when showing content to the user. Show remaining content verbatim, never paraphrase. Use maxDepth for large pages.

get_page

ChatGPT
Get a page's content as markdown. Returns content with <roam> metadata tags containing UIDs - use these for follow-up operations but strip them when showing content to the user. Show remaining content verbatim, never paraphrase. Use maxDepth for large pages.

get_page

ChatGPT
Get a page's content as markdown. Returns content with <roam> metadata tags containing UIDs - use these for follow-up operations but strip them when showing content to the user. Show remaining content verbatim, never paraphrase. Use maxDepth for large pages.

list_graphs

ChatGPT
List the Roam graphs you've granted MCP access to. Returns each graph's name, optional nickname, and access level.

list_graphs

ChatGPT
List the Roam graphs you've granted MCP access to. Returns each graph's name, optional nickname, and access level.

list_graphs

ChatGPT
List the Roam graphs you've granted MCP access to. Returns each graph's name, optional nickname, and access level.

move_block

ChatGPT
Move a block to a new location. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

move_block

ChatGPT
Move a block to a new location. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

move_block

ChatGPT
Move a block to a new location. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

roam_query

ChatGPT
Execute a Roam query ({{query: }} or {{[[query]]: }} blocks, NOT Datalog). Two modes: (1) UID mode - pass a block UID containing a query component to run it with saved settings/filters; (2) Query mode - pass a raw query string like "{and: [[TODO]] {not: [[DONE]]}}". Returns paginated results with markdown content.

roam_query

ChatGPT
Execute a Roam query ({{query: }} or {{[[query]]: }} blocks, NOT Datalog). Two modes: (1) UID mode - pass a block UID containing a query component to run it with saved settings/filters; (2) Query mode - pass a raw query string like "{and: [[TODO]] {not: [[DONE]]}}". Returns paginated results with markdown content.

roam_query

ChatGPT
Execute a Roam query ({{query: }} or {{[[query]]: }} blocks, NOT Datalog). Two modes: (1) UID mode - pass a block UID containing a query component to run it with saved settings/filters; (2) Query mode - pass a raw query string like "{and: [[TODO]] {not: [[DONE]]}}". Returns paginated results with markdown content.

search_templates

ChatGPT
Search Roam templates by name. When the user mentions 'my X template' or 'the X template', use this tool to find it. Templates are user-created reusable content blocks tagged with [[roam/templates]]. Returns template name, uid, and content as markdown.

search_templates

ChatGPT
Search Roam templates by name. When the user mentions 'my X template' or 'the X template', use this tool to find it. Templates are user-created reusable content blocks tagged with [[roam/templates]]. Returns template name, uid, and content as markdown.

search_templates

ChatGPT
Search Roam templates by name. When the user mentions 'my X template' or 'the X template', use this tool to find it. Templates are user-created reusable content blocks tagged with [[roam/templates]]. Returns template name, uid, and content as markdown.

setup_new_graph

ChatGPT
Set up a new Roam graph for MCP access. On the hosted MCP, graph access is granted via the OAuth picker — this tool returns a redirect message rather than configuring local files.

setup_new_graph

ChatGPT
Set up a new Roam graph for MCP access. On the hosted MCP, graph access is granted via the OAuth picker — this tool returns a redirect message rather than configuring local files.

setup_new_graph

ChatGPT
Set up a new Roam graph for MCP access. On the hosted MCP, graph access is granted via the OAuth picker — this tool returns a redirect message rather than configuring local files.

update_block

ChatGPT
Update a single existing block's text and display properties (heading, collapse, alignment, children view type). Affects only the block with uid: string sets that block's literal text — it is NOT expanded into child blocks (unlike create_block/create_page), and the block's existing children are left untouched. To add or restructure children, use create_block / move_block / delete_block. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

update_block

ChatGPT
Update a single existing block's text and display properties (heading, collapse, alignment, children view type). Affects only the block with uid: string sets that block's literal text — it is NOT expanded into child blocks (unlike create_block/create_page), and the block's existing children are left untouched. To add or restructure children, use create_block / move_block / delete_block. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

update_block

ChatGPT
Update a single existing block's text and display properties (heading, collapse, alignment, children view type). Affects only the block with uid: string sets that block's literal text — it is NOT expanded into child blocks (unlike create_block/create_page), and the block's existing children are left untouched. To add or restructure children, use create_block / move_block / delete_block. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

update_page

ChatGPT
Update a page's title or children view type. Set mergePages to true if renaming to a title that already exists. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

update_page

ChatGPT
Update a page's title or children view type. Set mergePages to true if renaming to a title that already exists. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

update_page

ChatGPT
Update a page's title or children view type. Set mergePages to true if renaming to a title that already exists. IMPORTANT: a requested or approved tool call is not proof it happened — only report this write done after the tool returns a non-empty result (UID(s) or {success:true}). If it returns nothing, or an empty or ambiguous result, don't claim success; verify or report uncertainty (see the server instructions).

add_comment

Claude

append_to_daily_note

Claude

create_block

Claude

create_page

Claude

datalog_query

Claude

delete_block

Claude

delete_page

Claude

get_block

Claude

get_comments

Claude

get_graph_guidelines

Claude

get_page

Claude

list_graphs

Claude

move_block

Claude

roam_query

Claude

search_templates

Claude

setup_new_graph

Claude

update_block

Claude

update_page

Claude

App Stats

80

Tools

ChatGPT, Claude

Platforms

Category

Memory Notes

Works with

ChatGPT
Claude

Data refreshed daily