A real, stock Android device — real SIM, real number, real carrier IP, and a human-grade finger — driven in plain language over MCP and REST. Nothing to install on the device, no brittle automation layer to babysit. Your agent taps, types, reads its codes, and gets the task done on real apps.
Add a real phone as a remote MCP server to any client — or call the REST API from any language. Peek at /v1/catalog first for live stock, regions and latency. No auth to look.
claude mcp add --transport http androidmcp \
https://api.androidmcp.com/mcp \
--header "Authorization: Bearer $ANDROIDMCP_KEY"{
"mcpServers": {
"androidmcp": {
"type": "http",
"url": "https://api.androidmcp.com/mcp",
"headers": { "Authorization": "Bearer ${ANDROIDMCP_KEY}" }
}
}
}Connect to the AndroidMCP MCP server at
https://api.androidmcp.com/mcp, lease a phone, and
open the Chrome app.API=https://api.androidmcp.com
# lease a clean phone
curl -X POST $API/v1/sessions \
-H "Authorization: Bearer $ANDROIDMCP_KEY"
# -> { "session_id": "sess_01J9", "android_api": 13 }
# drive it by description
curl -X POST $API/v1/sessions/sess_01J9/tap \
-H "Authorization: Bearer $ANDROIDMCP_KEY" \
-d '{ "target": "the Like button" }'from androidmcp import Client
phone = Client().lease() # a real, clean device
phone.tap("the Login button") # natural language, grounded
phone.type("[email protected]")
code = phone.await_sms(timeout=60) # real number, real SMS
print(phone.observe()) # screenshot of current screenimport { AndroidMCP } from "androidmcp";
const phone = await new AndroidMCP().lease();
await phone.tap("the Login button"); // grounded NL targeting
await phone.type("[email protected]");
const code = await phone.awaitSms({ timeoutMs: 60_000 });
await phone.observe(); // returns the live screenA real phone with a real OS, SIM and number isn't one tool — it's a dozen at once, and your agent reaches for any of them in the same session.
Tap, type, swipe and scroll any native app by plain-language intent, with a verify step on irreversible actions.
Reads the one-time passwords, texts and push notifications on its real number — the anchor every login and 2FA needs.
A real carrier voice line the agent can hear and speak on: outbound, inbound, IVR by tone. Not a flagged VoIP number.
Route your own traffic out through the phone's real carrier IP — a genuinely private mobile egress, no shared pool.
Give it a document, image or video and it lands on the device, ready to upload into whatever app the task needs.
A real-time stream of the screen — and the camera — for anything that moves faster than a still screenshot.
Logins, cookies and task state persist across reboots and days, so a long-running job resumes where it left off.
Passwords and card numbers are entered on the device without your agent ever seeing them.
A real SIM in a real place — geo-locked apps, local numbers and regional pricing treat it as the local phone it is.
One device or thousands, each isolated, wiped clean between jobs, and self-healing.
No SDK lock-in. Connect over MCP from any client, or REST from any language — and it doesn't matter what model is holding the leash. Perception, grounding and verification are ours; you just say what should happen.
Apps inspect the device they run on. AndroidMCP keeps the agent, planner and automation layer outside that boundary, while the phone remains stock: real OS, real SIM, real carrier, normal touch.
Delivery, social, marketplaces, messaging — native apps driven exactly as a person does, including the many that have no public API and that brittle accessibility-based tools choke on.
A real number on a real carrier means the SMS and push codes that account setup and two-factor login depend on actually arrive — and your agent reads them.
Sales, appointment-setting, lead qualification, IVR navigation, inbound support — a real line and a clean audio path to listen and talk through.
Turn the phone you leased into your own private egress: route your traffic out through its real carrier connection — not a shared, rented proxy pool.
The device is physically on a real local carrier with a local number and locale. Geo-locked onboarding, local rails and regional pricing see a genuine local phone.
Test your app and flows on genuinely real hardware and real mobile networks — the conditions an emulator farm can never reproduce honestly.
Because the input is real hardware touch and the screen is read by the OS's own capture, there's no on-device automation layer to install, maintain, or have break on the next app update. Native apps behave normally, and the same setup works across apps without per-app scripting.
A real, stock, never-rooted Android phone with a real SIM — a genuinely physical device, not an emulator or a cloud-Android VM. That's why the sensors, telephony and network are all real.
Any of them. Vision or text-only, frontier or an 8B running on a laptop. You express intent in plain language; the platform handles perception, grounding and verification. Connect over MCP from any MCP client, or call the REST API from any language.
mobilerun drives the phone through an on-device accessibility service you install and maintain. Browserbase is a web browser — it can't open a native app, receive an SMS, or make a carrier call. We use external hardware input and the OS's own screen capture, so there's nothing to install on the device and native apps just work.
Yes. Every phone is a real number on a real carrier: it reads one-time codes and texts, and places and answers real voice calls with an audio path the agent can hear and speak on.
Add it as a remote MCP server in one line (claude mcp add …), drop a mcpServers block into Claude Desktop / Cursor / VS Code, or call the REST API directly. Query /v1/catalog first to see live stock, regions and latency — no auth required.
Leave your email and we'll reach out when a phone in your region opens up, or when we ship the plan you're after — no spam, just a note when it's ready.
Real device. Real SIM. Real carrier IP. Real results.