DocsConnect

.md

MCP server

All pages

The server is at https://mcp.distilled.cx/mcp and speaks Streamable HTTP without sessions. It offers only the tools its caller's scopes allow, and tells your agent how to use them when it connects.

Connect with OAuth

Claude, ChatGPT, Claude Code and Codex sign in with OAuth: add the address as a connector, sign in to Distilled when asked, and allow a workspace. The connection shows under API keys with the app's name, and revoking that key disconnects it.

  • In Claude, open Settings, then Connectors, and add a custom connector.
  • In ChatGPT, turn on developer mode under Apps and Connectors and create one with OAuth.

The Distilled plugin adds the server together with a skill for driving phones. Add the marketplace distilledcx/plugins in Claude (Customize, then Plugins), Claude Code or Codex, and install distilled.

Connect with an API key

Scripts and clients that can't open a browser send an API key as a bearer token instead:

mcp.json
{
  "mcpServers": {
    "distilled": {
      "type": "http",
      "url": "https://mcp.distilled.cx/mcp",
      "headers": {
        "Authorization": "Bearer dk_live_..."
      }
    }
  }
}

Tools

The actions can return a screenshot of the result in the same call, so an agent sees what it did without asking again. Allocating and managing phones, billing, secrets and usage are REST only.

PhonesDoes
list_phonesLists the workspace's phones
get_phoneReads phones
start_phonesStarts stopped phones on their own data
stop_phonesStops phones, keeping their apps and data
watch_phoneShows a phone's screen live in the chat, in apps that draw MCP Apps
set_phone_detailsNames phones and keeps notes on them
list_accountsLists the app accounts signed in on phones
save_accountRecords which app account is signed in on a phone
batchRuns up to 50 calls at once
Driving a phoneDoes
acquire_phoneHolds a phone for the agent
release_phoneLets it go
screenshotReturns the screen as an image
ui_treeReturns the elements on screen
tapTaps a point
long_pressHolds a point
swipeSwipes between two points
type_textTypes text
press_keyPresses a key such as back or home
launch_appOpens an app
open_urlOpens a link in Chrome
wait_for_idleWaits for the screen to settle
Network and locationDoes
get_egressReads a month's traffic
list_proxiesLists the workspace's proxies
save_proxiesSaves one or many proxies
set_egressRoutes phones through a proxy or Distilled's network
rotate_exitMoves phones to fresh Distilled exits
get_phone_locationReads where phones' GPS says they are
set_phone_locationPins phones' GPS to a point, or puts it back near their exit
AppsDoes
search_appsSearches the app catalog
get_appReads one app
install_appInstalls or updates apps on one phone or many
uninstall_appUninstalls apps from one phone or many
wait_for_installsWaits for installs and uninstalls to end
list_app_updatesLists installed apps with a newer build
list_phone_appsLists a phone's installs
FilesDoes
put_filePuts a picture, video or file from a link on phones; media lands in the camera roll
upload_fileShows a panel where the person drops a file from their computer; it goes straight to the phone
file_upload_startStarts an upload an agent that can run commands sends itself with curl, straight to the file store
file_upload_finishFinishes that upload and puts the file on the phone
file_upload_cancelDrops an upload that won't be finished
Runs and skillsDoes
send_orderStarts a run from a saved skill or from steps
list_runsLists recent runs
get_runReads a run, with its last steps if asked
stop_runStops a run
resume_runCarries on with a phone waiting for a person, letting go of it if you hold it
create_skillSaves a skill
list_skillsLists saved skills
set_skill_enabledTurns a skill on or off
delete_skillDeletes a skill

Many phones at once

Tools that drive, check or set up phones take phone_ids, or all_phones for every phone of the workspace, as well as phone_id, and do them all at once in one call. Tools for one phone's view, file uploads or debugging, and resume_run, take one phone_id. In an app that can't show it, watch_phone answers a console link that opens the phone to watch without taking it. batch runs up to 50 different calls at once and answers with each in order.

Getting files onto a phone

There are three ways to get a video or picture onto a phone for an app to post. However it arrives, the file is the newest item in the phone's gallery.

  • An agent that can run commands and reach the file, such as Claude Code or Codex, calls file_upload_start, sends the parts with curl as its answer says, and calls file_upload_finish. The file goes straight to storage and the agent only ever holds that upload's token.
  • When the file is on the person's computer, upload_file shows a panel in the Claude and ChatGPT apps where they drop it, and tells the agent when it lands.
  • put_file fetches a public link, for up to 100 MB in one call counting every phone's copy; past that it sends nothing and points to an upload.

Updated . Something missing or unclear? Tell us and we will fix the page. The API also describes itself in OpenAPI.