Skip to main content
Glama

open-url

Opens a URL or custom scheme on a mobile device or Chromium to navigate to a web page or trigger an app deep link, handling platform-specific rules and fallbacks.

Instructions

Open a URL or URL scheme on the device. Use to navigate to a web page or deep-link into an app. On Chromium, this navigates the primary renderer to the given URL. Cross-platform schemes: https://, tel:, mailto:. iOS also: messages://, settings://, maps://. Android also: geo:, plus any app-specific deep link. Deep-linking caveat: an https:// link opens the native app only when an installed app is verified for the link's domain (iOS Universal Links / Android App Links) — otherwise it opens in the browser, and on iOS simulators it may open in Safari even when the owning app is installed. To reliably open an installed app, use its custom scheme (scheme://path) or launch-app with its bundle id. On a physical iPhone, http(s) URLs default to Safari and any other scheme needs bundleId; the receiving app becomes the app under automation. Returns { opened, url, note? }. note carries the deep-linking caveat when a web URL was opened on a native device. Fails if no app is registered to handle the URI (iOS/Android) or the renderer rejects the navigation (Chromium).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesURL or scheme to open (e.g. https://example.com, messages://, tel:555, geo:37.0,-122.0). For Chromium this navigates the renderer.
udidYesTarget device id from `list-devices` (iOS UDID, Android serial, or Chromium id).
bundleIdNoPhysical iOS only: the app that receives the URL. Defaults to Safari for http(s); required for any other scheme. Ignored elsewhere.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.25.1
    • changedInput schema / properties / bundleId / pattern
      Previous value: -"^[A-Za-z_][A-Za-z0-9._-]*$"New value: +"^[A-Za-z0-9_][A-Za-z0-9._-]*$"
  2. Changed1 schema field changedv0.24.0
    • addedInput schema / properties / bundleId
      Added value: +{
      +  "description": "Physical iOS only: the app that receives the URL. Defaults to Safari for http(s); required for any other scheme. Ignored elsewhere.",
      +  "pattern": "^[A-Za-z_][A-Za-z0-9._-]*$",
      +  "type": "string"
      +}
  3. First observedv0.15.0

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals the Chromium renderer navigation behavior, the deep-linking caveat around Universal Links and App Links, physical iPhone Safari default behavior, the return shape, and failure conditions. This is far more than a generic 'opens a URL' statement and lets an agent predict outcomes accurately.

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

Conciseness4/5

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

The description is long but every sentence earns its place: it front-loads the core action, then gives platform schemes, deep-linking caveats, return values, and failure modes. It is organized into clear paragraphs, making it scannable. It could arguably be tightened, but the length is justified by the number of platform-specific behaviors that affect invocation.

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

Completeness5/5

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

Despite having no output schema or annotations, the description is effectively complete for an agent to invoke the tool correctly. It covers supported schemes per platform, how deep links behave, how to route app openings to `launch-app`, what the return value contains, and under what circumstances the call fails. There are no critical gaps for a tool of this complexity.

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 the baseline is 3. The description adds some useful context around URL schemes and deep-linking behavior, but it does not substantially expand on the `url`, `udid`, or `bundleId` parameters beyond what the schema already documents. The schema already states defaults, requirements, and examples, so the description's added parameter-level value is minimal.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Open a URL or URL scheme on the device.' It then clarifies the two main uses—web navigation and app deep-linking—and explicitly contrasts with the sibling `launch-app` by naming it as the reliable alternative for opening an installed app. This gives an agent a clear mental model of what the tool is for and what it is not.

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

Usage Guidelines5/5

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

The description explains when to use the tool ('Use to navigate to a web page or deep-link into an app') and gives explicit exclusion guidance: to reliably open an installed app, use its custom scheme or `launch-app` with its bundle id. It also lays out platform-specific behaviors for Chromium, iOS, and Android, so an agent can choose the correct tool and URL form for the situation.

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