iOS Simulator QA agent — MCP server for Claude Code
Project description
Watchr — iOS QA Agent
AI-powered mobile app testing for iOS Simulator. Tell Claude Code what to test in plain English — it drives the simulator, finds bugs, checks accessibility, and catches crashes automatically.
Install (one time)
# 1. Install idb-companion (needed to control the iOS Simulator)
brew install idb-companion
# 2. Add watchr to Claude Code
claude mcp add --scope user watchr -- uvx watchr-mcp
That's it. Two commands. No repo to clone, no paths to manage. uvx downloads everything automatically. The --scope user flag makes watchr available in every project.
If you're missing anything, watchr will tell you exactly what to install when it starts.
Usage
Go to your app's project directory, open Claude Code, and type:
cd ~/Projects/my-ios-app
claude
Then tell it what to test:
Boot the simulator, launch com.yourapp.bundleid, and test the sign-up flow
Claude Code will:
- Boot the simulator
- Launch your app
- Navigate the flow you described
- Take screenshots at each step
- Report any bugs, crashes, or issues it finds
Note: Your simulator needs to be booted and your app installed on it. If not:
xcrun simctl boot "iPhone 16 Pro" open -a Simulator xcrun simctl install booted /path/to/YourApp.app
Example Prompts
"Test the sign-up flow end to end and report any bugs"
"Go to settings, verify all options are visible, check accessibility"
"Run monkey testing on the home screen for 30 seconds"
"Save a baseline screenshot of the landing page, then compare after my changes"
"Navigate to the payment screen and check if the app crashes"
What It Can Do
| Capability | Description |
|---|---|
| Navigate any flow | Describe a user journey in English — it taps, swipes, types, and scrolls through it |
| Crash Detection | Checks if the app is still alive after every action, reads crash logs |
| Accessibility Audit | Finds missing labels, small touch targets, unlabeled buttons |
| Visual Regression | Saves golden screenshots, diffs against them to catch UI changes |
| Performance Timing | Measures screen load times, flags slow screens (>3s) |
| Monkey Testing | Random taps and swipes to find crashes scripted tests would miss |
| Text Verification | Asserts specific text is on screen, like Playwright's expect |
Troubleshooting
| Problem | Fix |
|---|---|
idb commands fail |
Run idb connect UDID with your simulator's UDID from xcrun simctl list |
| MCP server won't start | Run uvx watchr-mcp in terminal to see errors |
| Screenshots are blank | Make sure the Simulator app is open and visible |
| "No booted simulator found" | Boot one with xcrun simctl boot "iPhone 16 Pro" |
| App not launching | Verify the bundle ID with xcrun simctl listapps booted |
Update
Watchr updates automatically — uvx fetches the latest version from PyPI each time Claude Code starts the server.
To force an update:
uvx --upgrade watchr-mcp
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file watchr_mcp-0.1.1.tar.gz.
File metadata
- Download URL: watchr_mcp-0.1.1.tar.gz
- Upload date:
- Size: 72.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac27de7c61d1b199edaed1c0176eeae2bc634888f260494ea581831c9eb567db
|
|
| MD5 |
bfe695aeb957af68d425499a3a85b496
|
|
| BLAKE2b-256 |
c7527b47fe83586bc052af509e367195b92d6173000381c3271c262194b1a5fb
|
File details
Details for the file watchr_mcp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: watchr_mcp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ef8cb84598fd16664559b9b65ed15b896d5ba7329f59b8cc1d0cfc88ad4390b
|
|
| MD5 |
91ddcb1d6139877d6850c2d2f794222c
|
|
| BLAKE2b-256 |
ea8bfd659c84b2f4bf85e3c413881f5f933c65ed48fb91493733762f9181d0fa
|