Docs/Claude Code
Coding agents

Claude Code

Give Claude Code a computer by adding the Sai MCP server.

The @simular-ai/sai-mcp server exposes Sai as MCP tools. Claude Code starts it over stdio and calls it like any other tool.

Install

InstallShell
claude mcp add sai -e SAI_API_KEY=sapi_... -- npx -y @simular-ai/sai-mcp

Add -s user to make it available in every project. Requires Node.js 22.12 or newer.

Verify

VerifyShell
claude mcp list

sai should be listed as connected. Then, in a Claude Code session:

Prompt
Use Sai to open Notepad, type hello, and save it to the desktop as hello.txt.

Environment

VariableRequiredNotes
SAI_API_KEYyesAn sapi_ key from platform.simular.ai.
SAI_API_URLnoDefaults to production. Set it to point at staging.
SAI_PUSHnoOnly for channels. See Channels.
SAI_LOCAL_VIEWno0 turns off the local watch_url page. See Watch Sai work.
SAI_CONTROLno0 leaves out the control tools, which are on by default. See Direct control.

Tools

ToolInputOutput
sai_machinesnone{ machines: [{ machineId, name, kind, online }], default }
sai_modelsnone{ models: [{ id, name, provider, tier, costTier, allowed }], default }
sai_task_start{ task, machine_id?, file_ids?, new_session?, model?, autonomous? }{ session_id, machine_id, queued, push, task_id, watch_url? }
sai_task_wait{ session_id, timeout_s?, cursor? }{ status, events, text, approval?, usage?, sessionUsage?, cursor }
sai_task_approve{ approval_id, decision, selections? }{ ok }, or { ok: false, approval_url, reason: "link_only" }
sai_task_abort{ session_id }{ ok }
sai_upload{ path }{ file_id, name, mime, size }
sai_live_link{ machine_id? }{ machine_id, live_url, expires_at }

usage and sessionUsage are the task's and the session's model tokens and cost so far, counted live and not the billing figure; see Token usage. decision is approve, approve_for_task or deny. timeout_s defaults to 45 and is capped at 55, under the 60-second tool timeout most MCP clients use. model is an id from sai_models or auto; it sticks to the session until changed, and the model only calls sai_models when you ask for a specific model.

sai_live_link returns a link to the computer's screen that a person can open without a Simular sign-in: live_url, valid until expires_at (Unix time in milliseconds). The mouse and keyboard work there; the page pauses its own input while a Sai task is running, but that is not enforced. machine_id is optional when the account has one computer. Anyone with the link can use the screen until it expires, so keep it to yourself. See When Sai needs a person.

autonomous: true on sai_task_start (from @simular-ai/sai-mcp 0.3.0) runs that task without permission requests, as if approve_for_task had been answered up front; the grant ends with the task. The agent only sets it when you ask for a task to run unattended. Approvals that need a person in a browser, such as a sign-in, still stop the task.

What the model does

The server's instructions describe the loop, so you do not have to prompt for it:

  1. sai_task_start with the task.
  2. sai_task_wait until status is not running.
  3. On needs_approval: sai_task_approve when the approval can be answered, otherwise show approval_url to you and wait again.
  4. On idle: report text.
  5. When Sai says it needs you on the screen (a sign-in, a captcha, a code): sai_live_link, and give you live_url. Open it in any browser, do the step, and tell the agent; it sends Sai a message with sai_task_start to carry on.

There is no screenshot tool. Sai describes what it sees in text and progress events. To watch the screen yourself, open the watch_url link the agent gives you: see Watch Sai work.

Gotchas

  • One conversation per computer. Pass new_session: true to start clean.
  • Files go through sai_upload first; then pass the returned file_id in file_ids.
  • A free account's first task of the day can sit in running for about two minutes while the computer starts.
  • If sai_task_wait times out, call it again with the returned cursor. The task keeps running.
  • sai_task_wait retries a gateway 502, 503 or 504 on its own, three times with a growing pause, before reporting an error. Other statuses come back at once.

Optional: the sai skill

The package also ships a Claude Code skill that teaches the loop, and falls back to plain HTTP in a session where the MCP server is not loaded. Install it with:

Install the skillShell
npx -y @simular-ai/sai-mcp init-claude            # for you: ~/.claude/skills/sai
npx -y @simular-ai/sai-mcp init-claude --project  # for this repo: ./.claude/skills/sai

Re-run it after upgrading to refresh the skill. It never overwrites a SKILL.md you edited unless you pass --force.

© 2026 Simular Inc. All rights reserved.