# MCP ExifTool Server

mcp-name: io.github.joshmsimpson/exiftool

An MCP (Model Context Protocol) server that provides access to ExifTool for reading, writing, and removing metadata from a wide range of file types.

## Features

- **Read metadata** from over 150 file formats
- **Write metadata** to files with automatic backup creation
- **Remove metadata** selectively or completely from files
- **Extract specific tags** or retrieve all available metadata
- **Support for multiple metadata standards**: EXIF, IPTC, XMP, GPS, and manufacturer-specific formats

### Supported File Formats

**Image Formats:**
- **RAW Camera Formats**: ARW, CR2, CR3, CRW, DNG, ERF, FFF, GPR, IIQ, K25, KDC, MEF, MRW, NEF, NRW, ORF, PEF, RAF, RAW, RW2, RWL, SR2, SRF, SRW, X3F
- **Raster Images**: BMP, FLIF, GIF, HDR, HEIC, HEIF, JPEG, JPEG 2000, JXL, JXR, PCX, PGF, PNG, PPM, TIFF, WebP
- **Specialized Images**: AVIF, BPG, DPX, EXR, FITS, FLIR, FPX, ICO, LFP, MIFF, PSD, PSP, QTIF, SVG

**Video Formats:**
- **Containers**: 3GP, AVI, F4V, FLV, GLV, M2TS, MOV, MP4, MKV, MPEG, R3D, VOB, WebM, WTV
- **Other Video**: DV, DVR-MS, INSV, LRV, MQV

**Audio Formats:**
- **Lossless**: AIFF, FLAC, LA, OFR, PAC, WAV, WV
- **Lossy**: AAC, APE, DSF, M4A, MP3, MPC, OGG, OPUS, RA, WMA

**Document Formats:**
- **Office**: DOC, DOCX, XLSX, PPTX, XLS, KEY, NUMBERS, PAGES
- **Other Documents**: PDF, EPS, RTF, TXT, XML, JSON
- **eBooks**: EPUB, MOBI, AZW

**Archive Formats:**
- 7z, GZ, RAR, ZIP

**Other Formats:**
- **Fonts**: AFM, OTF, PFA, TTF
- And many more specialized formats

## Prerequisites

**ExifTool must be installed on your system.** This MCP server is a wrapper that calls the ExifTool command-line tool.

### Installing ExifTool

**macOS:**
```bash
brew install exiftool
```

**Ubuntu/Debian:**
```bash
sudo apt-get install libimage-exiftool-perl
```

**Windows:**
Download from https://exiftool.org/

**Verify installation:**
```bash
exiftool -ver
```

## Installation

```bash
pip install exiftool-mcp
```

## Usage

### With Claude Desktop

Add this to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "exiftool": {
      "command": "exiftool-mcp"
    }
  }
}
```

### With Other MCP Clients

The server communicates via stdio and follows the Model Context Protocol specification.

## Available Tools

### `read_metadata`

Read metadata from a file using ExifTool.

**Parameters:**
- `file_path` (required): Path to the file (absolute or relative)
- `tags` (optional): Array of specific metadata tags to extract (e.g., `["DateTimeOriginal", "Make", "Model"]`)

**Example:**
```json
{
  "file_path": "/path/to/image.jpg",
  "tags": ["DateTimeOriginal", "Make", "Model", "GPSLatitude", "GPSLongitude"]
}
```

### `write_metadata`

Write or update metadata tags in a file using ExifTool. Creates a backup by default.

**Parameters:**
- `file_path` (required): Path to the file (absolute or relative)
- `tags` (required): Dictionary of metadata tags to write (e.g., `{"Artist": "John Doe", "Copyright": "2025"}`)
- `overwrite_original` (optional): If true, overwrites the original file without creating a backup. Default is false.

**Example:**
```json
{
  "file_path": "/path/to/image.jpg",
  "tags": {
    "Artist": "John Doe",
    "Copyright": "2025",
    "Comment": "Beautiful sunset"
  },
  "overwrite_original": false
}
```

### `remove_metadata`

Remove metadata from a file using ExifTool. Can remove all metadata or specific tags.

**Parameters:**
- `file_path` (required): Path to the file (absolute or relative)
- `tags` (optional): Array of specific metadata tags to remove (e.g., `["GPS*", "Comment"]`). If not specified, all metadata is removed.
- `overwrite_original` (optional): If true, overwrites the original file without creating a backup. Default is false.

**Example:**
```json
{
  "file_path": "/path/to/image.jpg",
  "tags": ["GPS*", "Location*"],
  "overwrite_original": false
}
```

### `list_supported_formats`

List all file formats supported by ExifTool.

**Parameters:** None

## Examples

### Reading all metadata from an image
```
Use the read_metadata tool with file_path: "photo.jpg"
```

### Reading specific EXIF tags
```
Use the read_metadata tool with:
- file_path: "photo.jpg"
- tags: ["DateTimeOriginal", "Make", "Model", "LensModel"]
```

### Writing metadata to a file
```
Use the write_metadata tool with:
- file_path: "photo.jpg"
- tags: {"Artist": "Jane Smith", "Copyright": "2025", "Rating": "5"}
```

### Removing GPS data from a photo
```
Use the remove_metadata tool with:
- file_path: "photo.jpg"
- tags: ["GPS*"]
```

### Removing all metadata from a file
```
Use the remove_metadata tool with:
- file_path: "photo.jpg"
(no tags specified removes all metadata)
```

### Checking supported formats
```
Use the list_supported_formats tool
```

## Development

### Setup
```bash
git clone https://github.com/joshmsimpson/exiftool_mcp.git
cd exiftool_mcp
pip install -e .
```

### Running locally
```bash
python -m exiftool_mcp.server
```

## License

MIT

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## Links

- [GitHub Repository](https://github.com/joshmsimpson/exiftool_mcp)
- [PyPI Package](https://pypi.org/project/exiftool-mcp/)
- [ExifTool Official Site](https://exiftool.org/)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [MCP Registry](https://github.com/modelcontextprotocol/registry)
