Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization required, Bearer, issuer https://clousd.com
Authorization required, Bearer, issuer https://clousd.com
Authorization not required → required, Bearer, issuer https://clousd.com
Recently observed → Live
Added "account", "fleet", "network" and 1 more; changed the definition of "act", "devices", "inspect" and 3 more (6 tools before, 10 now)
⟨26 unchanged words⟩ string"},"device":{"description":"Devicenamefrom devices (op=list): its name, its label from the dashboard (e.g.dev_04f2\"Anna IG\" or \"Pixel 7 #3\") or its number","title":"Device","type":"string ⟨162 unchanged words⟩
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, Live → Recently observed
Certificate recorded, valid to 2026-12-07
Authorization not required
Added "inspect" and "recipe"; changed the definition of "act", "devices", "observe" and 1 more (4 tools before, 6 now)
⟨5 unchanged words⟩ phone, then wait until the screen settles.action is one of: tap (x, y) · swipe (x, y, x2, y2,Preferms)element·numbersscrollfrom(text=down|up)observe·over coordinates; tap_text(text: taptaps the element whose textcontainsit - usually more reliable than coordinates) · wait_text (text, timeout up to 120 s)
Unknown → Live
First tool surface recorded: 4 tools
pypi:clousd-mcp (package_pypi) — from mcp_registry, with the record
https://api.clousd.com/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 13 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨2 unchanged words⟩ :{"default":"","description":"device (name, label or number), forstart/stopstart / stop / rename","title":"Device","type":"string"},"label":{"default":"","description":"rename: the new name, up to 40 characters","title":"Label","type":"string"},"op":{"default":"list","description":"list (default) | start | stop | rename","title":"Op","type":"string ⟨4 unchanged words⟩
{"properties":{"device":{"description":"Devicenamefrom devices (op=list): its name, its label from the dashboard (e.g.dev_04f2\"Anna IG\" or \"Pixel 7 #3\") or its number","title":"Device","type":"string ⟨40 unchanged words⟩
{"properties":{"device":{"description":"Devicenamefrom devices (op=list): its name, its label from the dashboard (e.g.dev_04f2\"Anna IG\" or \"Pixel 7 #3\") or its number","title":"Device","type":"string ⟨39 unchanged words⟩
App recipes on one phone: scripted flows that wait for the right screen at each step, deal with popups and reportwhat theydid. op=run runs a built-in recipe (package + action - the list with inputs is fleet op=recipes) or your ownJSON and returns when it isfinished.finished; for several phones use fleet op=run instead. op=record_start begins recording what is done on the ⟨24 unchanged words⟩
⟨15 unchanged words⟩ string"},"device":{"description":"Devicenamefrom devices (op=list): its name, its label from the dashboard (e.g.dev_04f2\"Anna IG\" or \"Pixel 7 #3\") or its number","title":"Device","type":"string ⟨72 unchanged words⟩
{"properties":{"device":{"description":"Devicenamefrom devices (op=list): its name, its label from the dashboard (e.g.dev_04f2\"Anna IG\" or \"Pixel 7 #3\") or its number","title":"Device","type":"string ⟨56 unchanged words⟩
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 li…
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 …
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 …
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_ac…
{"properties":{"action":{"description":"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","title":"Action","type":"string"},"device":{"description":"Device name from devices (op=list), e.g. dev_04f2","title":"Device","type":"string"},"element":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"element number from the last observe (tap, long_press)","title":"Element"},"ms":{"default":300,"description":"swipe / long_press duration in ms","title":"Ms","type":"integer"},"text":{"default":"","description":"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","title":"Text","type":"string"},"timeout":{"default":30,"description":"wait_text: seconds to wait, up to 120","title":"Timeout","type":"integer"}, ⟨4 unchanged words⟩ type":"null"}],"default":null,"description":"x in screenshot pixels (tap, long_press, swipe start)","title":"X"},"x2":{"anyOf" ⟨2 unchanged words⟩ type":"null"}],"default":null,"description":"swipe end x","title":"X2"},"y":{"anyOf" ⟨2 unchanged words⟩ type":"null"}],"default":null,"description":"y in screenshot pixels","title":"Y"},"y2":{"anyOf" ⟨2 unchanged words⟩ {"type":"null"}],"default":null,"description":"swipe end y","title":"Y2"}},"required":[ ⟨6 unchanged words⟩
before
—after
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Act on the phone"}Phones this API key can use. op=list(default): name, state (running / stopped / starting/ error), model, Android,version and network exit of each phone. op=start / op=stop with `device` ⟨26 unchanged words⟩
{"properties":{"device":{"default":"","description":"device name, for start/stop","title":"Device","type":"string"},"op":{"default":"list","description":"list (default) | start | stop","title":"Op","type":"string ⟨4 unchanged words⟩
before
—after
{"properties":{"result":{"additionalProperties":true,"title":"Result","type":"object"}},"required":["result"],"title":"devicesOutput","type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false,"title":"Devices"}Look at the phone: a fresh screenshotplus (with_text), the app on screen andits(with_text)elementseverywithlabelledcentreor tappable element withcoordinates.aGivenumber.tap/swipeAct on an element by its number (act element=N); coordinates, when needed, are in this image's pixels.
{"properties":{"device":{"description":"Device name from devices (op=list), e.g. dev_04f2","title":"Device","type":"string"},"numbers":{"default":true,"description":"draw the element numbers on the screenshot","title":"Numbers","type":"boolean"},"with_text":{"default":true,"description":"also list the elements (numbered, centres in image pixels)","title":"With Text","type":" ⟨7 unchanged words⟩
before
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Observe the screen"}⟨6 unchanged words⟩ starting every run from the same point. op=list(default): id, created, android, current, restorable.op=save: save the current state.op=restore with snapshot_id: reset the phone to thatstate.state (what happened since is lost). op=clone with snapshot_id and new_name(letters and digits, up to 16): a new phone from that state.
{"properties":{"device":{"description":"Device name from devices (op=list), e.g. dev_04f2","title":"Device","type":"string"},"new_name":{"default":"","description":"clone: name of the new phone (letters and digits, up to 16)","title":"New Name","type":"string"},"op":{"default":"list","description":"list (default) | save | restore | clone","title":"Op","type":"string"},"snapshot_id":{"default":"","description":"restore / clone: id from op=list","title":"Snapshot Id","type": ⟨7 unchanged words⟩
before
—after
{"properties":{"result":{"additionalProperties":true,"title":"Result","type":"object"}},"required":["result"],"title":"snapshotsOutput","type":"object"}before
—after
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Snapshots"}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.
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.