# Rush MCP server

Hand Rush a task from claude.ai, ChatGPT, Claude Code, Cursor or Codex: connect api.prix.dev/mcp by signing in or with an API key, then start runs as tool calls.

The Rush API is also an MCP server, at `https://api.prix.dev/mcp` over Streamable HTTP. An agent
in claude.ai, ChatGPT, Claude Code, Cursor, Codex or a Notion Custom Agent connects to it and hands Rush work as a tool
call: start a run, wait for it, read the PR, report or files it returns.

## Connect from claude.ai or ChatGPT

Add `https://api.prix.dev/mcp` as a custom connector (in claude.ai: Settings, Connectors, Add custom
connector; in ChatGPT: Settings, Connectors, with developer mode on). Leave the client ID and secret
empty. The app opens Rush in your browser: sign in, check the address it will send you back to,
pick the organization and approve. The app then lists Rush's tools.

Approving needs an admin of the organization, and the app acts as you: its runs use your accounts
and show in Runs. It appears in the console under Developers as a connected app, where Disconnect
ends it at once. Unused for 30 days, it ends by itself and the app asks you to sign in again.

Any MCP client that follows the [MCP authorization spec](https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization)
connects the same way: the server answers an unsigned request with `401` and a `WWW-Authenticate`
header naming `https://api.prix.dev/.well-known/oauth-protected-resource/mcp`, and Rush registers
the client (RFC 7591) and signs it in with OAuth 2.1 and PKCE.

## Connect with an API key

Create an API key in the console under Developers, then add the server with it:

```bash
claude mcp add --transport http rush https://api.prix.dev/mcp --header "Authorization: Bearer $RUSH_API_KEY"
codex mcp add rush --url https://api.prix.dev/mcp --bearer-token-env-var RUSH_API_KEY
```

In Cursor, add this under `mcpServers`:

```json
{"rush": {"url": "https://api.prix.dev/mcp", "headers": {"Authorization": "Bearer rk_live_…"}}}
```

A key or a sign-in connects. A person's console session token is refused with `403 FORBIDDEN`.

## What the agent can call

| Sessions | `create_session`, `get_session`, `wait_for_sessions`, `list_sessions`, `send_session_message`, `cancel_session`, `list_session_events`, `get_session_changes`, `get_session_artifact` |
| --- | --- |
| Saved agents | `list_agents`, `get_agent`, `create_agent`, `update_agent` |
| Projects | `list_projects`, `get_project` |
| What a run can use | `list_models`, `list_connections`, `list_repositories` |

Each tool makes the API call it names with your key or sign-in, so it reaches exactly what that reaches. A
refusal comes back as the API's `code` and message plus what to do next.

## A run takes minutes

`create_session` returns at once with the session id. `wait_for_sessions` then waits up to 50
seconds per call for one or several sessions to settle, so the calling agent can start a batch of
runs and collect them as they finish. For a server that should hear back without holding a tool
call open, set a [webhook](/docs/concepts/webhooks) on the key.

## Frequently asked questions

### Which MCP clients work?

Any client that speaks Streamable HTTP: claude.ai and ChatGPT connectors and other clients sign in
with OAuth; Claude Code, Codex, Cursor and Notion Custom Agents can also send an API key in the
`Authorization` header.

### Does the run happen on my machine?

No. Every run gets its own cloud sandbox with a computer and a browser. Your client only sends the
request and reads the result.

### What does a run cost?

The same as a run started through the API. See [Usage and billing](/docs/concepts/usage-and-billing).
