Skip to main content
Glama

🎨 media-mcp-server

MCP server for image & video processing. No API keys. No config. Just tools.

Give your AI assistant the power to resize, convert, compress, crop, filter, and analyze images and videos — all through Model Context Protocol.

Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and any MCP-compatible client.


⚡ Quick Start

Claude Code

claude mcp add media-mcp -- uvx media-mcp-server

Claude Desktop / Cursor / VS Code

Add to your MCP config:

{
  "mcpServers": {
    "media-mcp": {
      "command": "uvx",
      "args": ["media-mcp-server"]
    }
  }
}

That's it. No API keys, no accounts, no environment variables.


Related MCP server: ffmpeg-mcp

🛠️ Tools

Image Tools

Tool

Description

get_image_info

Get dimensions, format, color mode, file size, EXIF data

resize_image

Resize by dimensions or scale factor with aspect ratio control

convert_image

Convert between PNG, JPEG, WebP, GIF, BMP, TIFF, ICO, AVIF

compress_image

Optimize file size with quality and max dimension controls

crop_image

Crop to specific pixel coordinates

create_thumbnail

Generate thumbnails with size control

strip_metadata

Remove all EXIF/metadata for privacy

rotate_image

Rotate by any angle with optional expansion

flip_image

Mirror horizontally or vertically

apply_filter

Apply blur, sharpen, grayscale, emboss, contour, and more

Video Tools (requires ffmpeg)

Tool

Description

get_video_info

Get duration, resolution, codec, bitrate, FPS, audio info

extract_frames

Pull frames at regular intervals

convert_video

Convert between MP4, WebM, MOV, AVI, GIF, MKV


💬 Example Usage

Once connected, just ask your AI:

"Resize screenshot.png to 800px wide"

"Convert all the PNGs in this folder to WebP"

"Strip the EXIF data from photo.jpg for privacy"

"Compress this image to under 500KB"

"Extract a frame every 5 seconds from demo.mp4"

"What are the dimensions of banner.png?"

"Make a grayscale version of logo.png"

"Create a 128x128 thumbnail of product-photo.jpg"


📦 Installation

uvx media-mcp-server

Using pip

pip install media-mcp-server

With video support

pip install media-mcp-server[video]

Note: Video tools require ffmpeg to be installed on your system. Install it from ffmpeg.org or via your package manager:

# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg

# Windows (with Chocolatey)
choco install ffmpeg

🔧 Configuration

Config file locations

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "media-mcp": {
      "command": "uvx",
      "args": ["media-mcp-server"]
    }
  }
}

Settings → MCP Servers → Add:

{
  "media-mcp": {
    "command": "uvx",
    "args": ["media-mcp-server"]
  }
}

Add to .vscode/mcp.json:

{
  "servers": {
    "media-mcp": {
      "command": "uvx",
      "args": ["media-mcp-server"]
    }
  }
}

🧪 Development

git clone https://github.com/Adityaaery20/media-mcp.git
cd media-mcp
pip install -e ".[dev]"
pytest

Test with MCP Inspector

npx @modelcontextprotocol/inspector uvx media-mcp-server

📋 Supported Formats

Images: PNG, JPEG, WebP, GIF, BMP, TIFF, ICO, AVIF

Videos: MP4, WebM, MOV, AVI, GIF, MKV (requires ffmpeg)


🗺️ Roadmap

  • Batch operations (process entire directories)

  • Image watermarking

  • PDF to image conversion

  • OCR (text extraction from images)

  • Audio extraction from video

  • Image collage/montage creation

  • Smart crop (content-aware)

  • SVG rasterization


📄 License

MIT — do whatever you want with it.


🤝 Contributing

Contributions welcome! Please open an issue first to discuss what you'd like to add.


Built with FastMCP and Pillow

Available Tools

13 tools
apply_filterB

Apply a filter to an image.

Available filters: blur, sharpen, smooth, detail, contour, edge_enhance, emboss, grayscale.

Args: path: Absolute path to the image file. filter_name: Name of the filter to apply. output_path: Where to save. Defaults to _..

Inputs: path (required), filter_name (required), output_path. Returns: object

compress_imageA

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.

Args: path: Absolute path to the image file. quality: Compression quality (1-100, lower = smaller file). Default 60. max_width: Optional maximum width. Image will be downscaled if wider. max_height: Optional maximum height. Image will be downscaled if taller. output_path: Where to save. Defaults to _compressed..

Inputs: path (required), quality, max_width, max_height, +1 more. Returns: object

convert_imageA

Convert an image to a different format.

Supported formats: PNG, JPEG, WebP, GIF, BMP, TIFF, ICO, AVIF.

Args: path: Absolute path to the image file. format: Target format (e.g. 'png', 'webp', 'jpeg'). output_path: Where to save. Defaults to .<new_ext> next to input. quality: Quality for lossy formats (1-100). Default 85.

Inputs: path (required), format (required), output_path, quality. Returns: object

