Skip to main content
Glama
conorluddy

XC-MCP: XCode CLI wrapper

by conorluddy

List Installed Apps (IDB)

idb-list-apps
Read-onlyIdempotent

Discover installed iOS apps with bundle IDs, running status, and install type to identify test targets and active processes for UI automation.

Instructions

idb-list-apps

List installed applications - discover apps available for testing with bundle IDs and running status.

Overview

Enumerates all installed applications on iOS targets with structured metadata including bundle ID, app name, install type (system/user/internal), running status, debuggability, and architecture. Filters apps by install type or running status to focus on user apps or active processes. Parses IDB's pipe-separated output into structured JSON for easy programmatic access.

Parameters

Required

None - all parameters are optional

Optional

  • udid (string): Target identifier - auto-detects if omitted

  • filterType (string): Filter by install type ("system", "user", or "internal")

  • runningOnly (boolean): Show only currently running apps

Returns

Structured app list with summary counts (total, running, debuggable, by install type), separate arrays for running vs. installed apps, applied filter details, and actionable guidance for launching, terminating, installing, or debugging apps.

Examples

List user-installed apps to find test target

const result = await idbListAppsTool({
  filterType: 'user'
});

Find running app for UI automation

const running = await idbListAppsTool({ runningOnly: true });

List all apps on specific device

const all = await idbListAppsTool({
  udid: 'DEVICE-UDID-123'
});
  • idb-launch: Launch app by bundle ID discovered here

  • idb-terminate: Stop running app found in list

  • idb-install: Install new app to target

Notes

  • IDB outputs pipe-separated text, converted to structured JSON

  • Output format: bundle_id | app_name | install_type | arch | running | debuggable

  • Filter by install type to focus on user apps vs system apps

  • Running status helps identify active processes for UI automation

  • Debuggable status indicates if debugger can be attached

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
udidNo
filterTypeNo
runningOnlyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.1.0

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already signal readOnly and idempotent behavior. The description adds meaningful context by disclosing that output is parsed from IDB's pipe-separated text into structured JSON, that udid auto-detects when omitted, and that the result includes summary counts and separate running/installed arrays. No contradiction with annotations.

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 well-organized with clear headings, a front-loaded summary, examples, related tools, and notes. It is lengthy but mostly earns its length; there is minor redundancy between the overview and the notes section regarding pipe-separated output.

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?

There is no output schema, so the description compensates with a Returns section, output format note, usage examples, and related-tool workflow context. An agent has enough information to call the tool correctly and interpret its result.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden for parameters. It documents all three parameters with semantics, enum values for filterType, and the auto-detection behavior for udid. The examples also map parameter combinations to concrete agent intents.

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 uses a specific verb and resource: 'List installed applications' and enumerates the exact metadata returned (bundle ID, app name, install type, running status, debuggability, architecture). This clearly differentiates it from action-oriented siblings like idb-launch, idb-terminate, and idb-install.

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

Usage Guidelines4/5

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

The description gives concrete use cases: finding a test target, finding a running app for UI automation, and listing apps on a specific device. It also explains when filters are useful, but it does not explicitly state when not to use this tool or name alternatives like simctl-list.

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