dump_image
Capture screenshots from Android devices via ADB and return them as files or base64 data for debugging, testing, or documentation purposes.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Specific device ID (optional) | |
| asBase64 | No | Return image as base64 (default: false) |
Implementation Reference
- src/index.ts:669-713 (handler)The handler function that executes the dump_image tool logic: runs 'adb shell screencap -p /sdcard/screenshot.png', pulls the PNG to a temp file, cleans up remote file, reads it, and returns base64 if requested or success message.async (args: z.infer<typeof AdbScreenshotSchema>, _extra: RequestHandlerExtra) => { log(LogLevel.INFO, "Taking device screenshot"); const deviceArgs = buildDeviceArgs(args.device); const tempFilePath = createTempFilePath("adb-mcp", "screenshot.png"); const remotePath = "/sdcard/screenshot.png"; try { // Take screenshot on the device await runAdb([...deviceArgs, "shell", "screencap", "-p", remotePath]); // Pull the screenshot from the device await runAdb([...deviceArgs, "pull", remotePath, tempFilePath]); // Clean up the remote file await runAdb([...deviceArgs, "shell", "rm", remotePath]); // Read the screenshot file const imageData = await readFilePromise(tempFilePath); // Return as base64 or success message based on asBase64 parameter if (args.asBase64) { const base64Image = imageData.toString('base64'); log(LogLevel.INFO, "Screenshot captured and converted to base64 successfully"); return { content: [{ type: "text" as const, text: base64Image }] }; } else { log(LogLevel.INFO, "Screenshot captured successfully"); return { content: [{ type: "text" as const, text: "Screenshot captured successfully" }] }; } } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); log(LogLevel.ERROR, `Error taking screenshot: ${errorMsg}`); return { content: [{ type: "text" as const, text: `Error taking screenshot: ${errorMsg}` }], isError: true }; } finally { // Clean up the temporary file await cleanupTempFile(tempFilePath); } },
- src/types.ts:74-77 (schema)Base input schema object for dump_image tool parameters.export const dumpImageInputSchema = { device: z.string().optional().describe("Specific device ID (optional)"), asBase64: z.boolean().optional().default(false).describe("Return image as base64 (default: false)") };
- src/types.ts:108-108 (schema)Zod schema wrapper used for dump_image tool input validation in registration.export const AdbScreenshotSchema = z.object(dumpImageInputSchema);
- src/index.ts:666-715 (registration)MCP server.tool registration for the 'dump_image' tool, specifying name, input schema, handler function, and description.server.tool( "dump_image", AdbScreenshotSchema.shape, async (args: z.infer<typeof AdbScreenshotSchema>, _extra: RequestHandlerExtra) => { log(LogLevel.INFO, "Taking device screenshot"); const deviceArgs = buildDeviceArgs(args.device); const tempFilePath = createTempFilePath("adb-mcp", "screenshot.png"); const remotePath = "/sdcard/screenshot.png"; try { // Take screenshot on the device await runAdb([...deviceArgs, "shell", "screencap", "-p", remotePath]); // Pull the screenshot from the device await runAdb([...deviceArgs, "pull", remotePath, tempFilePath]); // Clean up the remote file await runAdb([...deviceArgs, "shell", "rm", remotePath]); // Read the screenshot file const imageData = await readFilePromise(tempFilePath); // Return as base64 or success message based on asBase64 parameter if (args.asBase64) { const base64Image = imageData.toString('base64'); log(LogLevel.INFO, "Screenshot captured and converted to base64 successfully"); return { content: [{ type: "text" as const, text: base64Image }] }; } else { log(LogLevel.INFO, "Screenshot captured successfully"); return { content: [{ type: "text" as const, text: "Screenshot captured successfully" }] }; } } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); log(LogLevel.ERROR, `Error taking screenshot: ${errorMsg}`); return { content: [{ type: "text" as const, text: `Error taking screenshot: ${errorMsg}` }], isError: true }; } finally { // Clean up the temporary file await cleanupTempFile(tempFilePath); } }, { description: ADB_DUMP_IMAGE_TOOL_DESCRIPTION } );