Docs: Linux desktops for computer-use agents | Maritime
Linux desktops
A Maritime Linux desktop is a persistent computer (XFCE, Chromium, LibreOffice) for each of your end users, driven by your model. You connect the Maritime MCP server to whatever agent you already run; the model calls get_computer once per end user and then computer in a screenshot, act, verify loop. Maritime creates the desktop, keeps it warm, sleeps it when idle, wakes it on the next action, and keeps its files and logins between sessions. There is no lifecycle for you to manage.
At a glance
What it is
A persistent Linux desktop (XFCE, Chromium, LibreOffice) per end user, which your model drives over MCP or REST.
Use it for
Websites and apps with no API, browser logins, work a person can take over by link.
Use something else when
- No screen needed: Agent box
- Windows-only software: Windows desktop
- A mobile app: Android phone
Start it
POST /api/v1/computers with externalUserId, get_computer over MCP, or New sandbox (?type=computers).
Lifecycle
Sleeps after 5 idle minutes with its memory saved and wakes in about a second. The memory snapshot is kept 7 days; the disk until you delete the computer.
Price
$0.12 an hour awake, per second, for 2 vCPU and 4 GB with the desktop, streaming and takeover. Asleep: $0.08 per GB-month of disk.
Limits
- 1200 x 750 model screenshots
- 50 actions per batch
run_shell30 seconds- 8 MiB per file read or write.
In sixty seconds
- Use the key you already have. A
manageor full-access Maritime key drives computers and agents alike, so the MCP server takes the same bearer token as the rest of the API. To hand out a key that reaches computers and nothing else, create a Computers key in the Computers section of Settings, API keys: a key whose only scope iscomputersis refused on every other Maritime endpoint. Dashboard sessions cannot reach/api/v1/computers; that surface takes an API key. - Add the MCP server to your agent with one of the snippets below.
- Your model calls
get_computerwith the end user's id, gets acomputer_id, then drives it withcomputer. The first call creates the desktop; every later call for the same end user returns the same one.
Connect your model
The server speaks Streamable HTTP and authenticates with your Computers key as a bearer token. Replace mk_... with the key; the exact endpoint for your deployment is shown on the Computers page.
Copy MCP config
{
"mcpServers": {
"maritime-computers": {
"type": "http",
"url": "https://mcp.maritime.sh/mcp",
"headers": {
"Authorization": "Bearer mk_..."
}
}
}
}
Tool timeouts
Most MCP clients cut a tool call off after 60 seconds. Two calls here can pass that, and both need the limit raised, not just the takeover:
get_computeron first use creates the desktop: 3 to 8 seconds normally, up to 60 on a cold placement. Later wakes take about 3 seconds.request_takeoverwithwait: trueholds until the person clicks Done or Failed, which is minutes. Leavingwaitat its default returns at once and needs no extra time.
Tools
| Tool | What it does |
|---|---|
| get_computer | One computer per end user. user_id (unless pinned), optional name, os (linux by default, windows or android), arch (Android only, x86_64 or arm64), and screen (Linux only, {width, height}). Returns computer_id, status, screen size and a coordinate hint. Idempotent. |
| computer | One canonical action (schema below). Returns the post-action screenshot as an image block plus a text block with action, frame_id, width, height and any detail. |
| computer_batch | Up to 50 actions in order; stops at the first failure. Each step's text is prefixed [i]; only the final step carries an image unless a step sets no_screenshot: false. |
| run_shell | Runs a command inside the desktop as the desktop user. timeout up to 30 s. Returns exit code, stdout and stderr. |
| read_file | Reads a file under /data or /home/desk. Text when UTF-8, otherwise base64 with a mime note. 8 MiB cap. |
| write_file | Writes a file under the same roots. encoding is utf8 (default) or base64. |
| request_takeover | For logins, 2FA, CAPTCHAs and payments. Mints a control link and returns it as text. |
| takeover_status | Where a takeover stands: mode (human while the person holds the desktop, agent once it is back), when it expires, and how the last one ended. |
| close_computer | Ends the current session now. The desktop sleeps 30 seconds later unless another action arrives (see sessions). |
Billing
A computer is billed per second while it is awake, at $0.12 an hour, with no minimum. Asleep, it is billed only for its disk, $0.08 per GB-month. Nothing is counted per action or per session. Windows desktops are $0.18 an hour and Android phones $0.15 an hour, on the same terms.
The Computers page lists your computers. The Billing page is where the plan is started, changed and cancelled, once, for the whole account.
Limits
| What | Limit |
|---|---|
| Idle sleep | 5 minutes without an action |
| Close grace | 30 seconds after close before the computer sleeps |
| Batch | 50 actions per computer_batch |
| run_shell | 30 seconds per command |
| Files | 8 MiB per read or write, absolute paths under /data or /home/desk, no .. |
| Viewer links | 10 minutes by default, 1 hour at most; a new control link revokes the previous one |
| Rate limits | 30 creates, 300 actions and 30 viewer links per minute per key |
| Screenshot | 1200 x 750 model frame on a 1280 x 800 desktop by default; Linux screens 640 to 1920 a side |
Errors
| Slug | Meaning |
|---|---|
| trial_required | 402. The account has no trial or plan yet. A person must add a card on the Billing page to start the free trial. |
| trial_cap_reached | 402. The free trial's $20 of usage is used up. A person must start the plan on the Billing page. |
| payment_required | 402. The last payment failed. A person must update the card on the Billing page. |