About oz-mcp-server
oz-mcp-server is a standalone MCP server for Warp Oz agents, letting MCP clients such as Claude Code, Cursor, and Codex launch and inspect runs from a terminal. It works without VS Code and supports stdio and Streamable HTTP.
Key features
- 01Launch local agent runs through the oz CLI
- 02Start cloud runs
- 03Retrieve run status and output
- 04List recent runs with status filters
- 05List available models and current default
- 06Set the workspace default model
Use cases
- 01Start Oz agents from an IDE or MCP client
- 02Inspect results of local or cloud runs
- 03Review recent runs filtered by status
- 04Change the workspace's default model
MCP support
The server exposes six tools over stdio or Streamable HTTP. It invokes an installed, signed-in Oz CLI to start, manage, and inspect agent runs.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project README@sena-labs/oz-mcp-server
Standalone Model Context Protocol server for Warp™ Oz™ agents — no VS Code required. Run it from a terminal and drive Oz from Claude Code, Cursor, Codex, or any MCP client.
OzBridge is an independent project and is not affiliated with, endorsed by, or sponsored by Warp. "Warp" and "Oz" are trademarks of Warp, Inc., used here nominatively — solely to describe interoperability. See Trademarks & disclaimer below.
This package is the VS Code‑free sibling of the
OzBridge extension. It exposes the same
MCP tool surface (six tools: oz_agent_run, oz_run_list, …) over stdio or
Streamable HTTP, so any MCP client can launch and inspect Oz runs.
Requirements
- Node.js ≥ 22.12
- The Oz CLI installed and on your
PATH(or pointed at viaOZ_PATH). Download Warp from https://www.warp.dev/download — theozcommand ships with it (on Linux typically~/.warp/bin/oz). Verify withoz --version. - Signed in to Warp: run
oz loginonce in a terminal.
The server only ever shells out to the documented oz CLI; it does not embed,
modify, or reverse‑engineer any Warp software.
Quick start (stdio — recommended)
Let your MCP client spawn the server over stdio — no install step, no port, no token, and no terminal to keep open.
Claude Code:
claude mcp add oz -- npx -y @sena-labs/oz-mcp-server --stdio
Codex CLI — add to ~/.codex/config.toml:
[mcp_servers.oz]
command = "npx"
args = ["-y", "@sena-labs/oz-mcp-server", "--stdio"]
Cursor / Windsurf / Claude Desktop — add to ~/.cursor/mcp.json (Cursor),
~/.codeium/windsurf/mcp_config.json (Windsurf) or
claude_desktop_config.json (Claude Desktop):
{
"mcpServers": {
"oz": {
"command": "npx",
"args": ["-y", "@sena-labs/oz-mcp-server", "--stdio"]
}
}
}
HTTP mode
To run a long-lived server that clients reach by URL instead:
npx -y @sena-labs/oz-mcp-server
It binds to 127.0.0.1:3847. Leave it running, then point your MCP client at
the Streamable HTTP endpoint http://127.0.0.1:3847/mcp — see
MCP client setup (HTTP). The legacy HTTP+SSE endpoint
/sse is still served but deprecated.
Pin a port and a bearer token instead of the defaults:
npx -y @sena-labs/oz-mcp-server --port 3847 --token my-secret
Install it globally if you'd rather not re‑download on each run:
npm install -g @sena-labs/oz-mcp-server
oz-mcp-server --help
Configuration
Settings resolve in this order (highest precedence first):
- CLI flags
- Environment variables
./.warp/warp-bridge.yaml(current working directory), then~/.warp/warp-bridge.yaml- Compiled‑in defaults
CLI flags
| Flag | Default | Purpose |
|---|---|---|
--port <n> | 3847 | TCP port to listen on. 0 lets the OS pick an ephemeral port. |
--bind <addr> | 127.0.0.1 | Interface to bind. Non‑loopback requires a token (see Security). |
--token <s> | (none) | Bearer token required on every request. Empty = no auth. |
--cwd <dir> | process.cwd() | Workspace root for .warp/warp-bridge.yaml discovery. |
--help, -h | — | Print usage and exit. |
Environment variables
| Variable | Maps to | Default | Purpose |
|---|---|---|---|
OZ_PATH | ozPath | oz | Path to the Oz CLI binary. Bare oz resolves from PATH. |
OZ_MCP_PORT | port | 3847 | Listening port. 0 = OS‑assigned ephemeral port. |
OZ_MCP_BIND | bind address | 127.0.0.1 | Interface to bind (loopback only by default). |
OZ_MCP_TOKEN | bearer token | (empty) | Bearer token required on every request. Empty disables auth. |
OZ_DEFAULT_MODEL | defaultModel | auto | Default AI model for runs. |
OZ_DEFAULT_PROFILE | defaultProfile | Default | Default Oz agent profile. |
OZ_DEFAULT_ENV | defaultEnvironment | (empty) | Default cloud environment id. |
OZ_TIMEOUT_MS | local run timeout | 300000 | Hard timeout for local runs (ms). |
OZ_IDLE_TIMEOUT_MS | idle timeout | 90000 | Abort a run after this long with no CLI output (ms). 0 disables. |
OZ_PATH=/usr/local/bin/oz \
OZ_MCP_PORT=3847 \
OZ_MCP_TOKEN=my-secret \
npx -y @sena-labs/oz-mcp-server
On Windows PowerShell, set variables with
$env:first:$env:OZ_MCP_TOKEN = "my-secret"; npx -y @sena-labs/oz-mcp-server
Transports
The server speaks MCP over two transports:
- stdio (
--stdio) — the host spawns the server as a child process and exchanges JSON-RPC over stdin/stdout. Recommended for Claude Code, Codex, Cursor, Windsurf, Claude Desktop,mcp-proxy, and registry sandboxes (e.g. Glama). No port, no token. See Quick start. - Streamable HTTP (default when
--stdiois not passed) — the server listens on a port and clients connect by URL to/mcp. The older HTTP + SSE transport (/sse+/messages) is still served for legacy clients but is deprecated.
# stdio (spawned by the host)
npx -y @sena-labs/oz-mcp-server --stdio
# HTTP (default) — endpoint http://127.0.0.1:3847/mcp
npx -y @sena-labs/oz-mcp-server --port 3847
MCP client setup (HTTP)
For URL-based clients, start the server in HTTP mode (above), then add the
endpoint to your client. These snippets mirror
docs/MCP.md.
Claude Code
claude mcp add --transport http oz http://127.0.0.1:3847/mcp
Cursor / Windsurf
Add to ~/.cursor/mcp.json (or ~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"oz": {
"url": "http://127.0.0.1:3847/mcp"
}
}
}
Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.oz]
url = "http://127.0.0.1:3847/mcp"
If you set a token
With --token / OZ_MCP_TOKEN, every request needs an
Authorization: Bearer <token> header:
- Claude Code: append
--header "Authorization: Bearer <token>"toclaude mcp add. - Cursor / Windsurf: add
"headers": { "Authorization": "Bearer <token>" }next to"url". - Codex: add
http_headers = { "Authorization" = "Bearer <token>" }under[mcp_servers.oz].
Tools exposed
| Tool | Purpose |
|---|---|
oz_agent_run | Run oz agent run locally with a prompt. Returns the full run payload. |
oz_agent_run_cloud | Launch a cloud run. Consumes Warp credits. |
oz_run_get | Fetch a run's status and output by id. Read‑only. |
oz_run_list | List recent runs; filter by all / active / completed / raw status, plus a numeric limit. |
oz_list_models | List the AI model ids available to the account and report the current default. Read‑only. |
oz_set_default_model | Set the default Oz model by writing defaultModel into the workspace .warp/warp-bridge.yaml. |
The full JSON inputSchema for each tool is emitted verbatim by tools/list.
See docs/MCP.md
for the protocol details, raw‑curl cheatsheet, and endpoint reference.
Endpoints
| Route | Method | Purpose |
|---|---|---|
/mcp | POST | Streamable HTTP — a single JSON‑RPC 2.0 request, answered in the same HTTP response. Use this one. |
/sse | GET | Legacy (deprecated). Opens the SSE stream. First frame is event: endpoint with the sessionId to POST to. |
/messages?sessionId=<uuid> | POST | Legacy (deprecated). A single JSON‑RPC 2.0 request. Acknowledged with 202; the response streams back over /sse. |
/health | GET | Returns { ok, name, version, tools, sessions }. |
Quick health check:
curl http://127.0.0.1:3847/health
Security
- Loopback by default. The server binds to
127.0.0.1; no traffic leaves the machine unless you opt in. - Non‑loopback requires a token. Binding to anything other than
127.0.0.1/::1without--token/OZ_MCP_TOKENis refused — the MCP tool surface can spawn the Oz CLI, so an unauthenticated public bind is never allowed. - Bearer auth covers every route (including
/health) when a token is set; comparison is constant‑time. - No persistence. Prompt content and run output are forwarded to the Oz CLI, never stored by the server.
There is no TLS termination — put the server behind an authenticated reverse proxy if you need HTTPS.
Trademarks & disclaimer
OzBridge is an independent project developed by Ivan Sena under the Sena Labs name. It is not affiliated with, endorsed by, sponsored by, or officially associated with Warp, Inc., Microsoft, GitHub, or the Visual Studio Code project.
Warp™ and Oz™ are trademarks of Warp, Inc. These names are used in this project nominatively — solely to describe that OzBridge interoperates with Warp Oz — and not to imply any sponsorship, endorsement, or affiliation.
OzBridge uses only Warp's documented, public interfaces — the oz
command‑line tool and the Model Context Protocol transport. It does not
modify, reverse‑engineer, embed, or create a derivative work of Warp's software,
and it is a complementary integration, not a competing product or service.
This software is provided "as is", without warranty of any kind. Use it at your
own risk. See
DISCLAIMER.md
for the full text.
License
MIT © Sena Labs
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.