Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.Clousd-Android/clousd-mcp

REMOTE · API.CLOUSD.COM · 2 COMPONENTS

Real Android phones in the cloud for AI agents: give phones a task in plain words and get the answer

0 this week 36 Trust /100

Last scanned (21 minutes ago)

Scores higher than 19% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Browser Automation

Recent critical change

Authorization (16 Oct 2026). See the changelog before you install this server.

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability0
Schema Quality & AI Usability0
  • Schema blocked by authentication: the endpoint requires auth we don't have to read it. See how to fix → Unverified
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
  • Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Tool Safety0
  • Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Capabilities0
  • Capabilities blocked by authentication: the endpoint requires auth we don't have to read them. See how to fix → Unverified

Unverified: 6 categories

Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm. Claim this server and supply a read-only token to verify it and lift the score.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Oct 26 −29
    • Endpoint reachability: reachable → behind authorisation ▼ security
    • Tool safety: pass → unverified ▼ security
    • Stability: 0.30 → unverified ▼ security
    • Transport: pass → unverified ▼ security
    • Authorization: fail → pass ▲ security
    • First check of Authorization: partial security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: Schema blocked by authentication: the endpoint requires auth we don't have to read it. functional
  • 19 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Oct 26 +40
    • Authorization: unverified → fail ▼ critical
    • Injection markers: unverified → pass ▲ security
    • Transport: fail → pass ▲ security
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “fleet”, which the server declares destructive security
    • New tool “network”, which the server declares destructive security
    • Tool “devices” rewrote its description, which is the text the model reads security
    • Tool “recipe” rewrote its description, which is the text the model reads security
    • Schema quality: 200 → 339 ▼ functional
    • Endpoint reachability: not serving MCP → reachable ▲ functional
    • Tool coverage: 83% → 90% ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • Stability: unverified → 0.17 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • New tool “account” functional
    • New tool “resources” functional
    • “devices” added an optional parameter “label” cosmetic
    • “observe” reworded the description of “device” cosmetic
    • “act” reworded the description of “device” cosmetic
    • “devices” reworded the description of “device” cosmetic
    • “devices” reworded the description of “op” cosmetic
    • “inspect” reworded the description of “device” cosmetic
    • “recipe” reworded the description of “device” cosmetic
    • “snapshots” reworded the description of “device” cosmetic
  • 13 Oct 26 −39
    • Endpoint reachability: reachable → not serving MCP ▼ security
    • Stability: 0.03 → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Authorization: fail → unverified ▼ security
    • Transport: pass → fail ▼ security
    • Tool coverage: 100 → unverified ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • First check of Schema quality: unverified functional
  • 12 Oct 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 11 Oct 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://api.clousd.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.clousd.com CN=YE1,O=Let's Encrypt,C=US 8 Sept 2026 7 Dec 2026 ECDSA 256 ECDSA-SHA384 5fee1801bf370d4309567096a4da423935d
SANs: api.clousd.com
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.clousd.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
clousd.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On connection
HTTP status 401

WWW-Authenticate challenge Bearer resource_metadata="https://api.clousd.com/.well-known/oauth-protected-resource"

Bearer resource_metadata="https://api.clousd.com/.well-known/oauth-protected-resource"
Header Value
www-authenticate Bearer resource_metadata="https://api.clousd.com/.well-known/oauth-protected-resource"

Protected resource metadata

Document https://api.clousd.com/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://api.clousd.com
Authorisation server https://clousd.com

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.clousd.com/mcp Auth required 401
http (plaintext) http://api.clousd.com/mcp HTTPS enforced 308 https://api.clousd.com/mcp
MCP tools · 10 exposed · ~3,166 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
account ~181

The account's money - check it before starting phones, creating them or launching long runs, and tell the user what it says. op=balance: balance, spend_per_day (running per-minute phones + paid proxy traffic of the last 24 hours), runs_out_in_hours, phones running per minute with their price, monthly renewals within 7 days, prices per hour / day cap / month / GB by exit type, the top_up link, and warnings: show every warning to the user in plain words (e.g. "about 6 hours left; at zero the phones stop and go to storage", "proxy traffic cost $3.40 today") with the top_up link. When the balance is low, say so before spending more - do not silently start phones.

NameTypeReqDescription
opstring–balance
NameTypeReqDescription
resultobjectyes–

No examples provided.

act ~367

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.

NameTypeReqDescription
actionstringyesone 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
devicestringyesDevice from devices (op=list): its name, its label from the dashboard (e.g. "Anna IG" or "Pixel 7 #3") or its number
element––element number from the last observe (tap, long_press)
msinteger–swipe / long_press duration in ms
textstring–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|so…
timeoutinteger–wait_text: seconds to wait, up to 120
x––x in screenshot pixels (tap, long_press, swipe start)
x2––swipe end x
y––y in screenshot pixels
y2––swipe end y
NameTypeReqDescription
resultstringyes–

