vphone-mcp
Enables programmatic opening and navigation of the App Store within an iOS virtual machine environment.
Provides programmatic control over iOS virtual machines, enabling touch input, hardware button simulation, screen capture, and navigation for automated E2E testing.
Enables programmatic opening and interaction with the Safari web browser within an iOS virtual machine.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vphone-mcpopen the Settings app and navigate to General"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vphone-mcp
MCP server for programmatic control of vphone-cli iOS VMs. Enables AI-driven E2E testing by exposing the VM's display, touch input, and navigation as MCP tools.
How it works
Claude Code / Claude Desktop
│ MCP (stdio)
▼
vphone-mcp (Python)
│ Unix socket (JSON)
▼
vphone-cli (Swift, vm/vphone.sock)
│ Virtualization.framework
▼
iOS 26 VMEvery action returns a compact grayscale screenshot (~20-30KB) inline in the response, so the LLM can see what happened without a separate call.
Setup
Requires uv and a running vphone-cli VM with the host control socket enabled (PR #261).
git clone https://github.com/pluginslab/vphone-mcp.git
cd vphone-mcp
uv syncClaude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"vphone": {
"command": "uv",
"args": ["--directory", "/path/to/vphone-mcp", "run", "vphone-mcp"],
"env": {
"VPHONE_SOCK": "/path/to/vphone-cli/vm/vphone.sock"
}
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"vphone": {
"command": "uv",
"args": ["--directory", "/path/to/vphone-mcp", "run", "vphone-mcp"],
"env": {
"VPHONE_SOCK": "/path/to/vphone-cli/vm/vphone.sock"
}
}
}
}Tools
Hardware Keys
Tool | Description |
| Press home button |
| Lock/wake the screen |
| Volume up |
| Volume down |
Screenshots
Tool | Description |
| Capture the VM display (returns embedded image) |
Pre-mapped Navigation
Tool | Description |
| Open an app by name from the home screen |
| Tap the iOS back button (top-left) |
| Scroll down on current screen |
| Scroll up on current screen |
| Swipe down from top-left |
| Swipe down from top-right |
| Slow swipe up from bottom |
| Tap the home screen Search bar |
| Swipe to next home screen page |
| Swipe to previous home screen page |
Supported app names for open_app: FaceTime, Calendar, Photos, Mail, Notes, Reminders, Clock, TV, Games, App Store, Maps, Health, Wallet, Settings, Phone, Safari, Messages, Music.
Raw Interaction
Tool | Description |
| Tap at pixel coordinates (1290x2796) |
| Swipe between two points |
Use screenshot() first to identify coordinates for app-specific UI elements.
Example session
User: Open Settings and navigate to General > About
Claude: [calls open_app("Settings")]
→ sees Settings list
[calls tap(400, 1880)]
→ sees General page
[calls tap(400, 1100)]
→ sees About page with iOS 26.1, Serial: vphone-1337Configuration
Env var | Description |
| Path to |
License
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pluginslab/vphone-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server