AI agents
There are two ways to let an AI agent use OpenReadout. You can use either or both.
- The skill is a Markdown file that tells the agent when and how to run the
openreadoutcommand through its shell tool. It suits coding agents such as Claude Code, Codex, Cursor, Copilot and Gemini CLI. - The MCP server (
openreadout mcp) offers OpenReadout as typed tools over the Model Context Protocol. It suits clients without a shell, such as Claude Desktop, and clients where you want to approve each tool separately.
Both return the same JSON as the command line. Install the program first (see Install). The commands below assume openreadout is on your PATH.
Plugins
Claude Code, Codex and Gemini CLI can install the skill and the MCP server together as a plugin or extension. These install from openreadout/agent-plugins, a small repository that each release updates.
In Claude Code:
/plugin marketplace add openreadout/agent-plugins/plugin install openreadout@openreadoutIn Codex:
codex plugin marketplace add openreadout/agent-pluginscodex plugin add openreadout@openreadoutIn Gemini CLI:
gemini extensions install https://github.com/openreadout/agent-pluginsEach one’s MCP server runs openreadout mcp, so the program must be on your PATH.
The skill
openreadout self skill # print the skillopenreadout self skill --install claude # into ~/.claude/skills/openreadoutopenreadout self skill --install agents # into ~/.agents/skills/openreadout, read by Codex, Cursor, Copilot and Gemini CLIopenreadout self skill --install all # bothThe skill is SKILL.md plus a few reference files, in the Agent Skills format. The source is skills/openreadout. If your client reads skills from another directory, copy the folder there.
The MCP server
openreadout mcp --install <client> adds OpenReadout to a client’s configuration file. It keeps the other servers and settings, backs up the old file next to it, and leaves the file alone if OpenReadout is already configured. openreadout mcp --config <client> prints the entry instead, with the full path of the program filled in, so you can add it by hand.
| client | name | user-level file | project file (--project) |
|---|---|---|---|
| Claude Code | claude |
~/.claude.json |
.mcp.json |
| Claude Desktop | claude-desktop |
claude_desktop_config.json |
none |
| Cursor | cursor |
~/.cursor/mcp.json |
.cursor/mcp.json |
| OpenAI Codex | codex |
~/.codex/config.toml |
.codex/config.toml |
| VS Code (Copilot) | vscode |
the user mcp.json |
.vscode/mcp.json |
| Gemini CLI | gemini |
~/.gemini/settings.json |
.gemini/settings.json |
| Windsurf | windsurf |
mcp_config.json |
none |
| Zed | zed |
~/.config/zed/settings.json |
.zed/settings.json |
| Continue | continue |
none | .continue/mcpServers/openreadout.yaml |
| Cline | cline |
cline_mcp_settings.json |
none |
--config-path PATH edits another file. A configuration file with comments or trailing commas (common in Zed and VS Code) is not rewritten: the command stops and prints the entry to paste.
The repository contains .mcp.json, .cursor/mcp.json and .vscode/mcp.json, so opening a clone of it in those clients is enough when openreadout is on your PATH.
Examples
Most clients use the same JSON entry:
{ "mcpServers": { "openreadout": { "command": "openreadout", "args": ["mcp"] } } }A few differ:
-
VS Code uses the top-level key
serversand needs"type": "stdio":{ "servers": { "openreadout": { "type": "stdio", "command": "openreadout", "args": ["mcp"] } } } -
Codex uses TOML:
[mcp_servers.openreadout]command = "openreadout"args = ["mcp"] -
Zed puts the entry under
context_servers.
Several clients also have their own command for this:
claude mcp add --transport stdio --scope user openreadout -- openreadout mcpcodex mcp add openreadout -- openreadout mcpgemini mcp add -s user openreadout openreadout mcpClaude Desktop: each release includes an MCP bundle, openreadout-mcp-<target>.mcpb. Open it to install. Otherwise run openreadout mcp --install claude-desktop and restart Claude Desktop.
Without installing the program
A client can start the server through npm or Docker instead. With Docker, mount the directory that holds your data and keep -i:
{ "mcpServers": { "openreadout": { "command": "npx", "args": ["-y", "openreadout", "mcp"] } } }{ "mcpServers": { "openreadout": { "command": "docker", "args": ["run", "--rm", "-i", "-v", "/path/to/data:/data", "ghcr.io/openreadout/openreadout", "mcp"] } } }What to ask
Once the agent is connected, ask in plain words. The skill and the tool descriptions tell the agent which command answers which question.
- “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.” - “Export position 3, channel 1 and the first ten time points of
big.nd2to OME-TIFF.” - “Did converting
run.czito OME-TIFF change any pixels?” - “Show me what
stack.liflooks like, all channels, as a maximum projection.”
The MCP server also offers resources and prompts, which some clients show as menu entries or slash commands. See MCP tools.
What the agent can change
- Only
openreadout_exportwrites next to your data. It writes a new file, reads it back to check it, and leaves the source alone. It replaces an existing output only if asked to overwrite. openreadout_batch,openreadout_indexandopenreadout_checkwrite only to output paths given to them.- None of the tools connect to the network.
- Errors come back with a stable
code, anexit_codeand ahintthe agent can act on.
To see exactly what a client receives, run the example client in examples/mcp/mcp_client.py. MCP tools lists each tool and its arguments.