Remote MCP server
https://mcp.limrun.com/mcp is Limrun's organization-level Model Context Protocol server. Connect it once, and any MCP client can create iOS simulators and Android emulators, drive them by screenshot and accessibility tree, and delete them when done.
- One endpoint, signed in with your Limrun account. OAuth is the default: the client opens a browser, you approve access, and tokens refresh on their own afterwards. For headless setups, an API key in an
Authorization: Bearerheader works too. - Stateless. Every tool that touches a device takes an explicit
instanceId, so there is no session to lose. Reconnects and long gaps are fine. - Instances only. An OAuth connection can create, inspect, drive, and delete instances, list your app assets, and read your private tunnels so it can name one at create time. It cannot reach billing or the rest of the API. Builds and file uploads stay on the
limCLI.
Choose the remote or per-instance server
Every instance also runs its own MCP server. Pick by who holds the credential:
| Aspect | Remote server | Per-instance server |
|---|---|---|
| Endpoint | https://mcp.limrun.com/mcp for the whole organization | One URL per instance, from status.mcpUrl |
| Auth | OAuth sign-in, or an API key | That instance's status.token |
| Lifecycle tools | Create, list, inspect, and delete instances | None; the instance must already exist |
| Blast radius | Every iOS simulator and Android emulator in the organization | One instance; the token stops working with it |
| Best for | An agent that owns the whole loop, from "get me a device" to cleanup | Handing one device to an agent that holds no organization credential |
Connect from Claude Code
Add the server:
claude mcp add --transport http limrun https://mcp.limrun.com/mcpThen open a Claude Code session, run /mcp, select limrun, and choose Authenticate. After you approve access in the browser, /mcp shows the server as connected with its 16 tools. Access tokens rotate automatically from then on, and you are not asked to sign in again unless you revoke access.
Connect from other MCP clients
Any client that speaks the MCP Streamable HTTP transport works with one of two auth setups:
- OAuth. Point the client at
https://mcp.limrun.com/mcpand complete the sign-in it triggers. The server advertises its authorization server through the standard discovery metadata, so clients that support remote MCP servers find the flow on their own. - API key. Configure the same URL with the header
Authorization: Bearer <LIM_API_KEY>. Use this where no browser is available, such as CI or a cloud agent. Create keys in the console under Settings, API Keys.
The server is listed in the official MCP registry as com.limrun/mcp and on Smithery, where you can also connect it through the Smithery gateway.
Tools
The server exposes 16 tools in five groups.
Lifecycle and assets. These take no instanceId; they operate on the organization.
| Tool | What it does |
|---|---|
create-ios-simulator | Creates a simulator, blocks until it is ready, and returns the instance ID. Optional apps pre-installs apps by asset name or public URL, optional inactivityTimeout overrides the organization default, optional idempotencyKey makes retries return the same instance, and optional tunnel names a private tunnel so the app reaches services in your private network. |
create-android-emulator | Same contract for Android emulators. apps entries are asset names or public APK URLs. |
list-instances | Lists the organization's running iOS simulators and Android emulators with their IDs and states. Xcode and Gradle sandboxes are not listed. |
get-instance-status | Returns the state and error message for one instance ID. |
delete-instance | Terminates an instance. This is the only destructive tool. |
list-apps | Lists the app asset names you can pass to the apps field of the create tools, per platform. |
Live view. stream-device takes an instanceId and shows the user the live, interactive screen of that instance, inline where the client supports it.
iOS device control. ios-screenshot-and-element-tree, ios-use (batched taps, typing, scrolling, and the rest of the action surface), ios-open-url, ios-app (list, launch, terminate), and ios-logs.
Android device control. android-screenshot-and-element-tree, android-use, and android-open-url.
Each device-control tool, like stream-device, takes the instanceId a create tool returned. The action surfaces match the per-instance server, which documents them in detail.
Skills. get-agent-skill is covered in Skills for builds and local files.
Apps install at creation time through the apps field. There is no install tool for a running instance: MCP gives the server no access to the client's filesystem, so anything that moves local bytes (an APK, a simulator build, an Xcode project) belongs to the CLI and SDKs. Upload builds to Asset Storage first and they show up in list-apps. Instances created through this server carry a created-by: mcp label.
Skills for builds and local files
The server's initialize response tells clients that builds and local files belong to the lim CLI, and it serves the step-by-step CLI procedures as Agent Skills in three forms:
- The
get-agent-skilltool. Pass one oflimrun-xcode,limrun-gradle,limrun-xcode-bazel, orlimrun-expo-development. skill://resources with askills/listcatalog, for clients that follow the MCP skills extension.- The same content installed locally. Where the
limCLI is installed, uselim skills install; before it is,npx skills add limrun-inc/skillsinstalls the same skills.
An agent that needs to build something asks for the skill, installs the CLI it describes, and continues in its own shell.
Revoke access
Tokens minted through OAuth appear in the console under Settings, API Keys, described as MCP OAuth tokens. Revoking one invalidates only the current access token: the client is challenged on its next request and rotates to a fresh token with its refresh token, without asking you to sign in again. To disconnect a client, remove the server from that client's configuration.
Next steps
Was this guide helpful?