2
2b3pro/roam-research-mcp
MCP Server and CLI tool for Roam Research Graph Integration
View on GitHub ↗Link checked 2026-11-12 · automated check blocked (HTTP 429), status unconfirmed
Install & config
- Copy the command above
- Paste it as one entry under
mcpServersinclaude_desktop_config.json— local servers take command + args (example: clients) - Restart your client
Client config (built from the install command this repo gives)
{
"mcpServers": {
"2b3pro-roam-research-mcp": {
"command": "npx",
"args": ["roam-research-mcp"]
}
}
}Parsed from the README we fetched on 2026-11-04; we have not executed it.
command/args come from the install command the repository states. When it is ambiguous, the project README wins.
VS Code (.vscode/mcp.json - the key is servers)
{
"servers": {
"2b3pro-roam-research-mcp": {
"command": "npx",
"args": ["roam-research-mcp"]
}
}
}Same server, but VS Code keeps it under <code>servers</code>.
Claude Code (command line)
claude mcp add --transport stdio 2b3pro-roam-research-mcp -- npx roam-research-mcp
Claude Code does not read a config file; add the server with this command.
Key names differ by client: Clients & CLI
- Source
- collected from the abordage/awesome-mcp list · type: MCP server
- Harvest history
- first seen 2026-11-05 · last seen 2026-11-14 · seen 10× · listed by 10 sources
- Score
- score 1,003 · 10 sources · mcp
- Install
npx roam-research-mcp
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
npx roam-research-mcp. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: MCP 服务. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
first catalogued 2026-11-05;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.
# Roam Research MCP + CLI
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
## Introduction
I created this project to solve a personal problem: I wanted to manage my Roam Research graph directly from Claude Code (and other LLMs). As I built the Model Context Protocol (MCP) server to give AI agents access to my notes, I realized the underlying tools were powerful enough to stand on their own.
What started as an backend for AI agents evolved into a full-featured Standalone CLI. Now, you can use the same powerful API capabilities directly from your terminal—piping content into Roam, searching your graph, and managing tasks—without needing an LLM at all.
Whether you want to give Claude superpowers over your knowledge base or just want a robust CLI for your own scripts, this project has you covered.
## What's New in v5.0
In one line: roam save now has one flag for each way of naming a parent block, and neither one guesses. --parent-uid is always a UID; --parent is always text.
Until 4.1.0, --parent took either a block UID or heading text and decided which by looking for a digit in the value. About one Roam UID in five has no digit, so those saves were silently misrouted. 4.1.0 added --parent-uid and deprecated passing a UID to --parent. 5.0 finishes the split.
--parent-uid nests under the block with that UID. It accepts uid or ((uid)), and if no such block exists the command exits non-zero and writes nothing.
--parent " " nests under the block with that text on the target page, creating it if missing. It is never read as a UID. --parent "((uid))" finds or creates a block whose content is that reference, which was not reliably possible before.
Creating a parent block is announced on stderr, with its UID. If the text you gave --parent looks like a UID, a second line says what happened and gives the --parent-uid command to use instead. Stdout is unchanged.
roam save --help leads with the choice. A "Choosing a parent block" section sits above the examples, so the difference between the two flags is the first thing you read.
Why a major. roam save --parent "((uid))" and roam save --parent used to nest under that block and now nest under a block containing that text. If a script passes a UID to --parent, change the flag to --parent-uid. Only the CLI is affected: the MCP tools take parent-uid as a typed field and behave exactly as before, so if you use the server through an AI assistant, nothing is required of you.
Full detail is in the changelog.
## What's New in v4.0
In one line: a block containing a soft line break (Shift+Enter) now survives a page rewrite. Read a page, write it back, and nothing moves.
Until now, a multi-line block rendered as two physical lines, the second at column 0. That reset the parser's indentation baseline, so every block after it collapsed toward the root and roamupdatepagemarkdown dutifully generated the moves to make your real page match. Reading a page and writing back a revision, the documented purpose of the tool, was enough to trigger it. Callout bodies and fenced code blocks are exactly the blocks that carry soft breaks.
Soft breaks render as ⏎. A page containing one gains a leading marker line; keep it if you write the markdown back. Pages with no multi-line block render byte-identical to 3.x, with no marker and no encoding.
I created this project to solve a personal problem: I wanted to manage my Roam Research graph directly from Claude Code (and other LLMs). As I built the Model Context Protocol (MCP) server to give AI agents access to my notes, I realized the underlying tools were powerful enough to stand on their own.
What started as an backend for AI agents evolved into a full-featured Standalone CLI. Now, you can use the same powerful API capabilities directly from your terminal—piping content into Roam, searching your graph, and managing tasks—without needing an LLM at all.
Whether you want to give Claude superpowers over your knowledge base or just want a robust CLI for your own scripts, this project has you covered.
## What's New in v5.0
In one line: roam save now has one flag for each way of naming a parent block, and neither one guesses. --parent-uid is always a UID; --parent is always text.
Until 4.1.0, --parent took either a block UID or heading text and decided which by looking for a digit in the value. About one Roam UID in five has no digit, so those saves were silently misrouted. 4.1.0 added --parent-uid and deprecated passing a UID to --parent. 5.0 finishes the split.
--parent-uid nests under the block with that UID. It accepts uid or ((uid)), and if no such block exists the command exits non-zero and writes nothing.
--parent " " nests under the block with that text on the target page, creating it if missing. It is never read as a UID. --parent "((uid))" finds or creates a block whose content is that reference, which was not reliably possible before.
Creating a parent block is announced on stderr, with its UID. If the text you gave --parent looks like a UID, a second line says what happened and gives the --parent-uid command to use instead. Stdout is unchanged.
roam save --help leads with the choice. A "Choosing a parent block" section sits above the examples, so the difference between the two flags is the first thing you read.
Why a major. roam save --parent "((uid))" and roam save --parent used to nest under that block and now nest under a block containing that text. If a script passes a UID to --parent, change the flag to --parent-uid. Only the CLI is affected: the MCP tools take parent-uid as a typed field and behave exactly as before, so if you use the server through an AI assistant, nothing is required of you.
Full detail is in the changelog.
## What's New in v4.0
In one line: a block containing a soft line break (Shift+Enter) now survives a page rewrite. Read a page, write it back, and nothing moves.
Until now, a multi-line block rendered as two physical lines, the second at column 0. That reset the parser's indentation baseline, so every block after it collapsed toward the root and roamupdatepagemarkdown dutifully generated the moves to make your real page match. Reading a page and writing back a revision, the documented purpose of the tool, was enough to trigger it. Callout bodies and fenced code blocks are exactly the blocks that carry soft breaks.
Soft breaks render as ⏎. A page containing one gains a leading marker line; keep it if you write the markdown back. Pages with no multi-line block render byte-identical to 3.x, with no marker and no encoding.
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/2b3pro-roam-research-mcp/)
- Source
- awesome · https://github.com/2b3pro/roam-research-mcp
- Browse by field
- MCP servers
- Listed by
- 10 independent sources
- added
- today
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.