Owl Watch Simulator MCP
Enables AI agents to build, run, inspect, and drive Garmin Connect IQ apps in the Connect IQ simulator on macOS. Provides tools for launching apps, capturing device screenshots with recognized text, tapping by label, sending touch and button input, navigating simulator menus, answering dialogs, setting GPS position, running tests, retrieving logs, and executing multi-step or multi-device simulator flows.
Click on "Deploy 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., "@Owl Watch Simulator MCPbuild and run my app on the Fenix 7, tap Start, then show the screen"
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.
owl-watch-simulator-mcp
An MCP server for Garmin Connect IQ. It lets an AI coding agent such as Claude Code, Cursor or GitHub Copilot build, run, see and drive Garmin watch apps written in Monkey C, in the Connect IQ simulator on macOS.
Use it to let an agent check its own UI changes, reproduce a bug from a description, or run the same flow on several watch models and compare the screens.

A real session with Next Depart NSW, our Connect IQ app for NSW public transport departures.
The screen as text. A watch display has no element tree, so every result carries the text recognised on it with tap-ready positions, such as
"Trains" (129,140).tap_textpresses by label;wait_forwaits on what the screen says, not on sleeps.One call, one round trip.
run_appbuilds, launches and returns the screen; every action returns the next one.run_stepsruns a whole flow, andrun_on_devicesrepeats it on several watches.Out of your way. The simulator works in the background, on another desktop, even with the screen locked. Input goes straight to its process, not through your pointer and keyboard.
Device pixels. A screenshot is exactly the watch display, so the coordinates an agent reads off the picture are the ones it taps.
Owl is the OwleryWorks Library: open-source tools from The Owlery Works. Not affiliated with or endorsed by Garmin.
Install
You need macOS 14 or later, Node.js 20 or later, the Connect IQ SDK with at least one device (from Garmin's SDK Manager), a Java runtime, a Connect IQ developer key and the Xcode Command Line Tools (xcode-select --install).
claude mcp add owl-watch-simulator -- npx -y owl-watch-simulator-mcp
npx -y owl-watch-simulator-mcp --doctor # checks SDK, Java, key, helper and permissionsClaude Desktop, Cursor, Windsurf and most other clients take this JSON; VS Code (.vscode/mcp.json) takes the same entry under servers instead of mcpServers:
{
"mcpServers": {
"owl-watch-simulator": { "command": "npx", "args": ["-y", "owl-watch-simulator-mcp"] }
}
}macOS asks for Accessibility (input, menus, dialogs) and Screen & System Audio Recording (screenshots), both for the app that launches the server: your terminal, IDE or Claude. Grant them in System Settings > Privacy & Security, then restart that app.
The SDK, Java and key are found automatically; override with CIQ_SDK_HOME, CIQ_JAVA_HOME, CIQ_DEVELOPER_KEY or CIQ_DEVICES_DIR. To let an agent run unattended in Claude Code, add "permissions": { "allow": ["mcp__owl-watch-simulator"] } to the project's .claude/settings.json.
Related MCP server: iOS Device Control MCP Server
Tools
Tool | What it does |
| build (or take a |
| compile with errors by file and line; run unit tests |
| the display with its text, the whole watch, or the simulator window |
| tap by label; wait for text to appear or disappear, or the screen to settle |
| touch input in device pixels |
| physical buttons by function ( |
| a flow in one call; the same flow on several devices, one screen each |
|
|
| GPS position; simulator settings such as connectivity, language and battery |
| answer the dialogs those settings open |
| state, lifecycle and installed devices |
Errors come back with a code and a hint the agent can act on.
Limits
macOS only. Tested on macOS 27 on Apple silicon with a 2x Retina display.
Long presses move the pointer. The simulator checks where the real pointer is during a hold, so
long_pressand held buttons park it on the target for about a second, then put it back.The app ends when the server stops, and Connect IQ runs one simulator at a time.
Text recognition is good, not perfect. Curved titles and tiny glyphs can come out slightly wrong, so the picture is always returned too; icons need
tapwith coordinates.Locked screen. Dialog controls cannot be read, so dialogs are answered by clicking their picture, and system file panels cannot be answered at all;
dialog_clickrefuses buttons that open one.Undocumented macOS APIs deliver clicks to a background window. They are looked up at run time, so a macOS that drops one gives a clear
unsupported_oserror.
Symptom | Fix |
| Grant the permission to the launching app and restart it |
Screenshot shows the launcher icon | The app exited or crashed; see |
| The simulator kept the previous device, so it was restarted; set the GPS position again |
Web requests fail with -1001 | Untick Settings > Use Device HTTPS Requirements |
| Install the Xcode Command Line Tools, then |
More
CONTRIBUTING.md covers running from a checkout, tests and how it works. Report security problems privately, as SECURITY.md describes.
Provided as is, without warranty of any kind. You use it at your own risk: The Owlery Works and the contributors accept no liability for anything it, or your AI agent with it, does to your Mac, simulator, projects or data. MIT licence. Connect IQ is a trademark of Garmin Ltd.
This server cannot be deployed
Maintenance
Related MCP Connectors
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Cloud Macs with Xcode for AI agents: run commands, build and test iOS apps, see and use the screen.
Launch and verify high-fidelity mobile simulations from an AI agent.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to automate iOS Simulator interactions including device management, UI element interaction (tap, swipe, type), screenshot capture, and execution of YAML-defined navigation workflows.26 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive control of iOS simulators and real devices through AI assistants, supporting app management, UI automation, screenshots, media operations, and location simulation for iOS development and testing workflows.8MIT
- AlicenseNot gradedqualityDmaintenanceGives AI agents the ability to interact with iOS simulators through 21+ tools for mobile app testing.10,447 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control iOS Simulator apps by reading the screen as compact text instead of screenshots and returning the updated screen after every action. Supports tapping, typing, scrolling, key presses, and app or URL launches with one tool call per step instead of two.11MIT