marimo/skills/marimo-mcp/SKILL.md
marimo's built-in MCP server (10 read-only inspection tools — get_active_notebooks, get_cell_outputs, get_notebook_errors, etc.) at port 2718 path /mcp/server. Use when working with the marimo MCP tool catalog, programmatic notebook diagnostics, or the cells-don't-execute-via-MCP gap (marimo MCP is read-only; cells run via WebSocket from a browser OR `marimo export ipynb --include-outputs` for headless execution).
npx skillsauth add overthinkos/overthink-plugins marimo-mcpInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
marimo's notebook server has a built-in MCP endpoint enabled by the
--mcp flag (see /ov-marimo:marimo-layer service spec). It serves
10 inspection tools for diagnosing active notebook sessions —
read-only: cells cannot be executed via this MCP. Execution
requires a browser-attached WebSocket session OR
marimo export ipynb --include-outputs for headless runs.
http://{{.ContainerName}}:2718/mcp/server # in-pod
http://localhost:22718/mcp/server # host-side (mapped port)
Transport: Streamable HTTP. Registered in this plugin's .mcp.json
as the marimo server.
All tools are read-only. Each takes an args JSON object as
the sole parameter (often {} or {"session_id": "..."}).
| Tool | Purpose |
|---|---|
| get_marimo_rules | Returns the official marimo rules for AI assistants |
| get_active_notebooks | Lists currently-open notebooks + session IDs + active connection counts |
| get_lightweight_cell_map | Per-cell preview (cell_id, line_count, runtime_state, has_output, has_errors) for a session |
| get_cell_runtime_data | Full runtime data for one or more cells: code, errors, declared variables |
| get_cell_outputs | Cell execution outputs (visual display + console streams) |
| get_tables_and_variables | All tables and variables visible in a session |
| get_database_tables | Database table info (regex query supported) |
| get_notebook_errors | All errors in a session, organised by cell |
| lint_notebook | Lint a marimo notebook for issues |
| get_cell_dependency_graph | Cell dependency graph (variable-flow edges) |
marimo's reactive runtime executes cells based on dependency-graph analysis when variable values change in the editor. The MCP exposes a read surface against an active session — there's no "run cell N" RPC because that's not how marimo orchestrates cells.
Two paths to execute notebook content programmatically:
Browser-attached run — open the notebook in a browser; marimo reactively runs all reachable cells. The marimo MCP can then read the session state (cell outputs, errors, variables).
Headless export — marimo export ipynb --include-outputs runs
every cell server-side and writes a Jupyter notebook with embedded
outputs. Used in this repo's R10 acceptance for the
osm-monaco-viz.py notebook:
podman exec ov-marimo-ml-pod /home/user/.pixi/envs/default/bin/marimo \
export ipynb /home/user/workspace/notebooks/osm-monaco-viz.py \
--include-outputs --sort topological -o /tmp/notebook-run.ipynb -f
Requires nbformat in the pixi env (already pinned in
layers/marimo/pixi.toml).
Ping the server (proves it's alive + reachable):
ov eval mcp ping marimo-ml-pod --name marimo
List the tools (catalog enumeration):
ov eval mcp list-tools marimo-ml-pod --name marimo
Inspect a session's cell map (real diagnostic):
SID=$(ov eval mcp call marimo-ml-pod get_active_notebooks '{"args":{}}' --name marimo \
| python3 -c 'import sys,json; print(json.load(sys.stdin)["data"]["notebooks"][0]["session_id"])')
ov eval mcp call marimo-ml-pod get_lightweight_cell_map "{\"args\":{\"session_id\":\"$SID\"}}" --name marimo
The MCP server name marimo is the service contract — declared in
layers/marimo/layer.yml mcp_provides.name: marimo. This plugin's
.mcp.json keys off the same name. Renames of the layer / Python
package / image MUST NOT change this name unless the contract is
explicitly broken in a hard cutover.
/ov-marimo:marimo-layer — layer that runs the server/ov-marimo:airflow-mcp — the OTHER MCP server in the same pod/ov-marimo:notebook-osm — example notebook diagnosed via this MCP/ov-build:mcp — MCP probe verb authoring + URL rewriter/ov-eval:eval — ov eval mcp subcommand referencetools
OpenCharly CLI (charly) binary installed into container/VM images for in-container use. Use when working with charly binary deployment inside containers, native D-Bus support, or the full charly toolchain (charly binary + virtualization + gocryptfs + socat).
development
Operator CachyOS workstation profile — a kind:local template + target:local deploy that installs the full dev stack (30 candies) onto a CachyOS host via ShellExecutor. Lives in the overthinkos/cachyos submodule. MUST be invoked before editing or applying the charly-cachyos workstation profile.
tools
Fedora box with the full charly toolchain using shared candies. Rootless-first — runs as uid=1000 with passwordless sudo (no root, no cap_add: ALL). Same candy list as charly-arch. Includes NVIDIA GPU runtime. MUST be invoked before building, deploying, configuring, or troubleshooting the charly-fedora box.
tools
Arch Linux box with the full charly toolchain. Rootless-first — runs as uid=1000 with passwordless sudo (no root, no cap_add: ALL). Composes /charly-coder:charly-mcp so the box is reachable as an MCP gateway on port 18765. NVIDIA GPU runtime composed in. MUST be invoked before building, deploying, configuring, or troubleshooting the charly-arch box.