convert_videoA

Convert a video to a different format or resolution.

Supported output formats: mp4, webm, mov, avi, gif, mkv.

Args: path: Absolute path to the video file. format: Target format (e.g. 'mp4', 'webm', 'gif'). output_path: Where to save. Defaults to .<new_ext>. resolution: Optional target resolution (e.g. '1280x720', '1920x1080'). crf: Constant Rate Factor for quality (0-51, lower = better). Default 23.

Inputs: path (required), format (required), output_path, resolution, +1 more. Returns: object

create_thumbnailA

Create a square thumbnail from an image.

The image is resized to fit within a square of the given size, preserving aspect ratio.

Args: path: Absolute path to the image file. size: Thumbnail size in pixels (default 256). Creates a size x size bounding box. output_path: Where to save. Defaults to _thumb..

Inputs: path (required), size, output_path. Returns: object

crop_imageA

Crop an image to a specific region.

Coordinates are in pixels from the top-left corner.

Args: path: Absolute path to the image file. left: Left edge x coordinate. top: Top edge y coordinate. right: Right edge x coordinate. bottom: Bottom edge y coordinate. output_path: Where to save. Defaults to _cropped..

Inputs: path (required), left (required), top (required), right (required), +2 more. Returns: object

extract_framesB

Extract frames from a video at regular intervals.

Args: path: Absolute path to the video file. interval_seconds: Time between extracted frames (default 1 second). max_frames: Maximum number of frames to extract (default 10). output_dir: Directory to save frames. Defaults to a 'frames' subdir next to the video. format: Image format for frames ('png' or 'jpg'). Default 'png'.

Inputs: path (required), interval_seconds, max_frames, output_dir, +1 more. Returns: object

flip_imageA

Flip (mirror) an image horizontally or vertically.

Args: path: Absolute path to the image file. direction: 'horizontal' or 'vertical'. output_path: Where to save. Defaults to _flipped..

Inputs: path (required), direction, output_path. Returns: object

get_image_infoA

Get detailed information about an image file.

Returns dimensions, format, color mode, file size, and EXIF metadata.

Args: path: Absolute path to the image file.

Inputs: path (required). Returns: object

get_video_infoA

Get detailed information about a video file.

Returns duration, resolution, codec, bitrate, fps, and audio info. Requires ffprobe (part of ffmpeg) to be installed.

Args: path: Absolute path to the video file.

Inputs: path (required). Returns: object

resize_imageA

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.

Args: path: Absolute path to the image file. width: Target width in pixels. height: Target height in pixels. scale: Scale factor (e.g. 0.5 = half, 2.0 = double). keep_aspect_ratio: Preserve aspect ratio when both width and height given. output_path: Where to save. Defaults to _resized. next to input.

Inputs: path (required), width, height, scale, +2 more. Returns: object

rotate_imageA

Rotate an image by a specified number of degrees.

Args: path: Absolute path to the image file. degrees: Rotation angle in degrees (counter-clockwise). expand: If True, expand the output to fit the full rotated image. output_path: Where to save. Defaults to _rotated..

Inputs: path (required), degrees (required), expand, output_path. Returns: object

strip_metadataA

Remove all EXIF and metadata from an image for privacy.

Creates a clean copy of the image with no embedded metadata.

Args: path: Absolute path to the image file. output_path: Where to save. Defaults to _clean..

Inputs: path (required), output_path. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 13 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose with no ambiguity. Tools like apply_filter, compress_image, convert_image, and resize_image all perform different operations on images, while tools like convert_video and extract_frames handle video-specific tasks. The separation between image and video operations is clear, and even similar-sounding tools like crop_image and resize_image have distinct functions.

    Naming Consistency5/5

    All tools follow a consistent verb_noun naming pattern with snake_case throughout. The verbs are descriptive and appropriate for each operation (e.g., apply_filter, compress_image, convert_video, extract_frames). There are no deviations in naming conventions, making the tool set predictable and easy to understand.

    Tool Count5/5

    With 13 tools, this server is well-scoped for media processing, covering both image and video operations. Each tool serves a specific, useful function without redundancy. The count is appropriate for the domain, providing comprehensive coverage without being overwhelming or too sparse.

    Completeness5/5

    The tool set offers complete coverage for basic media processing tasks, including filtering, compression, conversion, cropping, resizing, rotation, metadata handling, and information retrieval for both images and videos. There are no obvious gaps; agents can perform a full range of operations from input to output without dead ends.

    Maintenance

    ActivityInactive
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that provides 17 FFmpeg-based tools for video and audio processing, including conversion, compression, and editing. It enables AI assistants to perform complex media tasks like extracting audio, adding watermarks, and merging videos using natural language.
      21,648 npm
      2
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Local MCP server that compresses images and videos, extracts video frames, and prepares media for AI vision agents by returning file paths instead of inline base64.
      6
      8 npm
      1
      MIT