Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GHOSTHAND_TEAMNoApple developer team to force when signing the runner on a real iPhone.
GHOSTHAND_MODELNoModel used by the autonomous agent (default `claude-opus-5-5`).
GHOSTHAND_DEVICENoTarget device name (e.g. "iPhone 17"), used instead of the default target (the only booted simulator, else the only reachable iPhone).
GHOSTHAND_EFFORTNoEffort level used by the autonomous agent (default `low`).
ANTHROPIC_API_KEYNoAnthropic API key, needed for the MCP server to run the autonomous agent (ios_run_task), e.g. `claude mcp add … -e ANTHROPIC_API_KEY=…`.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
ios_devicesA

List simulators and real iPhones, and which ones are ready (booted / reachable).

ios_bootA

Get a target ready: boot a simulator (name like "iPhone 17", or UDID) or pick an iPhone, then start the automation runner on it.

The first start compiles the runner (a minute or two). On an iPhone it must be unlocked, and the very first time the user must trust the developer certificate in Settings > General > VPN & Device Management.

ios_observeA

See the screen: numbered list of visible elements, plus a screenshot.

Args: screenshot: Include a screenshot (scaled to points, so pixel = tap coordinate). annotate: Draw element indexes on the screenshot. device: Simulator name or UDID; defaults to the only booted one.

ios_tapA

Tap an element by [index] from the latest observation, or a point (x, y) in points.

Args: index: Element index from the latest ios_observe or action result. x: Horizontal position in points (with y, instead of index). y: Vertical position in points. hold_seconds: Press duration for a long press (e.g. 1.0); 0 for a normal tap. device: Simulator name or UDID.

ios_swipeA

Swipe: either a direction from the screen center, or explicit points.

The direction is the finger's: "up" scrolls content down (reveals what is below). To go back in most apps, swipe from x=2 to x=250 at mid-height.

Args: direction: up, down, left or right. from_x: Start x in points (with from_y, to_x, to_y instead of direction). from_y: Start y in points. to_x: End x in points. to_y: End y in points. duration: Gesture duration in seconds; shorter is a faster fling. device: Simulator name or UDID.

ios_typeA

Type text into the field that has keyboard focus (tap the field first). Use "\n" for Return.

ios_pressC

Press a hardware button. "home" goes to the home screen.

ios_launchA

Open an app by bundle ID (see ios_apps). relaunch=True restarts it from scratch.

ios_terminateC

Quit an app.

ios_appsB

List installed apps: bundle ID and display name.

ios_open_urlC

Open a URL or deep link (https://…, maps://…, app schemes).

ios_run_taskA

Hand a whole task to the built-in agent (Claude via the Anthropic API) instead of driving step by step.

It runs in the background; poll with ios_task_status. Needs ANTHROPIC_API_KEY (or ant auth login) in the server's environment.

Args: task: What to do, in plain language, e.g. "Turn on dark mode in Settings". max_steps: Step budget before giving up. wait_seconds: Block up to this long for the result (0 returns immediately). mode: "fast" acts directly; "reliable" plans checkpoints and has each one verified (slower, surer). device: Simulator name or UDID.

ios_task_statusA

Status and latest steps of an agent task; without task_id, a list of all tasks.

ios_task_cancelB

Stop an agent task after its current step.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation4/5

Each tool maps to a distinct action in the observation→interaction loop (observe, tap, swipe, type, press), and the agent-mode tools (ios_run_task / ios_task_status / ios_task_cancel) are clearly separated from manual driving. The only soft overlaps are ios_launch vs ios_open_url (an app scheme URL could effectively launch an app) and ios_press vs dedicated navigation, which an agent could occasionally misselect.

Naming Consistency4/5

All 14 tools use a uniform ios_ prefix with snake_case, giving a highly predictable namespace. Most are verb or verb_noun (ios_boot, ios_tap, ios_open_url, ios_run_task), with a few noun-only list/query names (ios_devices, ios_apps, ios_task_status) that follow a conventional read-only pattern but are a minor deviation.

Tool Count5/5

14 tools sits squarely in the well-scoped range and every tool maps to a needed primitive: discovery, boot, observation, four input gestures, app lifecycle, URL handling, plus an optional agent layer with status/cancel. Nothing looks redundant or padded for the scope of iOS device automation.

Completeness4/5

The core loop is fully covered end-to-end: list devices, boot, observe screen (elements + screenshot), interact (tap/swipe/type/press), and app lifecycle (apps, launch, terminate, open_url), plus an agent mode with status and cancellation. Minor gaps remain—no install/uninstall of apps, no orientation/rotation, no explicit wait/sleep or clipboard/keyboard-dismiss primitive—but agents can work around these with existing gestures.

Maintenance

ActivityMaintained
ResponsivenessNo issues