No examples provided.

devices ~226

Phones this API key can use. op=list: name, label (the name people see in the dashboard, e.g. "Anna IG" or "Pixel 7 #3"), number, state (running / stopped / starting), model, Android version, network exit, the app accounts linked to it and its proxy_id. Every tool takes the name, the label or the number. op=rename with device and label: give a phone a name (empty = back to "Model #N"); name phones after their accounts to keep a fleet readable. 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).

NameTypeReqDescription
devicestring–device (name, label or number), for start / stop / rename
labelstring–rename: the new name, up to 40 characters
opstring–list (default) | start | stop | rename
NameTypeReqDescription
resultobjectyes–

No examples provided.

fleet ~637

Work with many phones in one call - the way to automate, instead of tapping each phone step by step. op=recipes lists the built-in app recipes (sign in, warm up an account, publish, delete the last post...) with their inputs; prefer a recipe over act whenever one fits the task. op=run starts a recipe (package + action) or your own steps on up to 32 phones at once (they may live on different servers) and returns a job id right away - the phones work in parallel, minutes to an hour for a warm-up. op=status with job shows per-phone progress: call it every 30-60 s until state is done or failed. Steps for op=run: recipe (package, action, vars), open_app / close_app (package), url (url), tap_text / wait_text (text, seconds), wait (seconds, seconds_max), scroll (text=down|up), browse (seconds 10-600: scroll like a person), install_app (package from the catalog), key (key), screenshot, rotate (new IP), if_text / unless_text (text, skip), login (package, account: an id from resources op=accounts or "linked" for the account linked to each phone - the server fills the password), publish (package, text: post|story|reel, media_id from resources op=media, caption). vars_by_device gives each phone its own account or media_id too, e.g. {"dev_1": {"account": "12"}, "dev_2": {"account": "13"}}.

NameTypeReqDescription
actionstring–run: recipe action from op=recipes, e.g. warm, login, publish_post
appstring–recipes: filter by app name or package, e.g. instagram
devicesstring–run: device names as JSON list or comma-separated, e.g. ["dev_1","dev_2"]; "all" = every running device of this key
jobstring–status: job id returned by op=run
opstringyesrecipes | run | status
packagestring–run: app package of the recipe, e.g. com.instagram.android
staggerstring–run: spread the starts, min,max seconds, e.g. 20,90 (phones do not act in lockstep)
stepsstring–run: instead of a recipe, your own steps as JSON list, e.g. [{"op":"open_app","package":"com.android.chrome"},{"op":"wait","seconds":5}]
varsstring–run: variables for every device as JSON, e.g. {"seconds": "900", "comment_chance": "0.1"}
vars_by_devicestring–run: per-device variables as JSON, e.g. {"dev_1": {"login": "anna", "password": "..."}} (logins differ per phone)
NameTypeReqDescription
resultobjectyes–

No examples provided.

inspect ~186

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.

NameTypeReqDescription
devicestringyesDevice from devices (op=list): its name, its label from the dashboard (e.g. "Anna IG" or "Pixel 7 #3") or its number
packagestring–app: the package to describe; crashes: only this package
whatstringyesnotifications | clipboard | app | crashes | health | installed
NameTypeReqDescription
resultobjectyes–

No examples provided.

network ~422

Where phones go online. Every phone uses one proxy of the account: your own proxy, or a Clousd exit (residential, mobile, ISP, datacenter in a country, paid per GB); time zone, locale and SIM follow it. op=options: exit types on sale and countries. op=status: the exit a device uses now (IP, country, carrier). op=proxies: the account's proxies and which devices use each. op=add: save your proxy (it is checked at once) or a Clousd exit. op=bind: put devices on a proxy. op=unbind: take them off (no internet until bound again). op=rotate: new IP for every running device on the proxy. op=check: test your proxy. op=delete: remove an unused proxy.

NameTypeReqDescription
countrystring–add: two-letter country of a Clousd exit, e.g. US
devicestring–status: the device to look at
devicesstring–bind / unbind: device names, JSON list or comma-separated
ip_typestring–add (own proxy): static | residential | mobile
namestring–add: a name to find it by
opstringyesoptions | status | proxies | add | check | bind | unbind | rotate | delete
proxystring–add: your own proxy - host:port:user:pass, user:pass@host:port or socks5://user:pass@host:port
proxy_idinteger–check / bind / rotate / delete: proxy id from op=proxies
rotate_urlstring–add (own residential/mobile proxy): the provider's link that changes the IP
typestring–add: instead of your own proxy, a Clousd exit - residential | mobile | isp | datacenter (see op=options), paid per GB
NameTypeReqDescription
resultobjectyes–

No examples provided.

observe ~136

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.

