Clousd: Real Android Phones for AI Agents
Server Details
A real Android phone in the cloud for any MCP agent. Each device is built as a specific handset (Pixel, Galaxy, Xiaomi, Motorola, OnePlus and 150+ models, Android 12-17) with the same build, sensors, cameras, codecs and GPU as the real hardware, Google Play inside, and its own residential, mobile, ISP or datacenter network exit in the country you choose - apps see a phone, not an emulator. Six tools: observe (screenshot with numbered elements + UI tree), act (tap by number, swipe, type in any language, apps, links, intents, settings, clipboard, notifications), inspect (notifications, clipboard, app versions, crashes, health without touching the screen), snapshots (reset every run to the same state, clone one prepared phone into many), recipe (record a flow once, replay it without a model), devices. Local stdio server or hosted endpoint at https://api.clousd.com/mcp with your key. Built for agent evaluation and training, app testing on real models, account operations and any task that needs a phone in a specific country. Docs: https://clousd.com/docs/ - Early access: https://clousd.com/agents/
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Repository
- Clousd-Android/clousd-sdk
- GitHub Stars
- 0
TDQS
Score is being calculated.
Available Tools
6 toolsactDestructiveInspect
Do one thing on the phone, then wait until the screen settles. Prefer element numbers from observe over
coordinates; tap_text taps the element whose text contains text. Typing goes into the focused field (tap it
first) and works in any language. Returns what happened; "the screen did not change" means the action probably
missed - observe again.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | x in screenshot pixels (tap, long_press, swipe start) | |
| y | No | y in screenshot pixels | |
| ms | No | swipe / long_press duration in ms | |
| x2 | No | swipe end x | |
| y2 | No | swipe end y | |
| text | No | type: the text; key: home|back|recents|enter|tab|del|menu; scroll: down|up; open_app/close_app: package; open_url: https://...; tap_text/wait_text: text on screen; settings: wifi|bluetooth|display|sound|apps|location|about|battery|...; intent: a URI to view (geo:, tel:, https:...) or JSON {action,data,package,component,extras}; clipboard_set: the text | |
| action | Yes | one of: tap long_press swipe scroll tap_text wait_text type key open_app close_app open_url installed intent settings clipboard_set notifications_open notifications_close notifications_clear | |
| device | Yes | Device name from devices (op=list), e.g. dev_04f2 | |
| element | No | element number from the last observe (tap, long_press) | |
| timeout | No | wait_text: seconds to wait, up to 120 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
devicesIdempotentInspect
Phones this API key can use.
op=list: name, state (running / stopped / starting), model, Android version and network exit of each phone.
op=start / op=stop with device: start a stopped phone (waits until it has booted, one to three minutes) or stop
one (a stopped phone keeps its state and costs nothing).
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | list (default) | start | stop | list |
| device | No | device name, for start/stop |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
inspectRead-onlyInspect
Read the phone without touching the screen. notifications: the shade as a list (app, title, text, time). clipboard: the clipboard text. app: installed version, install/update time, installer, whether it runs or is on screen. crashes: recent app crashes, native crashes and ANRs with the first lines of the stack. health: running, booted, network exit and the latest automatic check of the phone. installed: packages of apps that can be opened.
| Name | Required | Description | Default |
|---|---|---|---|
| what | Yes | notifications | clipboard | app | crashes | health | installed | |
| device | Yes | Device name from devices (op=list), e.g. dev_04f2 | |
| package | No | app: the package to describe; crashes: only this package |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
observeRead-onlyInspect
Look at the phone: a fresh screenshot, the app on screen and (with_text) every labelled or tappable element with a number. Act on an element by its number (act element=N); coordinates, when needed, are in this image's pixels.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Device name from devices (op=list), e.g. dev_04f2 | |
| numbers | No | draw the element numbers on the screenshot | |
| with_text | No | also list the elements (numbered, centres in image pixels) |
recipeDestructiveInspect
App recipes: scripted flows that wait for the right screen at each step, deal with popups and report what they did. op=run runs a built-in recipe (package + action) or your own JSON and returns when it is finished. op=record_start begins recording what is done on the phone (through act, or by a person in the live view); record_status shows progress; record_stop returns the recorded draft recipe, ready for op=run.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | run | record_start | record_status | record_stop | |
| vars | No | run: variables as JSON, e.g. {"seconds": "300"} | |
| steps | No | run: your own recipe as JSON {app, steps:[...]} (e.g. a recorded draft) | |
| action | No | run: built-in recipe name (e.g. warm, login, publish_post) | |
| device | Yes | Device name from devices (op=list), e.g. dev_04f2 | |
| package | No | run: app package of a built-in recipe (e.g. com.instagram.android) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
snapshotsDestructiveInspect
Saved states of a phone, for starting every run from the same point. op=list: id, created, android, current, restorable. op=save: save the current state. op=restore with snapshot_id: reset the phone to that state (what happened since is lost). op=clone with snapshot_id and new_name: a new phone from that state.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | list (default) | save | restore | clone | list |
| device | Yes | Device name from devices (op=list), e.g. dev_04f2 | |
| new_name | No | clone: name of the new phone (letters and digits, up to 16) | |
| snapshot_id | No | restore / clone: id from op=list |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Changed
act10 fields changed- added
Input schema / properties / action / descriptionAdded value: +"one of: tap long_press swipe scroll tap_text wait_text type key open_app close_app open_url installed intent settings clipboard_set notifications_open notifications_close notifications_clear" - added
Input schema / properties / device / descriptionAdded value: +"Device name from devices (op=list), e.g. dev_04f2" - added
Input schema / properties / elementAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "element number from the last observe (tap, long_press)", + "title": "Element" +} - added
Input schema / properties / ms / descriptionAdded value: +"swipe / long_press duration in ms" - added
Input schema / properties / text / descriptionAdded value: +"type: the text; key: home|back|recents|enter|tab|del|menu; scroll: down|up; open_app/close_app: package; open_url: https://...; tap_text/wait_text: text on screen; settings: wifi|bluetooth|display|sound|apps|location|about|battery|...; intent: a URI to view (geo:, tel:, https:...) or JSON {action,data,package,component,extras}; clipboard_set: the text" - added
Input schema / properties / timeout / descriptionAdded value: +"wait_text: seconds to wait, up to 120" - added
Input schema / properties / x / descriptionAdded value: +"x in screenshot pixels (tap, long_press, swipe start)" - added
Input schema / properties / x2 / descriptionAdded value: +"swipe end x" - added
Input schema / properties / y / descriptionAdded value: +"y in screenshot pixels" - added
Input schema / properties / y2 / descriptionAdded value: +"swipe end y"
- Changed
devices3 fields changed- added
Input schema / properties / device / descriptionAdded value: +"device name, for start/stop" - added
Input schema / properties / op / descriptionAdded value: +"list (default) | start | stop" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "additionalProperties": true, + "title": "Result", + "type": "object" + } + }, + "required": [ + "result" + ], + "title": "devicesOutput", + "type": "object" +}
- Added
inspect - Changed
observe3 fields changed- added
Input schema / properties / device / descriptionAdded value: +"Device name from devices (op=list), e.g. dev_04f2" - added
Input schema / properties / numbersAdded value: +{ + "default": true, + "description": "draw the element numbers on the screenshot", + "title": "Numbers", + "type": "boolean" +} - added
Input schema / properties / with_text / descriptionAdded value: +"also list the elements (numbered, centres in image pixels)"
- Added
recipe - Changed
snapshots5 fields changed- added
Input schema / properties / device / descriptionAdded value: +"Device name from devices (op=list), e.g. dev_04f2" - added
Input schema / properties / new_name / descriptionAdded value: +"clone: name of the new phone (letters and digits, up to 16)" - added
Input schema / properties / op / descriptionAdded value: +"list (default) | save | restore | clone" - added
Input schema / properties / snapshot_id / descriptionAdded value: +"restore / clone: id from op=list" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "additionalProperties": true, + "title": "Result", + "type": "object" + } + }, + "required": [ + "result" + ], + "title": "snapshotsOutput", + "type": "object" +}
4 tool updates
- First observed
act - First observed
devices - First observed
observe - First observed
snapshots
Publisher details
- Operator
- Clousd ยท Publisher source
- Operator website
- https://clousd.com ยท Publisher source
- Vendor relationship
- First-party ยท Publisher source
- Documentation
- https://clousd.com/docs/ ยท Publisher source
- Trust center
- https://clousd.com/privacy/ ยท Publisher source
- Restrictions
- Requires a Clousd account and an API key (early access, request at https://clousd.com/agents/). Usage is billed per minute while a phone runs ยท Publisher source
Related MCP Connectors
Cloud Android phones for AI agents: create a phone, read the screen, tap, type, install APKs, park.
Disposable cloud Android emulators for coding agents: run an APK or PR build, tap, type, screenshot.
Control real Android and iOS devices with LLM agents โ tap, swipe, type, automate flows.
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
Related MCP Servers
- AlicenseBqualityAmaintenanceGive any LLM agent a real Android or iPhone. 62 MCP tools: tap, swipe, type, screenshot, screen-tree reading, app launch, camera, TTS, crash reports, batched execution. Android via ADB, iPhone via WebDriverAgent, on-device inference, Docker+KVM emulators. Works with Claude Code, Cursor, LangChain, LlamaIndex, and any MCP client. MIT.66377MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude or any MCP agent to see and operate a real Android phone over adb, with fast screen reads, tap/type/swipe actions, app launching, deep links, and brand-aware setup guidance, all without admin rights or an Android SDK.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control real cloud phones by reading screens as text, tapping, typing, installing APKs, handing off to humans, and parking devices to stop billing, without ADB or emulators.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to control a physical Android device or Docker-hosted emulator over ADB by taking screenshots and performing taps, swipes, key presses, text input, shell commands, app launches, and device info queries. It runs as a local MCP stdio server alongside a web UI and REST API for remote access.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.