MCP server for image & video processing — resize, convert, compress, crop, extract metadata, and more. No API keys, no config, just tools.
media-mcp provides 5 image manipulation tools with generally good naming (verb_noun), complete parameter schemas with types, and descriptions. However, descriptions lack depth for LLM decision-making (most are 60-150 chars, below the production baseline of 194 chars), parameter descriptions are minimal or generic, output schemas are undocumented, and error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write semantics. The server shows decent structure but lacks the rigor needed for confident agent integration.
Compress an image to reduce file size. Optionally resize to max dimensions while compressing. Works best with JPEG and WebP. PNG files will be converted to optimized PNG.
Convert an image to a different format. Supported formats: PNG, JPEG, WebP, GIF, BMP, TIFF, ICO, AVIF.
Crop an image to a specific region. Coordinates are in pixels from the top-left corner.
Get detailed information about an image file. Returns dimensions, format, color mode, file size, and EXIF metadata.
Resize an image by dimensions or scale factor. Provide width/height, or a scale factor (e.g. 0.5 for half size). By default, aspect ratio is preserved. If only width or height is given, the other dimension is calculated automatically.
Parameter descriptions are minimal or absent. E.g., 'scale' in resize_image says 'Scale factor (e.g. 0.5 = half, 2.0 = double)' but does not explain valid range, behavior at edge cases, or interaction with width/height. Production baseline is 72 chars per param description; this averages ~40 chars.
Output schemas are not documented in code. Tools return dicts (e.g., resize_image returns {'output_path', 'original_size', 'new_size', 'file_size_bytes'}) but LLMs have no declared schema to plan downstream calls or validate field presence.
No tool annotations despite clear semantics. get_image_info is read-only; resize_image, convert_image, compress_image, crop_image are destructive writes. Spec 2026-07-28 provides readOnlyHint and destructiveHint, absent here.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Tool descriptions are too short (60-70 chars) to provide LLM selection context. Production baseline is 194 chars. Descriptions do not explain WHEN to use the tool vs alternatives (e.g., when to use compress_image vs resize_image with lower dimensions).
Error handling provides no recovery guidance. If a file does not exist, _resolve_path raises FileNotFoundError('File not found: ...'), no hint about what to check or which tool to call next. No categorization of retryable vs user-fixable errors.
Path parameters accept arbitrary strings without validation context. No description explains 'absolute path on local filesystem' for users unfamiliar with path conventions. No guidance on what happens with relative paths, symlinks, or network mounts.
No input validation in tool bodies, LLMs can pass invalid quality values (0, 150), negative dimensions, or crossing crop coordinates. Code will fail at runtime instead of returning actionable error messages.
Numeric parameter constraints not documented. 'quality' is described as '1-100' in compress_image but convert_image says 'Default 85' without stating valid range. 'width', 'height', 'max_width', 'max_height' lack minimum/maximum in descriptions.