Skip to main content
Glama
mobile-next

Mobile Next MCP Server

Official
by mobile-next

mobile_list_apps

Retrieve a list of installed applications on a mobile device for automation testing or device management purposes.

Instructions

List all the installed apps on the device

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

Implementation Reference

  • src/server.ts:252-264 (registration)
    Registers the MCP tool 'mobile_list_apps' with Zod input schema (device ID) and a thin handler that delegates to the appropriate Robot.listApps() implementation.
    tool( "mobile_list_apps", "List Apps", "List all the installed apps on the device", { device: z.string().describe("The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.") }, async ({ device }) => { const robot = getRobotFromDevice(device); const result = await robot.listApps(); return `Found these apps on device: ${result.map(app => `${app.appName} (${app.packageName})`).join(", ")}`; } );
  • AndroidRobot.listApps(): Retrieves list of installed apps with launcher activities using adb shell command.
    public async listApps(): Promise<InstalledApp[]> { // only apps that have a launcher activity are returned return this.adb("shell", "cmd", "package", "query-activities", "-a", "android.intent.action.MAIN", "-c", "android.intent.category.LAUNCHER") .toString() .split("\n") .map(line => line.trim()) .filter(line => line.startsWith("packageName=")) .map(line => line.substring("packageName=".length)) .filter((value, index, self) => self.indexOf(value) === index) .map(packageName => ({ packageName, appName: packageName, })); }
  • IosRobot.listApps(): Retrieves list of all installed apps using go-ios 'apps --all --list' command.
    public async listApps(): Promise<InstalledApp[]> { await this.assertTunnelRunning(); const output = await this.ios("apps", "--all", "--list"); return output .split("\n") .map(line => { const [packageName, appName] = line.split(" "); return { packageName, appName, }; }); }
  • MobileDevice.listApps(): Retrieves list of installed apps using mobilecli 'apps list' command via JSON response.
    public async listApps(): Promise<InstalledApp[]> { const response = JSON.parse(this.runCommand(["apps", "list"])) as InstalledAppsResponse; return response.data.map(app => ({ appName: app.appName || app.packageName, packageName: app.packageName, })) as InstalledApp[]; }
  • Helper function to resolve device ID to the correct Robot instance (IosRobot, AndroidRobot, or MobileDevice) for executing listApps() and other methods.
    const getRobotFromDevice = (deviceId: string): Robot => { // from now on, we must have mobilecli working ensureMobilecliAvailable(); // Check if it's an iOS device const iosManager = new IosManager(); const iosDevices = iosManager.listDevices(); const iosDevice = iosDevices.find(d => d.deviceId === deviceId); if (iosDevice) { return new IosRobot(deviceId); } // Check if it's an Android device const androidManager = new AndroidDeviceManager(); const androidDevices = androidManager.getConnectedDevices(); const androidDevice = androidDevices.find(d => d.deviceId === deviceId); if (androidDevice) { return new AndroidRobot(deviceId); } // Check if it's a simulator (will later replace all other device types as well) const response = mobilecli.getDevices({ platform: "ios", type: "simulator", includeOffline: false, }); if (response.status === "ok" && response.data && response.data.devices) { for (const device of response.data.devices) { if (device.id === deviceId) { return new MobileDevice(deviceId); } } } throw new ActionableError(`Device "${deviceId}" not found. Use the mobile_list_available_devices tool to see available devices.`); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mobile-next/mobile-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server