Skip to main content
Glama

list_devices

Discover available Android and iOS devices, including emulators, simulators, and physical hardware. Filter by platform or status to identify suitable targets for mobile app development and testing.

Instructions

List available devices (emulators, simulators, physical devices). Returns device details including status and platform.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
platformNoFilter by platform (optional, lists all if not specified)
statusNoFilter by device status
includeAvdsNoInclude list of available Android AVDs (default: false)
includeUnavailableNoInclude unavailable iOS simulators (default: false)

Implementation Reference

  • The main handler function for the 'list_devices' tool. Fetches devices from Android (ADB) and iOS (simctl), applies filters for platform, status, AVDs, and unavailable simulators, generates a summary, and returns structured results.
    export async function listDevices(args: ListDevicesArgs): Promise<ListDevicesResult> { const { platform, status, includeAvds = false, includeUnavailable = false, } = args; // Validate platform if specified if (platform && !isPlatform(platform)) { // If platform is specified but invalid, return empty return { devices: [], summary: `Invalid platform: ${platform}. Must be 'android' or 'ios'.`, }; } const devices: Device[] = []; let availableAvds: string[] | undefined; // Get Android devices if (!platform || platform === 'android') { try { const androidDevices = await listAndroidDevices(); for (const ad of androidDevices) { devices.push(fromAndroidDevice(ad)); } // Get available AVDs if requested if (includeAvds) { availableAvds = await listAvds(); } } catch (error) { console.error('[list_devices] Failed to list Android devices:', error); } } // Get iOS devices if (!platform || platform === 'ios') { try { const iosDevices = await listIOSDevices(); for (const id of iosDevices) { // Skip unavailable if not requested if (!includeUnavailable && id.isAvailable === false) { continue; } devices.push(fromIOSDevice({ id: id.id, name: id.name, status: id.status, runtime: id.runtime, isAvailable: id.isAvailable, })); } } catch (error) { console.error('[list_devices] Failed to list iOS devices:', error); } } // Filter by status if specified const filteredDevices = status ? filterDevicesByStatus(devices, status) : devices; // Create summary const summary = createDeviceSummary(filteredDevices); return { devices: filteredDevices, summary, availableAvds, }; }
  • TypeScript interface defining the input arguments for the list_devices tool, including optional filters for platform, status, AVDs, and unavailable devices.
    export interface ListDevicesArgs { /** Platform filter (optional, lists all if not specified) */ platform?: string; /** Status filter */ status?: DeviceStatus; /** Include available AVDs (Android) */ includeAvds?: boolean; /** Include unavailable simulators (iOS) */ includeUnavailable?: boolean; }
  • Registers the 'list_devices' tool with the global ToolRegistry, providing name, description, JSON input schema matching ListDevicesArgs, and handler function.
    export function registerListDevicesTool(): void { getToolRegistry().register( 'list_devices', { description: 'List available devices (emulators, simulators, physical devices). Returns device details including status and platform.', inputSchema: createInputSchema( { platform: { type: 'string', enum: ['android', 'ios'], description: 'Filter by platform (optional, lists all if not specified)', }, status: { type: 'string', enum: ['booted', 'shutdown', 'booting', 'unknown'], description: 'Filter by device status', }, includeAvds: { type: 'boolean', description: 'Include list of available Android AVDs (default: false)', }, includeUnavailable: { type: 'boolean', description: 'Include unavailable iOS simulators (default: false)', }, }, [] ), }, (args) => listDevices(args as unknown as ListDevicesArgs) ); }
  • During server startup in registerAllTools(), dynamically imports and invokes registerListDevicesTool() to add the tool to the MCP registry.
    const { registerListDevicesTool } = await import('./environment/list-devices.js'); const { registerManageEnvTool } = await import('./environment/manage-env.js'); const { registerCleanProjectTool } = await import('./environment/clean-project.js'); registerListDevicesTool();

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/abd3lraouf/specter-mcp'

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