Give Windsurf an Android phone: an Android MCP server for Cascade.
Set it up
1. Get a key. Paste this into Windsurf. It installs the Phonebox CLI and signs you in from the terminal, so you never paste a key into the chat. Then put the key in your environment with export PHONEBOX_API_KEY=$(phonebox token).
Read https://phonebox.dev/setup.md and set me up with Phonebox from here: get me signed in and ready, then find out what I want to use phones for and help me with that.2. Add the server. Add this to Windsurf's mcp_config.json: ~/.codeium/windsurf/mcp_config.json in older builds, or ~/.config/devin/mcp_config.json in current ones. ${env:PHONEBOX_API_KEY} reads the key from your environment, so the file holds no secret.
{
"mcpServers": {
"phonebox": {
"serverUrl": "https://phonebox.dev/mcp",
"headers": { "Authorization": "Bearer ${env:PHONEBOX_API_KEY}" }
}
}
}3. Check it. Open the Cascade panel's … menu, then MCPs. You should see phonebox with 13 tools. list_phones is a safe first call: it only reads.
What Windsurf can do with the phone
| Task | Tools |
|---|---|
| Get a phone | create_phone, list_phones, get_phone, start_phone |
| See the screen | observe: numbered text elements with labels, plus a screenshot |
| Use apps | act: up to 20 taps, types, swipes and key presses per call |
| Install your build | create_app_upload, complete_app_upload, install_app, list_apps |
| Hand off to a person | live_view_url: a link to watch and control the phone |
| Stop paying | park_phone; reboot_phone when an app hangs |
Windsurf reads the screen as text, so it taps “Sign in” by its label instead of guessing coordinates. Phonebox never retries a write to the phone on its own, so a slow response can't turn into a double order. A parked phone is free and keeps its apps, files and sign-ins. A running one costs $0.06 a minute, billed per second, and new accounts get $2 of credit with no card.
A first task
Build the debug APK and install it on my Phonebox phone.
Walk through the onboarding and settings screens I changed in this branch.
Read the screen before every action. Report anything that looks broken,
with the screen text you saw. Park the phone when you finish.Other agents
The same server works in Claude Code, Codex, Cursor, Gemini CLI, Cline and GitHub Copilot. See the Android MCP server guide for every tool, and cloud phones for AI agents for the bigger picture.
Questions
Can Windsurf control an Android phone or emulator?
Yes, through MCP. Add Phonebox's hosted server to mcp_config.json with serverUrl set to https://phonebox.dev/mcp and an Authorization header. Windsurf's Cascade agent can then create a cloud Android phone, read its screen, tap, type, install an APK and park it.
How do I keep the Phonebox key out of mcp_config.json?
Write the header as "Bearer ${env:PHONEBOX_API_KEY}" and set the variable with export PHONEBOX_API_KEY=$(phonebox token) before starting Windsurf. An unset variable becomes an empty string, and the server answers 401.
What does it cost?
$0.06 per phone-minute while the phone runs, billed per second. Parked phones are free and keep their apps and sign-ins. New accounts get $2 of credit with no card.