# scan-mcp

An MCP server that finds scanners and runs batch capture jobs through SANE. Useful when you want paper documents turned into TIFF files from inside an agent session.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 6
- Author: jacksenechal
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/jacksenechal/scan-mcp
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/scan-mcp

## What it does

scan-mcp exposes scanner tools to your agent. `list_devices` reports what is connected, `get_device_options` returns the SANE options for one device, and `start_scan_job` kicks off a capture. Leave out `device_id` and the server picks a scanner itself, favouring ADF or duplex units and skipping camera backends. The default target is 300 dpi. At 600 dpi and above the colour mode flips to `Color` on its own, since that resolution usually means artwork rather than plain text.

Each job writes into `INBOX_DIR`: raw pages as `page_*.tiff`, assembled documents as `doc_*.tiff`, plus `manifest.json` and an `events.jsonl` log. Multipage assembly uses `tiffcp`, falling back to ImageMagick `convert`. Job state, cancellation and history come through `get_job_status`, `cancel_job` and `list_jobs`.

This runs on Linux with SANE utilities — `scanimage` for capture, `tiffcp` or `convert` for assembly — and needs Node 22. Miss those binaries in `PATH` and the server will not start, so check the machine first. The default stdio transport keeps everything local. There is also an HTTP mode via `scan-mcp --http` on port `3001`, but it ships without authentication, which makes it a LAN-only option.

## Requirements
- Needs: Node.js (commands run via npx)

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add scan-mcp -- npx -y scan-mcp
```

### Codex

**Platform CLI**
```bash
codex mcp add scan-mcp -- npx -y scan-mcp
```

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "scan-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "scan-mcp"
            ]
        }
    }
}
```

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "scan-mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "scan-mcp"
            ]
        }
    }
}
```

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add scan-mcp npx -y scan-mcp
```

## When to use it
- discover a connected scanner and read its SANE options
- scan a stack of pages through an ADF in one job
- assemble a multipage TIFF from individual pages
- crop carrier-sheet pages and keep the derivatives
- check job status and read the event log

## Example prompts
- List the scanners and show me their options
- Start an ADF scan at 300 dpi and assemble a multipage TIFF
- Show the status of the last scan job and its event log

## Similar
- [Scrapling MCP Server](https://affpapa.org/en/nevibecode/mcp/scrapling-mcp-server.md) — MCP server · ★ 89433
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [AIHawk](https://affpapa.org/en/nevibecode/mcp/aihawk.md) — MCP server · ★ 32221
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23263
- [SeleniumBase MCP](https://affpapa.org/en/nevibecode/mcp/seleniumbase-mcp.md) — MCP server · ★ 13169
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12791

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
