compress_remote_image
Compress remote images by URL to reduce file size while maintaining quality. Save compressed images in formats like JPEG, PNG, WebP, or AVIF to specified paths.
Instructions
Compress a remote image file by giving the URL of the image
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | The URL of the image file to compress | |
| outputPath | No | The ABSOLUTE path to save the compressed image file | |
| outputFormat | No | The format to save the compressed image file |
Implementation Reference
- src/tools.ts:173-211 (handler)Core handler function that compresses a remote image from URL using Tinify: sets API key, loads image, optionally converts format, determines output path, saves compressed file, fetches original size via fetch, computes and returns compression statistics.async function handleCompressRemoteImageTool({ imageUrl, outputPath, outputFormat, }: { imageUrl: string; outputPath?: string; outputFormat?: SupportedImageTypes; }) { tinify.key = config.apiKey!; const source = tinify.fromUrl(imageUrl); let ext = path.extname(imageUrl).slice(1); if (outputFormat) { source.convert({ type: outputFormat, }); ext = outputFormat.split('/')[1]; } let dest = outputPath; if (!dest) { const dir = path.dirname(imageUrl); const basename = path.basename(imageUrl, path.extname(imageUrl)); dest = path.join(dir, `${basename}.${ext}`); } await source.toFile(dest); const originalSize = (await fetch(imageUrl).then((res) => res.arrayBuffer())).byteLength; const compressedSize = fs.statSync(dest).size; const compressionRatio = (originalSize - compressedSize) / originalSize; return { originalSize, compressedSize, compressionRatio, }; }
- src/tools.ts:52-77 (schema)Tool schema definition for 'compress_remote_image' including name, description, and inputSchema with properties imageUrl (required), outputPath, outputFormat (enum from SUPPORTED_IMAGE_TYPES).const COMPRESS_REMOTE_IMAGE_TOOL: Tool = { name: 'compress_remote_image', description: 'Compress a remote image file by giving the URL of the image', inputSchema: { type: 'object', properties: { imageUrl: { type: 'string', description: 'The URL of the image file to compress', example: 'https://example.com/image.jpg', }, outputPath: { type: 'string', description: 'The ABSOLUTE path to save the compressed image file', example: '/Users/user/Downloads/image_compressed.jpg', }, outputFormat: { type: 'string', description: 'The format to save the compressed image file', enum: SUPPORTED_IMAGE_TYPES, example: 'image/jpeg', }, }, required: ['imageUrl'], }, };
- src/tools.ts:262-279 (registration)MCP tool handler registration for 'compress_remote_image': extracts arguments, calls handleCompressRemoteImageTool, returns JSON stringified result as text content.compress_remote_image: async (request) => { const result = await handleCompressRemoteImageTool( request.params.arguments as { imageUrl: string; outputPath?: string; outputFormat?: SupportedImageTypes; }, ); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], metadata: {}, }; },
- src/tools.ts:117-117 (registration)Exports the list of tools including COMPRESS_REMOTE_IMAGE_TOOL for MCP server registration.export const TOOLS = [COMPRESS_LOCAL_IMAGE_TOOL, COMPRESS_REMOTE_IMAGE_TOOL, RESIZE_IMAGE_TOOL];