cerulion_mcp is a Model Context Protocol server. Your MCP client starts it
over stdio, and it drives the cerulion CLI in a workspace you choose: the
agent can create and build nodes, wire and validate graphs, run them, inspect
topics, record bags and resimulate, and stop the jobs it starts. Its guide
tool teaches the agent how Cerulion works — trigger policies, backpressure,
queue depth, process groups — before it touches your graph.
cerulion_mcp is proprietary software distributed as signed binaries. The
binaries embed first-party Cerulion crates licensed under AGPL-3.0
(cerulion_core, cerulion_macros, native_ros2_messages, used by the
bag-analysis tools); the THIRD_PARTY_NOTICES file in each archive lists
them with their source revisions and the licence text, and includes Cerulion’s
written offer to provide their source code on request to
founders@cerulion.com. The cerulion CLI it
drives is separate, open-source software that runs as its own process.Local server or mcp.cerulion.com
Use the local server to build and run robot code. To connect to the hosted
server instead, add its URL to your client:
Install the server
Install the Cerulion CLI
The server is tested against It prints
cerulion 1.0.0. Install it as described
in Installation, then check:cerulion 1.0.0. Nodes are shared libraries the CLI loads, so
build them with the compiler that built the CLI:
rustup toolchain install 1.93.0. Workspaces created with
cerulion workspace create pin it in rust-toolchain.toml.Install cerulion_mcp
- Homebrew
- Archive
On macOS or Linux:
Check the install
cerulion-mcp 0.1.0. Run cerulion_mcp --help for every flag
and environment variable.Configure your client
Use absolute paths for the server, the workspace, and the CLI. GUI clients such as Claude Desktop, Cursor, and VS Code do not inherit your shellPATH,
so pass --bin or set CERULION_MCP_BIN. Find the paths with:
node_build and graph_run compile nodes with cargo, which the CLI also
finds on PATH. Give a GUI client a PATH whose first entry is the
directory that dirname "$(command -v cargo)" prints (~/.cargo/bin with
rustup, as in the JSON examples below); otherwise the first build fails with
cargo not found.
The examples use the Homebrew prefix on Apple Silicon, /opt/homebrew/bin.
With Homebrew on Linux it is /home/linuxbrew/.linuxbrew/bin; with the
archive installer it is ~/.local/bin.
- Claude Code
- Codex
- Claude Desktop
- Cursor
- VS Code
Ask the agent to call
workspace_info first — it reports the workspace and the
CLI path and version the server resolved — and then guide, the operating
rules it should follow. Then try:
Create a node that publishes a counter at 10 Hz and a node that logs it, wire them into a graph, validate it, run it for five seconds, and show the topic rate.
To investigate a recording instead of driving the CLI, an MCP client such as
Claude Code, Cursor, or Claude Desktop can also register
Hindsight’s MCP server. Hindsight is a
separate server, and it is not open source.
Where calls go
Every tool description ends with aReach: line. The
MCP tools reference lists each one.
Security model
- The server runs with your user’s permissions. CLI-backed tools run only
the
cerulionbinary it resolved, with argument lists it builds itself. The bag-analysis tools run inside the server instead: they read MCAP bags in the workspace and, when given anhttps://source, download it over the internet first. The Cerulion Cloud tools call the Cloud API with your token, and only when it is configured. - The workspace is the trust boundary: every path a tool takes must lie inside
it unless you start the server with
--allow-outside-workspace. The one exception is the CLI’s own state in~/.cerulion:account_loginstores your session there, androbot_pairwritesdesk.keyandrobots.tomlthere. - Two tools act on the whole host rather than the workspace:
flashback_captureasks every live Cerulion graph on the machine to write its recent history, andsystem_cleanwipes the iceoryx2 shared-memory state that every Cerulion process shares. - Deletes need
confirm: true.system_cleanandbag_migratepreview by default.graph_runrewrites the graph file only whenpersist_partitionis true. - The server sends no telemetry of its own.
How tools behave
- Long-running verbs —
graph_run,node_run,bag_play,bag_record,topic_watch— return a job ID instead of blocking. Poll it withjob_statusandjob_logs, and end it withjob_stop. Jobs run in their own process groups, are scoped to the workspace that started them, and stop when the server exits. - A tool that could not do its job returns
isError: truewith text that starts with oneERROR:line naming the fix; the CLI’sstderris in the structured result. resim_runrunscerulion bag play <bag> --resim alland caches verified outcomes under.cerulion-mcp/runs.fresh: falseis a cache hit, not a failure.
Troubleshooting
cerulionnot found or the wrong version. Callworkspace_info. Set--binorCERULION_MCP_BINto an absolute path tocerulion1.0.0.- A node build fails with a Rust version or ABI error. Build with the CLI’s
compiler:
rustup toolchain install 1.93.0, and keep the workspace’srust-toolchain.toml. ERROR: ... outside the workspace. Pass paths inside--workspace, or start the server with--allow-outside-workspace.- The client shows no tools. Run the configured command in a terminal. It
waits silently on stdin; anything printed to stderr is the reason, and
CERULION_MCP_LOG=debugadds detail. - The CLI asks you to log in. Run
account_login, orcerulion loginin a terminal, once per machine.
Upgrade and uninstall
Upgrade withbrew upgrade cerulion-mcp, or run a newer archive’s
install.sh, then restart your client. Uninstall with
brew uninstall cerulion-mcp, or delete ~/.local/bin/cerulion_mcp, and
remove the cerulion entry from your client config. A workspace may hold a
.cerulion-mcp/ directory with cached resim runs; delete it when you no
longer need them.