API + MCP.
Android,
read as text.
Mobile Sandboxes, controllable by your agents.
$0.01 per phone-minute. Parked phones are free.

GET /v1/phones/{phone_id}/observe
app: org.fossify.notes[1] Button desc="Search" (657,146)[2] Button desc="Create a new note" (784,146)[3] Button desc="Undo" (911,146)[4] Image desc="More options" (1027,146)[5] TextField "Release checklistRun the Android smoke testInspect the accessibility treePark the phone when finished" [focused] (540,1252)
A checklist that outlives a restart
One recorded run on an Android 14 sandbox: eight calls over REST and MCP, each paired with the screen it left behind.
Task Write a release checklist. Verify it survives a restart.

Captured screen
Loading recorded evidence…
Create a sandbox
POST /v1/phones?wait=ready
Android sandbox ready.
Inspect the captured request and response
Choose a step to inspect its captured request.
Connect over MCP or REST
Claude Code, Codex or any HTTP MCP client gets the phone as tools. Your own code calls the same sandbox over REST.
12 MCP tools
list_phonescreate_phonestart_phonepark_phonedelete_phoneset_deviceinstall_applist_appsuninstall_appobserveactscreenshot
Add the phone tools to Claude Code
claude mcp add --transport http \
mobilebox https://mobilebox.dev/mcp \
--header "Authorization: Bearer $MOBILEBOX_API_KEY"Create a phone in one HTTP request
curl -X POST "https://mobilebox.dev/v1/phones?wait=ready" \
-H "Authorization: Bearer $MOBILEBOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"my-sandbox","country":"DE"}'Five calls run the loop
Create a phone, read and act on its screen, park it when the task is done. Each state keeps its own limits.
An Android 14 phone, ready for your apps
One request provisions it; wait for ready before you act. Set the country, locale and timezone when you create it.
- REST
POST /v1/phones?wait=ready- MCP
create_phone
- Running
- 3 phones per workspace
- Kept
- 10 phones, parked ones included
- Full server
503 box_fullwith a retry time
Read numbered refs, then act on them
Each observation numbers the screen’s elements. Tap, type, swipe or install an APK, then read the new screen before the next decision.
- REST
GET /v1/phones/{id}/observePOST /v1/phones/{id}/actions- MCP
observeact
- Per call
- Up to 20 actions
- Body
- 256 KB of JSON
- Long-poll
- Waits up to 55 seconds
Billing stops; apps, logins and data stay
Resume the same sandbox when you need it. Apps start fresh after a resume, like after a reboot, so save before you park.
- REST
POST /v1/phones/{id}/parkPOST /v1/phones/{id}/start?wait=ready- MCP
park_phonestart_phone
- Idle
- Parks itself after 5 minutes
- Session
- 15 minutes by default, up to 3 hours
- Parked
- $0.00
The field guide
24 articles on Android agents: guides, engineering notes, comparisons and decisions.
Open the journalGive your coding agent an Android sandbox over MCP
Add the remote MCP server to Claude Code or Cursor, see every phone tool, run a bounded first task and know what is proven.
Why your agent tapped the wrong thing
Understand stale screen references, choose stable targets, and recover without repeating side effects.
A timeout does not mean the tap never happened
Reconcile phone creation, inspect partial action batches and check side effects before retrying an uncertain Android operation.
Screenshot or accessibility tree? Choose the evidence your agent needs
Choose structured Android observations for labels and state, screenshots for pixels, and synchronized evidence when both matter.
$0.01 per phone-minute
Billed per second while a phone is ready, with a one-minute minimum per session. Parked phones are free.
Pricing and limits| Session | Boot | Ready | Billed | Cost |
|---|---|---|---|---|
ses_fuhxfawlquvs | 18.1 s | 10.1 s | 60 s | $0.010000 |
ses_r7ybhndnzqud | 10.5 s | 2.8 s | 60 s | $0.010000 |