Connect AI agents to real iPhones and Androids
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
# Add to your Claude Code skills
git clone https://github.com/phone-harness/mcpGuides for using ai agents skills like mcp.
See how mcp compares with popular alternatives.
Give any MCP agent a real iPhone or an Android emulator in the cloud.
Add Phone Harness as a custom connector in Claude, Cursor, ChatGPT, Codex, or any MCP client, and your agent can see the screen, tap, type, swipe, and open apps on a real iPhone or an Android emulator.
Streamable HTTP. Sign-in is OAuth and asks for the phone:drive scope. An API key can be sent as a bearer token instead; see the FAQ.
https://mcp.phone-harness.com/mcp
Use the Add to Claude button above, or open Customize → Connectors and add a custom connector (Add → Custom → Web, or Add custom connector). Name it Phone Harness, paste https://mcp.phone-harness.com/mcp, choose sign-in rather than No sign in, and add it. On Team and Enterprise, an Owner adds it under Organization settings → Connectors; members then connect.
Use the Add to Cursor button above, or add this to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project), then restart Cursor. Cursor signs in with OAuth when the server asks.
{
"mcpServers": {
"phone-harness": {
"url": "https://mcp.phone-harness.com/mcp"
}
}
}
On ChatGPT web, open Plugins → + → Add custom MCP server. Name it, paste https://mcp.phone-harness.com/mcp, choose sign-in, acknowledge the warning, and select Create as a plugin. Install the plugin, then @ mention it in a chat.
Custom MCP servers on ChatGPT web are for Business, Enterprise, and Edu workspaces. An admin creates the plugin. Pro accounts can connect a custom server for read and fetch tools only, so driving the phone needs Business, Enterprise, or Edu.
On grok.com/connectors, choose New Connector → Custom, paste https://mcp.phone-harness.com/mcp, and complete the sign-in. The server has to be reachable on the public internet.
In the Grok CLI, OAuth runs on first use:
grok mcp add --transport http phone-harness https://mcp.phone-harness.com/mcp
claude mcp add --transport http phone-harness https://mcp.phone-harness.com/mcp
Then run /mcp and sign in. That saves the server for the current project; add --scope user to keep it in every project.
codex mcp add phone-harness --url https://mcp.phone-harness.com/mcp
codex mcp login phone-harness
In the Codex IDE extension (gear menu → MCP servers) or the ChatGPT desktop app (Settings → MCP servers): Add server → Streamable HTTP, paste the URL, save, restart, and select Authenticate.
Use the Add to VS Code button above. Or open the Command Palette, run MCP: Add Server, choose HTTP, and paste https://mcp.phone-harness.com/mcp. Sign in when asked.
The same server in the VS Code mcp.json format:
{
"servers": {
"phone-harness": {
"type": "http",
"url": "https://mcp.phone-harness.com/mcp"
}
}
}
Settings → Tools → Windsurf Settings → Add Server, or open the MCP config file from Cascade's MCP menu and add:
{
"mcpServers": {
"phone-harness": {
"serverUrl": "https://mcp.phone-harness.com/mcp"
}
}
}
Cascade signs in with OAuth for a streamable HTTP server when no header is set. Press refresh after adding it.
In Devin, open Customize → MCPs → Add MCP → Add custom MCP. Set the transport to HTTP, the server URL to https://mcp.phone-harness.com/mcp, and authentication to OAuth. Save, then choose Connect. Adding a custom server needs the Manage MCP Servers permission.
In the Devin CLI:
devin mcp add phone-harness https://mcp.phone-harness.com/mcp
devin mcp login phone-harness
gemini mcp add --transport http phone-harness https://mcp.phone-harness.com/mcp
Gemini CLI discovers OAuth from the server. In a session, /mcp auth phone-harness starts the sign-in.
copilot mcp add --transport http phone-harness https://mcp.phone-harness.com/mcp
That writes a streamable HTTP server to ~/.copilot/mcp-config.json. The default OAuth grant is the browser authorization-code flow.
Open Plugins → Add custom → Add MCP connector, and choose Remote. Name it, set the MCP server URL to https://mcp.phone-harness.com/mcp, and choose OAuth. For an organization, an admin adds it under Organization settings → Connectors.
Warp Drive → MCP Servers → + Add, choose Streamable HTTP, and set the URL to https://mcp.phone-harness.com/mcp with no headers. Warp’s docs show that a URL-only remote server opens a browser sign-in when it uses OAuth.
Run Install MCP Server. Set the transport to HTTP, the URL to https://mcp.phone-harness.com/mcp, and OAuth to Dynamic. HTTP servers that use OAuth ask you to sign in before their tools are available.
Open Connectors → Create → Add MCP by URL. Enter a name and https://mcp.phone-harness.com/mcp.
openclaw mcp add phone-harness --url https://mcp.phone-harness.com/mcp --transport streamable-http --auth oauth
openclaw mcp login phone-harness
Or in the Control UI: Settings → MCP → Add server, transport Streamable HTTP, then Sign in.
Add this to the mcp_servers block of the Muse Code settings file, then sign in:
{
"mcp_servers": {
"phone-harness": {
"transport": "streamable_http",
"url": "https://mcp.phone-harness.com/mcp"
}
}
}
muse mcp login phone-harness
Settings → AI → MCP Servers → Add Server → Add Remote Server, or add this to settings.json. With no Authorization header, Zed starts the MCP OAuth sign-in.
{
"context_servers": {
"phone-harness": {
"url": "https://mcp.phone-harness.com/mcp"
}
}
}
Any other client that can add a remote streamable HTTP server uses the URL above and the sign-in. Local stdio, Docker, and Vercel are in docs/self-hosting.md.
The hosted server registers these tools. Every tool except the first two takes device, an id from phone_list_available_devices.
Cloud Android emulators are free to start, then 5¢ per phone-minute, pay as you go. A Cloud iPhone is a flat monthly subscription, not billed by the minute: $80/mo, or $100/mo with an eSIM, with 20% off billed annually ($64/mo, or $80/mo with an eSIM). minutes on phone_start_device is how long the session runs (default 30), not a billing unit. See phone-harness.com/pricing for current rates.
| Tool | Does |
|---|---|
phone_list_available_devices |
Running phones and their ids, the phones the account can start, and the account balance when the API reports one. |
phone_start_device |
Start a phone and wait until it is ready. With nothing named, a temporary Android emulator starts. platform and kind go together (android/emulator, or ios/device for the account's iPhone). device_id picks a particular iPhone or a saved Android phone (apps and logins kept). |
phone_stop_device |
End the session. Anything not saved on the phone is lost. Stopping cloud Android stops the per-minute charge. |
phone_get_screen_size |
Screen size in the coordinate space taps and swipes use. |
phone_take_screenshot |
JPEG of the screen. Long side at most max_size (default 1024), or scale. The text before the image converts a point in the image to screen coordinates. |
phone_list_elements_on_screen |
Visible text with tap-ready centers (text or json). Accessibility tree on Android; text recognition on iPhone. |
phone_click_on_screen_at_coordinates |
Tap x, y. |
phone_long_press_on_screen_at_coordinates |
Press and hold x, y for duration milliseconds (default 800, clamped to 100–10000). |
phone_swipe_on_screen |
Swipe. direction is the way the finger moves (up reveals what is below). From x, y or the center, for distance pixels or 40% of the screen. |
phone_type_keys |
Type text into the focused field. submit presses Enter. |
phone_press_button |
HOME, BACK (Android only), APP_SWITCHER, or ENTER. |
phone_list_apps |
Installed apps: package ids on Android, bundle ids on an iPhone, when the phone can list them. |
phone_launch_app |
Open an app by the name on its icon, or on Android by package id. |
phone_get_foreground_app |
Which app is in front, when the phone reports it. |
There is no tool that opens a URL. A local stdio server also registers phone_save_screenshot (write a PNG or JPEG on that machine). Tool names follow mobile-mcp.
Yes. Send `Authorizat
mcp is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by phone-harness. Connect AI agents to real iPhones and Androids. It has 124 GitHub stars.
mcp's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/phone-harness/mcp" and add it to your Claude Code skills directory (see the Installation section above).
mcp is primarily written in Python. It is open-source under phone-harness on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh mcp against similar tools.
No comments yet. Be the first to share your thoughts!