From f7ef8409ef45265ba05c495338aab868ec091962 Mon Sep 17 00:00:00 2001 From: aberemia24 Date: Sat, 27 Sep 2025 20:54:52 +0300 Subject: [PATCH] feat(screenshot): add JPEG quality parameter support - Add optional quality parameter (0-100) to screenshot schema - Pass quality parameter to Puppeteer screenshot method - Add optimizeForSpeed flag for improved performance - Update documentation with new parameter details This allows users to control JPEG compression quality, significantly reducing file sizes for screenshots. For example, quality=50 can reduce file size by ~35% compared to PNG format. Fixes potential issues with large screenshot sizes exceeding API limits when using Chrome DevTools MCP with AI assistants. --- docs/tool-reference.md | 1 + src/tools/screenshot.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/docs/tool-reference.md b/docs/tool-reference.md index 3356b06a..1b39e869 100644 --- a/docs/tool-reference.md +++ b/docs/tool-reference.md @@ -308,6 +308,7 @@ so returned values have to JSON-serializable. - **format** (enum: "png", "jpeg") _(optional)_: Type of format to save the screenshot as. Default is "png" - **fullPage** (boolean) _(optional)_: If set to true takes a screenshot of the full page instead of the currently visible viewport. Incompatible with uid. +- **quality** (number) _(optional)_: Compression quality for JPEG format (0-100). Higher values mean better quality but larger file sizes. Ignored for PNG format. - **uid** (string) _(optional)_: The uid of an element on the page from the page content snapshot. If omitted takes a pages screenshot. --- diff --git a/src/tools/screenshot.ts b/src/tools/screenshot.ts index aa017d08..ae1f98bf 100644 --- a/src/tools/screenshot.ts +++ b/src/tools/screenshot.ts @@ -22,6 +22,14 @@ export const screenshot = defineTool({ .enum(['png', 'jpeg']) .default('png') .describe('Type of format to save the screenshot as. Default is "png"'), + quality: z + .number() + .min(0) + .max(100) + .optional() + .describe( + 'Compression quality for JPEG format (0-100). Higher values mean better quality but larger file sizes. Ignored for PNG format.', + ), uid: z .string() .optional() @@ -50,6 +58,8 @@ export const screenshot = defineTool({ const screenshot = await pageOrHandle.screenshot({ type: request.params.format, fullPage: request.params.fullPage, + quality: request.params.quality, + optimizeForSpeed: true, // Bonus: optimize encoding for speed }); if (request.params.uid) {