list_devicesLABSCO SUMMARY
Colour mode defaults by resolution, and says so.
Lineart is the default because most scans are documents; at 600 dpi and above it switches to colour, on the assumption that high-resolution capture means artwork rather than paperwork. One parameter overrides either default, and every job leaves a manifest and an event log on disk, so a partial run is inspectable rather than lost.
What it is
A Node server over Linux SANE. It selects a scanner, runs the job, writes pages and a manifest into an inbox directory, and returns typed status rather than scanimage output.
What you get
- Connected scanners discovered with backend details, and one device's SANE options — list_devices, get_device_options
- A scan job started with resolution from 50 to 1200 dpi, colour mode, source (Flatbed, ADF or ADF Duplex), duplex, page size and a document-break policy — start_scan_job
- Auto-selection when you omit the device: it prefers ADF and duplex and avoids camera backends
- Job state and artifact counts, cancellation, and recent jobs filtered by state — get_job_status, cancel_job, list_jobs
- A job's manifest.json and its events.jsonl log — get_manifest, get_events
- Carrier-sheet detection that writes a cropped derivative per affected page while keeping the raw one
- JSON Schema-validated inputs with deterministic typed outputs
Requirements
Linux with SANE's scanimage, and optionally scanadf, plus tiffcp or ImageMagick convert for multipage assembly. Node 22. Run npx -y scan-mcp over stdio with INBOX_DIR set to where artifacts should land. scan-mcp --http serves the streamable HTTP transport on port 3001 by default, with no authentication of its own, so keep it on a network you control.
Setup effort
One command — npx scan-mcp
USE CASES
Scanning a stack of paper without configuring anything
Start the job with no device id and it picks a scanner that has a feeder, avoids camera backends, and uses sensible defaults.
Getting a specific capture right
Read the device's own SANE options first, then set resolution, source, duplex and page size explicitly for that hardware.
Splitting a batch into separate documents
The document-break policy takes blank detection, a page count, a timer or barcode values, so a long feed becomes several files.
Working out why a job produced the wrong thing
The manifest lists what was written and the event log records what happened, both readable after the fact.
8 tools
Listed in project docs. Your client may show a different list.
get_device_optionsstart_scan_jobget_job_statuscancel_joblist_jobsget_manifestget_eventsBEFORE YOU INSTALL
What to know first
Tools you get
8 tools named in the project's documentation.
Requires
npx on PATH
INSTALLATION
Connect your client
Server setup
npx scan-mcpMCP Clients
Any MCP client — stdio
{
"mcpServers": {
"scan": {
"command": "npx",
"args": [
"-y",
"scan-mcp"
],
"env": {
"INBOX_DIR": "~/Documents/scanned_documents/inbox"
}
}
}
}Remote scanner — HTTP server
npx scan-mcp --http