Skip to main content
Glama
mobile-next

Mobile Next MCP Server

Official
by mobile-next

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
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
saveToYesThe path to save the screenshot to

Implementation Reference

  • 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}`;
  • 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}`;
    	}
    );
  • 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.`);
    };

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