Skip to main content
Glama
surewht
by surewht
README.md
# Image Forensics MCP Server

An MCP (Model Context Protocol) server that gives AI assistants forensic analysis capabilities to help detect AI-generated images. Uses noise maps, Error Level Analysis, FFT frequency analysis, spectral decay analysis, color channel analysis, and metadata inspection.

## Install

One command — requires [uv](https://docs.astral.sh/uv/getting-started/installation/):

```bash
claude mcp add -s user image-forensics -- uvx --from git+https://github.com/surewht/image-forensics-mcp image-forensics-mcp
```

That's it. Restart Claude Code and the tools are available.

### Alternative: install from local clone

```bash
git clone https://github.com/surewht/image-forensics-mcp.git
cd image-forensics-mcp
claude mcp add -s user image-forensics -- uvx --from . image-forensics-mcp
```

### Manual config

Add to `~/.claude.json`:

```json
{
  "mcpServers": {
    "image-forensics": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/surewht/image-forensics-mcp", "image-forensics-mcp"]
    }
  }
}
```

## Tools

| Tool | What it does |
|------|-------------|
| `noise_map` | Extracts the noise pattern by subtracting a blurred version. AI images have unnaturally uniform noise. Returns visualization + statistics. |
| `error_level_analysis` | Multi-scale ELA — resaves at multiple JPEG qualities and analyzes error patterns. Detects splicing and compression inconsistencies. |
| `frequency_analysis` | 2D FFT spectrum analysis. Detects GAN grid artifacts and unusual frequency distributions. |
| `spectral_decay_analysis` | Power spectral density curve fitting (1/f^β). Based on CVPR 2025 research. Natural images follow characteristic decay; AI images may deviate. |
| `color_analysis` | RGB channel correlation, gradient correlation, entropy, and saturation analysis. Based on CVPR 2025 "Secret Lies in Color" research. |
| `metadata_check` | EXIF/metadata inspection for AI tool signatures (Stable Diffusion, DALL-E, Midjourney, etc.) + AI resolution fingerprinting. |
| `full_forensic_report` | Runs all 6 analyses, saves visualizations to `/tmp/image-forensics/`, returns a categorized verdict. |

## Usage

In Claude Code, just ask:

```
Analyze this image for AI generation: /path/to/image.jpg
```

Or use individual tools:

```
Run a noise map analysis on /path/to/image.png
Check the metadata of /path/to/image.webp
```

## How the verdict works

The `full_forensic_report` categorizes findings into three tiers:

| Tier | What triggers it | Example |
|------|-----------------|---------|
| **Definitive** | AI tool signatures in metadata (SD parameters, generation prompts) | Stable Diffusion PNG with `parameters` chunk |
| **Strong** | Forensic anomalies rarely seen in real photos (uniform noise, GAN artifacts, spectral anomalies, extreme saturation) | GAN periodic patterns in FFT spectrum |
| **Weak/Ambiguous** | Indicators also caused by social media processing (no EXIF, AI-typical resolution, uniform ELA) | Facebook-resized 768x768 JPEG with stripped metadata |

### Verdict scale

- **AI-GENERATED** — Definitive metadata proof found
- **LIKELY AI-GENERATED** — 3+ strong forensic anomalies
- **POSSIBLY AI-GENERATED** — 1-2 strong anomalies
- **INCONCLUSIVE** — Only weak/ambiguous indicators
- **LIKELY AUTHENTIC** — Minimal indicators, consistent with normal processing
- **NO INDICATORS** — Clean across all analyses

## Limitations

Modern AI generators (Flux, DALL-E 3, Midjourney v6+) produce images that are nearly indistinguishable from real photos at the pixel level. This tool works best when:

- **Metadata is intact** — SD parameters, generation prompts = definitive proof
- **Images show GAN artifacts** — periodic patterns in FFT = strong signal
- **Images haven't been re-compressed** — social media platforms strip metadata and resize to AI-typical dimensions, creating ambiguity

For ambiguous cases, visual inspection (teeth, hands, text, reflections, lighting inconsistencies) combined with these forensic tools gives the best results.

## Requirements

- Python >= 3.10
- [uv](https://docs.astral.sh/uv/) (for `uvx` install method)

Dependencies (installed automatically): `mcp[cli]`, `Pillow`, `numpy`, `scipy`

## License

MIT

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation4/5

Each tool targets a distinct forensic method (noise, ELA, FFT, spectral decay, color, metadata). However, frequency_analysis and spectral_decay_analysis both operate in the frequency domain and could be confused by an agent unfamiliar with the specific techniques. The descriptions clarify the differences, so overlap is limited.

Naming Consistency4/5

Six of seven tools follow a consistent noun_analysis or noun_check pattern (e.g., noise_map, frequency_analysis, metadata_check). The outlier is full_forensic_report, which is a different type (aggregate report) but its name is still descriptive. Minor deviation from a strict pattern.

Tool Count5/5

Seven tools is well-scoped for an image forensics server. Each tool provides a distinct analysis technique, and the inclusion of a full report tool adds convenience without redundancy. No tool feels unnecessary or missing.

Completeness5/5

The surface covers multiple orthogonal forensic techniques: noise, compression artifacts, frequency domain, spectral decay, color, metadata, and a comprehensive aggregator. This is complete for the stated purpose of AI image detection; no obvious gaps exist.

Maintenance

ActivityInactive
ResponsivenessNo issues