Skip to main content
Glama

Control an app on a cloud iPhone

phone_app_control
Destructive

Cloud iPhone: Launch, install, stop or remove an app; open a URL or deep link; grant, revoke or reset permissions; set location; send a push; test purchases (.storekit); set appearance, locale, time zone, text size or a clean status bar. launch answers with its first screen.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "<action>"
    },
    "name": "phone_app_control"
  }
}

Input Schema

NameRequiredDescriptionDefault
appNoBundle id (default: last launched); install: a Simulator .app path
nameNoWith upload: where it goes; default: app
valueNoPer action: URL, permission, lat,long, push text/JSON, launch args (-Key value; no secrets), light/dark, locale (fr_FR), time zone (Europe/Paris), text size, clean/clear
actionYesWhat to do
deviceNoName or UDID; default: the one in use
uploadNoinstall: the upload phone_upload_link answered, a .zip or .tar.gz holding the .app
session_idNoThe phone; default: the account's running phone
request_keyNoRepeat a lost call with the same key

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / app / description
      Previous value: -"Bundle id, or for install the path to a Simulator .app"New value: +"Bundle id (default: last launched); install: a Simulator .app path"
    • changedInput schema / properties / value / description
      Previous value: -"URL, permission, lat,long, push text/JSON, light/dark, locale (fr_FR), time zone (Europe/Paris), text size or clean/clear, per action"New value: +"Per action: URL, permission, lat,long, push text/JSON, launch args (-Key value; no secrets), light/dark, locale (fr_FR), time zone (Europe/Paris), text size, clean/clear"
  2. Changed1 schema field changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "launch",
      -  "install",
      -  "terminate",
      -  "uninstall",
      -  "open_url",
      -  "grant",
      -  "revoke",
      -  "reset_permissions",
      -  "location",
      -  "push",
      -  "appearance",
      -  "locale",
      -  "timezone",
      -  "text_size",
      -  "status_bar"
      -]New value: +[
      +  "launch",
      +  "install",
      +  "terminate",
      +  "uninstall",
      +  "open_url",
      +  "grant",
      +  "revoke",
      +  "reset_permissions",
      +  "location",
      +  "push",
      +  "storekit",
      +  "appearance",
      +  "locale",
      +  "timezone",
      +  "text_size",
      +  "status_bar"
      +]
  3. Changed3 schema fields changed
    • changedInput schema / properties / name / description
      Previous value: -"With upload: where it goes, the same name each time keeps builds incremental; default: upload"New value: +"With upload: where it goes; default: app"
    • changedInput schema / properties / upload / description
      Previous value: -"install: the sha256 of a .zip or .tar.gz holding the .app, put to phone_upload_link's link"New value: +"install: the upload phone_upload_link answered, a .zip or .tar.gz holding the .app"
    • changedInput schema / properties / upload / pattern
      Previous value: -"^[a-f0-9]{64}$"New value: +"^(up_[a-f0-9]{32}|[a-f0-9]{64})$"
  4. Added

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=false, so the safety profile is carried structurally. The description's one genuinely additive behavioral fact is that launch answers with its first screen. It does not disclose per-action consequences (e.g., that uninstall discards app data or terminate kills a running process), nor prerequisites such as needing a prior upload for install.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Nothing is filler — every clause maps to a real action — but the whole definition is a single semicolon-chained run-on that is hard to scan and mixes app lifecycle, permissions, and device settings with no grouping. It is compact yet poorly structured for an agent parsing 16 actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, no-output-schema, multi-action tool with full schema coverage and existing annotations, the description covers what each action does but omits prerequisites (install needing the phone_upload_link flow, default device/session resolution) and the natural follow-up tools for inspecting the screen after launch. Adequate but with visible gaps for a tool this broad.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, including per-action value formats and the request_key retry pattern. The description largely restates that mapping (URL, permission, lat,long, push, .storekit) rather than adding new meaning. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a cloud iPhone app) and enumerates the concrete operations it performs — launch/install/terminate/uninstall, permissions, location, push, storekit, and device settings. That enumeration lets an agent recognize the tool's scope without opening the schema. It never distinguishes itself from near-neighbors like phone_app_run, phone_ui_act, or phone_ui_look, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no named alternatives despite obvious overlap with phone_app_run, phone_ui_act, and phone_ui_look. The only contextual hint is the behavioral note that launch returns its first screen. An agent must infer the choice of this tool versus its siblings purely from the action names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources