Skip to main content
Glama

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
NameRequiredDescriptionDefault
deviceNoSpecific device ID (optional)
asBase64NoReturn image as base64 (default: false)

Implementation Reference

  • 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); } },
  • 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)") };
  • 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 } );

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/srmorete/adb-mcp'

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