Allows AI agents to interact with the iOS Simulator by reading the screen, performing touch gestures, and replaying test flows in CI.
Also known as valewnrt/testa, @valewnrt/testa-mcp
- Stars
- 3
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- 0.2.2
- Last commit
- Oct 8, 2026
- License
- MIT
What is Testa MCP?
Testa allows AI agents to interact with the iOS Simulator by reading the screen, performing touch gestures, and replaying test flows in CI.
Summary generated from the project's README
About Testa MCP server
Testa provides AI agents with the ability to interact directly with the iOS Simulator on macOS. It functions as an MCP server that gives clients like Claude Code, Cursor, or Codex the capacity to see and manipulate mobile interfaces. The tool works by reading the accessibility tree and using Apple Vision OCR to interpret screens, allowing it to operate on React Native, Expo, or SwiftUI applications without requiring any code changes or specific test identifiers.
Users install the server via Homebrew on a Mac running Xcode. Once configured, an agent can perform complex tasks such as tapping, typing, swiping, or rotating the device. The system is designed to be efficient for LLM token budgets by representing screens as compact text rather than heavy images. Developers can also record agent actions into flow files to replay them in CI environments using a GitHub Action, which provides JUnit output and failure artifacts without needing a live model during execution.
What you can do with it
- 1Automated UI testingAsk an agent to launch an application and complete a specific user registration flow.
- 2Testing without code modificationsVerify app behavior on screens that do not have predefined test identifiers.
- 3Continuous Integration replayRun previously recorded agent interactions in a CI pipeline to ensure stability.
- 4Complex gesture simulationInstruct an AI to perform multi-touch interactions like pinching or dragging elements.
Written from the project's README. Every use case is checked against a quote from it.
How to install Testa MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall Testa MCP in Claude Code
$ claude mcp add testa -- npx -y @valewnrt/testa-mcpInstall Testa MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"testa": {
"command": "npx",
"args": [
"-y",
"@valewnrt/testa-mcp"
]
}
}
}Install Testa MCP in VS Code
.vscode/mcp.json
{
"servers": {
"testa": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@valewnrt/testa-mcp"
]
}
}
}Install Testa MCP in VS Code CLI
$ code --add-mcp '{"name":"testa","type":"stdio","command":"npx","args":["-y","@valewnrt/testa-mcp"]}'Install Testa MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"testa": {
"command": "npx",
"args": [
"-y",
"@valewnrt/testa-mcp"
]
}
}
}Install Testa MCP in Codex
$ codex mcp add testa -- npx -y @valewnrt/testa-mcpInstall Testa MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.testa] command = "npx" args = ["-y", "@valewnrt/testa-mcp"]
Install Testa MCP in Gemini CLI
$ gemini mcp add -s user testa npx -- -y @valewnrt/testa-mcpInstall Testa MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"testa": {
"command": "npx",
"args": [
"-y",
"@valewnrt/testa-mcp"
]
}
}
}Configuration
TESTA_MCP_FULLSet to 1 to expose all 40 tools instead of the 13-tool token-lean default.
TESTA_UDIDTarget a specific simulator UDID instead of the booted one.
| Name | Description | |
|---|---|---|
| TESTA_MCP_FULL | Set to 1 to expose all 40 tools instead of the 13-tool token-lean default. | |
| TESTA_UDID | Target a specific simulator UDID instead of the booted one. |
Automated checks
Ran Nov 14, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablevalewnrt/testa is public and reachablegithub.com/valewnrt/testa ↗Pass
- Package names this repository as its source@valewnrt/testa-mcp names valewnrt/testa as sourcenpmjs.com/package/@valewnrt/testa-mcp ↗Pass
- Build provenance (Sigstore attestation)No build attestation published for this releaseNot checked
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-10-08github.com/valewnrt/testa ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from @valewnrt/testa-mcpPass
- No critical advisory in the package or its dependencies1 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubTesta
Let your AI agent test your iOS app.
Testa gives Claude Code, Codex, Cursor or any MCP client eyes and hands in the
iOS Simulator. It reads the screen as compact text, taps, types and swipes with
real touch events, and checks the result. It works with React Native, Expo and
SwiftUI apps, and you don't have to add a single testID. When the agent is
done, save the run as a flow file and replay it in CI without a model.
Install
Requires macOS with Xcode 26 (iOS 26 simulators).
brew tap valewnrt/testa
brew install testa
testa setup # installs the Claude Code skill and registers the MCP server
Or build from source: git clone https://github.com/valewnrt/testa && cd testa && ./install.sh.
Connect your agent
testa setup already configures Claude Code. For other agents:
codex mcp add testa -- testa mcp # Codex
{ "mcpServers": { "testa": { "command": "testa", "args": ["mcp"] } } }
The JSON goes into Cursor's .cursor/mcp.json or any other MCP client config.
Then ask your agent something like "Launch the app in the simulator, sign up
with a test account and check that the welcome screen appears."
More in docs/agents.md.
Try it yourself
Testa is a plain CLI, so you can drive it by hand too:
$ testa boot "iPhone 17 Pro"
$ testa install ./MyApp.app && testa launch com.example.myapp
$ testa ui
19 elements (on screen)
e2 StaticText "ready" #status @201,89
e5 Button "Tap me" #tapButton @102,171
e18 TextField #textInput =type here @201,601
…
$ testa tap "Tap me"
tapped e5 Button Tap me
-- ui changes --
~ e2 StaticText "tap:1" #status @201,89
~ e6 StaticText "count: 1" #tapCount @41,208
$ testa assert "#status" label=tap:1
PASS label tap:1
The first command starts a background daemon (a few seconds, once). After that, each command takes about 60 ms.
What makes it different
- No app changes needed. Testa reads the accessibility tree and falls back to on-device OCR (Apple Vision) for anything that isn't in it: system sheets, canvas-drawn screens, games, WebViews. More →
- Built for token budgets. A screen is one line per element, about 200 tokens instead of about 1,500 for a screenshot, and every action replies with only what changed. Benchmark →
- Record once, replay in CI.
testa flow recordturns what the agent did into a plain-text flow file.testa flow runreplays it with JUnit output and failure artifacts, and there's a GitHub Action. More → - Real gestures and device control. Tap, long-press, swipe, drag-and-drop, pinch, rotate, multi-touch and hardware buttons, plus push notifications, location, Face ID, dark mode, Dynamic Type and more.
- One local binary, no dependencies. Testa talks to Apple's simulator frameworks directly: no Node, no Python, no WebDriver server. No network, no telemetry. How it works →
Status
Testa is pre-1.0 and is used against real production apps. It relies on private Apple frameworks, so a new Xcode can break it; a weekly job runs the suite against Xcode betas so breakage shows up early. Verified on Xcode 26.4 with iOS 26.4 simulators. iOS Simulator only: no real devices, no Android (why).
Documentation
- Commands: selectors, the observe → act → verify loop, full reference
- Using Testa from an AI agent: MCP setup, tools, token cost
- Testing apps without testIDs
- Flows & CI: flow files, recording, GitHub Action
- How it works · Security model
- How Testa compares to Maestro, Appium, idb and Argent
- Troubleshooting & limitations
Contributing
Bug reports, Xcode-compatibility reports and pull requests are welcome. Start with CONTRIBUTING.md; questions and ideas go to Discussions. Changes are listed in the CHANGELOG.
Acknowledgements
Testa's HID and accessibility work was informed by studying Meta's idb (MIT); no idb code is linked or bundled. Thanks to everyone who has contributed.
License
Testa MCP questions
How do I add Testa MCP to Claude Code?
Run claude mcp add testa -- npx -y @valewnrt/testa-mcp in your terminal. Add --scope user to make it available in every project.
How do I add Testa MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What apps can Testa test?
It works with React Native, Expo, and SwiftUI apps without requiring any additional testID additions.
Does Testa require changes to my application code?
No, it reads the accessibility tree and uses on-device OCR for elements not found in the tree, such as system sheets or games.
Can I run these tests in a CI environment?
Yes, you can record an agent's session as a flow file and replay it in CI using a GitHub Action.
Does it support real Android devices?
No, Testa is limited to the iOS Simulator only and does not support real devices or Android.