Skip to main content
Glama
README.md
# 🎨 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](https://modelcontextprotocol.io/).

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

---

## ⚑ Quick Start

### Claude Code
```bash
claude mcp add media-mcp -- uvx media-mcp-server
```

### Claude Desktop / Cursor / VS Code

Add to your MCP config:
```json
{
  "mcpServers": {
    "media-mcp": {
      "command": "uvx",
      "args": ["media-mcp-server"]
    }
  }
}
```

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

---

## πŸ› οΈ 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](https://ffmpeg.org/download.html))

| 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

### Using uvx (recommended β€” zero install)
```bash
uvx media-mcp-server
```

### Using pip
```bash
pip install media-mcp-server
```

### With video support
```bash
pip install media-mcp-server[video]
```

> **Note:** Video tools require `ffmpeg` to be installed on your system. 
> Install it from [ffmpeg.org](https://ffmpeg.org/download.html) or via your package manager:
> ```bash
> # macOS
> brew install ffmpeg
> 
> # Ubuntu/Debian
> sudo apt install ffmpeg
> 
> # Windows (with Chocolatey)
> choco install ffmpeg
> ```

---

## πŸ”§ Configuration

### Config file locations

<details>
<summary><b>Claude Desktop</b></summary>

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
  "mcpServers": {
    "media-mcp": {
      "command": "uvx",
      "args": ["media-mcp-server"]
    }
  }
}
```
</details>

<details>
<summary><b>Claude Code</b></summary>
```bash
claude mcp add media-mcp -- uvx media-mcp-server
```
</details>

<details>
<summary><b>Cursor</b></summary>

Settings β†’ MCP Servers β†’ Add:
```json
{
  "media-mcp": {
    "command": "uvx",
    "args": ["media-mcp-server"]
  }
}
```
</details>

<details>
<summary><b>VS Code</b></summary>

Add to `.vscode/mcp.json`:
```json
{
  "servers": {
    "media-mcp": {
      "command": "uvx",
      "args": ["media-mcp-server"]
    }
  }
}
```
</details>

---

## πŸ§ͺ Development
```bash
git clone https://github.com/Adityaaery20/media-mcp.git
cd media-mcp
pip install -e ".[dev]"
pytest
```

### Test with MCP Inspector
```bash
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](https://gofastmcp.com) and [Pillow](https://pillow.readthedocs.io/)**

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
ResponsivenessUnresponsive