NameTypeReqDescription
devicestringyesDevice from devices (op=list): its name, its label from the dashboard (e.g. "Anna IG" or "Pixel 7 #3") or its number
numbersboolean–draw the element numbers on the screenshot
with_textboolean–also list the elements (numbered, centres in image pixels)

No output schema declared.

No examples provided.

recipe ~282

App recipes on one phone: 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 - the list with inputs is fleet op=recipes) or your own JSON and returns when it is finished; for several phones use fleet op=run instead. 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.

NameTypeReqDescription
actionstring–run: built-in recipe name (e.g. warm, login, publish_post)
devicestringyesDevice from devices (op=list): its name, its label from the dashboard (e.g. "Anna IG" or "Pixel 7 #3") or its number
opstringyesrun | record_start | record_status | record_stop
packagestring–run: app package of a built-in recipe (e.g. com.instagram.android)
stepsstring–run: your own recipe as JSON {app, steps:[...]} (e.g. a recorded draft)
varsstring–run: variables as JSON, e.g. {"seconds": "300"}
NameTypeReqDescription
resultobjectyes–

No examples provided.

resources ~546

The account's resources, the same as Resources in the dashboard. accounts: saved app accounts (login, status, the phone it is linked to; parent_id = it signs in through that Instagram) - passwords and 2FA secrets are never shown; add_via_instagram (account_id = an Instagram account, platform = com.facebook.katana or com.instagram.barcelona): a Facebook / Threads that signs in through that Instagram, on the same phone, no password. To sign a phone in, run fleet with the step {"op":"login","package":...,"account":<id> or "linked"} and the server fills the password itself. add_accounts / link_account: save accounts and link one to a phone. texts / add_texts: captions, comments, bios, names. media / upload_media: the photo and video library; publish one with fleet step {"op":"publish","package":...,"text":"post", "media_id":<id>,"caption":...}. send_media: copy files into phones' galleries as if taken by that phone.

NameTypeReqDescription
account_idinteger–link_account: account id from op=accounts; add_via_instagram: the Instagram account id
accountsstring–add_accounts: JSON list of {platform, login, password, email?, email_password?, totp?, note?, device?}
data_b64string–upload_media: the file as base64 when there is no path (up to 25 MB)
devicestring–link_account: the phone to link it to (empty = unlink)
devicesstring–send_media: device names, JSON list or comma-separated
kindstring–media: image | video (empty = both)
media_idsstring–send_media: library ids, JSON list or comma-separated
namestring–upload_media: file name with extension, e.g. beach.jpg
opstringyesaccounts | add_accounts | link_account | add_via_instagram | texts | add_texts | media | upload_media | send_media
pathstring–upload_media: a file path on the machine running this server (local MCP only)
platformstring–accounts: filter by app package, e.g. com.instagram.android; add_via_instagram: com.facebook.katana or com.instagram.barcelona
textsstring–add_texts: JSON list of strings
typestring–texts / add_texts: caption | comment | bio | name | username
NameTypeReqDescription
resultobjectyes–

No examples provided.

snapshots ~183

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.

NameTypeReqDescription
devicestringyesDevice from devices (op=list): its name, its label from the dashboard (e.g. "Anna IG" or "Pixel 7 #3") or its number
new_namestring–clone: name of the new phone (letters and digits, up to 16)
opstring–list (default) | save | restore | clone
snapshot_idstring–restore / clone: id from op=list
NameTypeReqDescription
resultobjectyes–

No examples provided.

Install

How do I install the io.github.Clousd-Android/clousd-mcp server?

io.github.Clousd-Android/clousd-mcp is a hosted endpoint at https://api.clousd.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.clousd.com

# add to Claude Code
claude mcp add --transport http clousd-android-clousd-mcp 'https://api.clousd.com/mcp'
Common questions

What is the io.github.Clousd-Android/clousd-mcp server?

io.github.Clousd-Android/clousd-mcp is listed in the public MCP registry as io.github.Clousd-Android/clousd-mcp. Real Android phones in the cloud for AI agents: give phones a task in plain words and get the answer. This page covers its hosted endpoint (https://api.clousd.com/mcp).

Is the io.github.Clousd-Android/clousd-mcp server safe to use?

io.github.Clousd-Android/clousd-mcp scores 36 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.Clousd-Android/clousd-mcp server expose?

io.github.Clousd-Android/clousd-mcp exposes 10 tools: devices, observe, act, inspect, snapshots, and 5 more. Their descriptions and schemas cost roughly 3,166 tokens of context every time the server is loaded.

Does the io.github.Clousd-Android/clousd-mcp server require authentication?

Yes. io.github.Clousd-Android/clousd-mcp asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the io.github.Clousd-Android/clousd-mcp server still maintained?

io.github.Clousd-Android/clousd-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.