Connect an assistant
OpenReadout is designed for AI agents. An assistant can use it in two ways: through the skill, a Markdown file that tells an agent with a shell how to run the openreadout command, or through the MCP server (openreadout mcp), which offers the same operations as typed tools to clients without a shell, such as Claude Desktop. Both return the same JSON as --json on the command line.
Connect it
In one line. Paste this into your agent’s chat. The agent reads the skill, which tells it how to install and use the program:
curl -fsSL https://raw.githubusercontent.com/openreadout/openreadout/main/skills/openreadout/SKILL.mdThere is no packaged release yet, so the install script the skill uses won’t work until there is one. Until then, install with cargo yourself, then connect the program with one of the commands below.
The skill, for agents with a shell (Claude Code, Codex, Cursor, Copilot, Gemini CLI):
openreadout self skill --install claude # ~/.claude/skills/openreadoutopenreadout self skill --install agents # ~/.agents/skills/openreadout (Codex, Cursor, Copilot, Gemini CLI)openreadout self skill --install all # bothThe MCP server:
openreadout mcp --install claude-desktop # then restart Claude DesktopThe client names are claude (or claude-code), claude-desktop, cursor, codex, vscode, gemini, windsurf, zed, continue and cline. The command adds an entry with the program’s full path to the client’s configuration file, keeps the other servers, backs up the old file next to it, and leaves the file alone if OpenReadout is already in it:
$ openreadout mcp --install cursorconfigured openreadout in /home/you/.cursor/mcp.json (previous file saved as /home/you/.cursor/mcp.json.bak.1790920590)--project writes the project-level file in the current directory instead (such as .mcp.json), and --config <client> prints the entry without writing it.
The Claude Code plugin installs the skill and the MCP server together (the program must be on your PATH):
/plugin marketplace add openreadout/agent-plugins/plugin install openreadout@openreadoutCodex and Gemini CLI have the same kind of package. See Plugins.
What to ask first
Ask in plain words and give the path:
- “What is in
~/data/plate7.nd2? Channels, pixel size, how many positions?” - “Check every file in
/mnt/scope/2026-09-21/and tell me which ones are truncated.” - “Show me what
stack.liflooks like, all channels, as a maximum projection.”
Why it suits an agent
- Stable JSON. Every command takes
--json, with published schemas. Keys are not renamed or removed without aschema_versionbump. - Fixed exit codes: 0 ok, 1 error, 2 usage, 3 unknown format, 4 corrupt, 5 I/O, 6 unsupported feature.
- Errors with a hint that says what to do next (see below).
- Assurance with each answer: whether files like this one were validated against an independent reader.
- Pictures:
previewdraws images, traces, spectra and plates, so the agent can look at the data. - Cheap metadata:
inforeads headers only, and--onlyreturns just the fields asked for. - Read-only inputs and no network access.
When an agent asks for an image that does not exist, the error tells it how to recover:
$ openreadout preview mini.nd2 --image 3 --json{ "ok": false, "schema_version": "1", "tool": { "name": "openreadout", "version": "0.1.0" }, "error": { "code": "usage", "message": "usage error: image 3 not found (file has 1 images)", "hint": "Indices are zero-based; `openreadout info FILE --json` lists the images, traces (sweep_count, sample_count), tables (row_count) and spectra the file holds.", "exit_code": 2 }}How the assistant sees images
openreadout_preview returns a picture as image content, followed by JSON that says what was drawn. Image previews have rulers labelled in full-resolution pixels and a µm scale bar when the pixel size is known, so the assistant can read a feature’s coordinates off the rulers and ask again for just that region. To measure intensities it uses openreadout_stats, not the picture.
Privacy
- OpenReadout doesn’t connect to the network. Release binaries contain no networking code.
- OpenReadout doesn’t modify your files.
openreadout_exportwrites a new file, reads it back to check it, then gives it its final name. It replaces an existing output only if you ask it to overwrite. - The server runs as you, so it can open any file your user account can read.
The privacy policy has the details.