mobile_save_screenshot
Capture and save mobile device screenshots to specified file paths for automation testing and debugging purposes.
Instructions
Save a screenshot of the mobile device to a file
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| saveTo | Yes | The path to save the screenshot to |
Implementation Reference
- src/server.ts:512-517 (handler)The main handler function for the 'mobile_save_screenshot' tool. It retrieves the appropriate Robot instance for the given device, captures a screenshot using robot.getScreenshot(), and saves it to the specified file path using fs.writeFileSync.async ({ device, saveTo }) => { const robot = getRobotFromDevice(device); const screenshot = await robot.getScreenshot(); fs.writeFileSync(saveTo, screenshot); return `Screenshot saved to: ${saveTo}`;
- src/server.ts:508-510 (schema)Input schema definition using Zod for the tool parameters: device ID and save path.{ device: z.string().describe("The device identifier to use. Use mobile_list_available_devices to find which devices are available to you."), saveTo: z.string().describe("The path to save the screenshot to"),
- src/server.ts:504-519 (registration)Tool registration call using the 'tool' helper function, which internally calls server.registerTool with title, description, inputSchema, and the handler.tool( "mobile_save_screenshot", "Save Screenshot", "Save a screenshot of the mobile device to a file", { device: z.string().describe("The device identifier to use. Use mobile_list_available_devices to find which devices are available to you."), saveTo: z.string().describe("The path to save the screenshot to"), }, async ({ device, saveTo }) => { const robot = getRobotFromDevice(device); const screenshot = await robot.getScreenshot(); fs.writeFileSync(saveTo, screenshot); return `Screenshot saved to: ${saveTo}`; } );
- src/server.ts:142-179 (helper)Helper function to get the appropriate Robot implementation (AndroidRobot, IosRobot, or MobileDevice) based on the device ID, used in the handler.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.`); };