Scan MCP Server

Minimal MCP server for scanner capture (ADF/duplex/page-size), batching, and multipage assembly

Local serverstdio

What is the Scan MCP server?

Most file and storage access work still happens through a UI a human drives. Scan MCP server moves it into the conversation instead. Minimal MCP server for scanner capture (ADF/duplex/page-size), batching, and multipage assembly.

The short version

  • Small, typed MCP server exposing tools for device discovery and scan jobs
  • JSON Schema–validated inputs with deterministic, typed outputs
  • Smart device selection (prefers ADF/duplex, avoids camera backends), robust defaults
  • Local-first transports: stdio by default to keep everything on-device, optional HTTP for your own network deployments

Getting it running

scan-mcp on npm is all you need. Most clients run it directly, so configuration is a few lines and a restart.

The tools it exposes

The server publishes 10 tools. What each one is for:

  • list_devices — Discover connected scanners with backend details
  • Inputs — none
  • get_device_options — Get SANE options for a specific device
  • start_scan_job — Begin a scanning job; omitting device_id triggers auto-selection and default options
  • get_job_status — Inspect job state and artifact counts
  • cancel_job — Request job cancellation; best effort during scan loops
  • list_jobs — List recent jobs from the inbox directory
  • get_manifest — Fetch a job's manifest.json
  • get_events — Retrieve a job's events.jsonl log
  • Tools — See JSON Schemas in schemas/ for input shapes. Tests assert against these contracts

What it needs from you

Configuration is passed through the environment: INBOX_DIR, MCP_HTTP_HOST. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.

Things to watch

  • It runs with your machine's permissions. That is convenient and also the reason to think about what you point it at before you approve a tool call.
  • With 10 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Scan.
  • Keep per-call confirmation enabled while you learn its behaviour; it is the cheapest safeguard you have.

How it compares

Plenty of file and storage access servers cover similar ground. The differences that matter in practice are scope of access and how much setup stands between you and a working tool call. Scan's toolset — list_devices, Inputs, get_device_options and 7 more — is a fair guide to whether it matches your workflow.

SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.

Available tools

ToolWhat it does
list_devicesDiscover connected scanners with backend details.
Inputsnone.
get_device_optionsGet SANE options for a specific device.
start_scan_jobBegin a scanning job; omitting device_id triggers auto-selection and default options.
get_job_statusInspect job state and artifact counts.
cancel_jobRequest job cancellation; best effort during scan loops.
list_jobsList recent jobs from the inbox directory.
get_manifestFetch a job's manifest.json.
get_eventsRetrieve a job's events.jsonl log.
ToolsSee JSON Schemas in schemas/ for input shapes. Tests assert against these contracts.

How to install the Scan MCP server

{
  "mcpServers": {
    "scan": {
      "command": "npx",
      "args": [
        "-y",
        "scan-mcp"
      ],
      "env": {
        "INBOX_DIR": "~/Documents/scanned_documents/inbox"
      }
    }
  }
}

Configuration as documented by the project. Restart the client after saving.

Configuration

VariableDescriptionRequired
INBOX_DIRFilesystem location the server is allowed to use.Optional
MCP_HTTP_HOSTEndpoint or connection string the server talks to.Optional

Example prompts to try

  • Use Scan to list devices.
  • Use Scan to Inputs.
  • Use Scan to get device options.

Frequently asked questions

It connects Scan to MCP-compatible AI assistants such as Claude and Cursor, exposing 10 tools (list_devices, Inputs, get_device_options, and more) that the assistant can call on your behalf. Instead of copying data back and forth by hand, the assistant works with Scan directly.