Block references, parent-child navigation and raw Datalog mean questions like "what links here" work properly, which flat text search cannot answer. The URL handling is the other half: a PDF or a video becomes notes inside Roam rather than a link you meant to read. Everything runs against a live graph with a write-capable token, so it creates and edits real pages.
A Python bridge between an assistant and a Roam Research graph. It covers writing structured content, searching the graph the way Roam itself thinks about it — blocks, references, hierarchy — and a memory layer that persists what you tell it to remember across conversations.
- Content creation: new pages with nested content and headings, blocks placed in the right hierarchy, structured outlines, Markdown import that keeps its nesting, and todo items with TODO status
- Updates individually or in batches, including pattern transformations on block content
- Search by title, text or tag; TODO and DONE items with filters; recently modified content; block references and hierarchy; creation and modification dates
- Custom Datalog queries when the built-in searches are not specific enough
- A memory system that stores and recalls facts across conversations, tagged for filtering
- URL handling that detects content type: web page extraction, PDF text extraction and YouTube transcripts
A Roam API token created under your graph's settings, plus the graph name — `ROAM_API_TOKEN` and `ROAM_GRAPH_NAME`. Launch with `uvx git+https://github.com/PhiloSolares/roam-mcp.git`, or build the Docker image and run it on port 3000. `MEMORIES_TAG` changes the default `#[[Memories]]` tag. The Python package is `roam-mcp`, version 0.2.0, with the entry point `roam-mcp`.
One command plus a key — uvx git+https://github.com/PhiloSolares/roam-mcp.git, then supply credentials
