
Scan Mcp
io.github.jacksenechalPublished by GitHub account jacksenechalv0.3.0Updated Oct 24, 2026
MCP server for scanner discovery and batch capture via SANE
The publisher's own server: scan.mx Email Diagnostics
Overview
Local MCP server that lets an assistant discover SANE scanners and run batch scan jobs, assembling multipage TIFF documents on the user's machine.
- What you can do
- Discover connected scanners and read a device's SANE options
- Start scan jobs with resolution, color mode, source, duplex, page size and document-splitting settings
- Track, list and cancel jobs, and read each job's manifest and event log
- Write page and document TIFF artifacts into a configured inbox directory, with optional carrier-sheet cropping
- When to use it
- Useful when a Linux machine with a SANE-supported scanner should let an assistant drive document capture: batch scanning from an ADF, duplex jobs, multipage assembly, and checking job status or artifacts afterwards.
- Requirements
- Runs locally over stdio via npx (Node 22+). Needs Linux with SANE scanimage, plus tiffcp and ImageMagick convert for multipage assembly and carrier-sheet cropping. Optional environment variables include INBOX_DIR, SCANIMAGE_BIN, TIFFCP_BIN, IM_CONVERT_BIN, SCAN_MOCK, backend preference lists, and MCP_HTTP_PORT/MCP_HTTP_HOST for the optional HTTP transport.
Installation
In SourceWeft
- Open Scan Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
scan-mcp
[CI] [npm version] [node-current] [npm downloads]
Minimal MCP server for scanner capture (ADF/duplex/page-size), batching, and multipage assembly.
Features
- Small, typed MCP server exposing tools for device discovery and scan jobs
- zod-validated inputs; the JSON Schemas in
schemas/document the contract and are contract-tested - 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
Note: This package targets Node 22 and Linux SANE backends (scanimage).
Quick Start (local stdio, default)
Add a server entry to your MCP client configuration:
- This invocation runs over stdio for a privacy-first, single-machine setup.
- Call
start_scan_jobwithout adevice_idto auto-select a scanner and begin scanning. - Artifacts are written under
INBOX_DIRper job:job-*/page_*.tiff,doc_*.tiff,manifest.json,events.jsonl. Whencrop_carrier_sheetsis set and a carrier sheet is detected, apage_*.cropped.tiffderivative is also written per affected page.
Streamable HTTP transport
Prefer to attach the scanner to another machine on your network? scan-mcp also supports the
streamable HTTP transport:
- Default port is
3001; setMCP_HTTP_PORTto override (for exampleMCP_HTTP_PORT=3333 scan-mcp --http). - Binds
127.0.0.1by default. SetMCP_HTTP_HOSTto expose it on other interfaces (for exampleMCP_HTTP_HOST=::for all, or a LAN address); the server has no authentication, so only do that on a trusted network. - HTTP responses use server-sent events (SSE) for streaming tool output; clients such as Claude Desktop and Windsurf support this transport.
- There is currently no authentication; widen the bind address only on a trusted internal network.
Install
- Run with npx:
npx scan-mcp(recommended)- The CLI runs a quick preflight check for Node 22+ and required scanner/image tools and prints installation hints if anything is missing.
- See recommended server config above
- Use
npx scan-mcp --httpto launch the streamable HTTP transport when running on another machine. - CLI help:
scan-mcp --help - From source (for development):
npm installnpm run build
- For Cline setup, and other automated agentic installation, see llms-install.md
System Requirements
- Linux with SANE utilities:
scanimage - TIFF tools:
tiffcp(multipage assembly) and ImageMagickconvert(carrier-sheet detection and cropping); preflight requires both
Environment Variables
SCAN_MOCK(default:false): mock SANE calls and generate fake TIFFs for testing.INBOX_DIR(default:scanned_documents/inbox): base directory for job runs and artifacts.SCANIMAGE_BIN(default:scanimage): override the binary path.TIFFCP_BIN/IM_CONVERT_BIN(defaults:tiffcp/convert): multipage assembly and image analysis tools.SCAN_EXCLUDE_BACKENDS(CSV): backends to exclude (e.g.,v4l).SCAN_PREFER_BACKENDS(CSV): preferred backends (e.g.,epjitsu,epson2).PERSIST_LAST_USED_DEVICE(default:true): persist and lightly prefer last used device.LOG_LEVEL(default:info): pino log level.MCP_HTTP_PORT(default:3001): TCP port for the HTTP transport.MCP_HTTP_HOST(default:127.0.0.1): bind address for the HTTP transport.
API
Tools
-
list_devices
- Discover connected scanners with backend details.
- Inputs: none.
-
get_device_options
- Get SANE options for a specific device.
- Inputs:
device_id(string): Target device identifier.
-
start_scan_job
- Begin a scanning job; omitting
device_idtriggers auto-selection and default options. - Inputs (all optional unless noted):
device_id(string)resolution_dpi(integer, 50–1200)color_mode(Color|Gray|Lineart): color_mode defaults to Lineart (document-first); at >= 600dpi it defaults to Color, since high-dpi capture usually means artwork/photos where 1-bit destroys information. Pass color_mode explicitly to override either default; high dpi is the only signal used.source(Flatbed|ADF|ADF Duplex)duplex(boolean)page_size(Letter|A4|Legal|Custom)custom_size_mm{width,height}doc_break_policy{type(page_count|none),page_count}: split the batch into documents ofpage_countpagesoutput_format(string, defaulttiff)tmp_dir(string)crop_carrier_sheets(boolean, defaultfalse): detect carrier-sheet leading-edge band and write cropped page derivatives; raw pages are kept
- Begin a scanning job; omitting
-
get_job_status
- Inspect job state and artifact counts.
- Inputs:
job_id(string)
-
cancel_job
- Request job cancellation; best effort during scan loops.
- Inputs:
job_id(string)
-
list_jobs
- List recent jobs from the inbox directory.
- Inputs (optional):
limit(integer, max 100)state(running|completed|cancelled|error|unknown)
-
get_manifest
- Fetch a job's
manifest.json. - Inputs:
job_id(string)
- Fetch a job's
-
get_events
- Retrieve a job's
events.jsonllog. - Inputs:
job_id(string)
- Retrieve a job's
See JSON Schemas in schemas/ for input shapes. Runtime validation is zod (src/server/register.ts); the schemas document the contract and tests assert against them.
How Selection and Defaults Work
Defaults aim for 300dpi, reasonable color mode, and ADF/duplex when available. Full details on scoring and fallbacks live in docs:
- Selection and defaults:
docs/SELECTION.md
Project Layout
src/mcp.ts— MCP server entry and tool registrationsrc/services/*— hardware interface and job orchestrationschemas/— JSON Schemas documenting the tool contracts (used by tests)docs/— architecture, conventions, and deep dives
Development
npm run dev(stdio MCP server),npm run dev:http(HTTP transport)make verifyruns lint, typecheck, and tests- Conventions:
docs/CONVENTIONS.mdand architecture indocs/BLUEPRINT.md
Roadmap
Tracking ideas and future improvements are documented in docs/ROADMAP.md.
Source: README.md at commit 685772b
Tools
0Version history
1- v0.3.0LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Scan integrations
scan.mx Email Diagnostics
mx.scanOfficial publisher
Remote MCP server that lets an assistant run graded email deliverability and DNS checks on a domain, covering MX, SPF, DKIM, DMARC, blacklists and more.
MTG Trade Scan
fr.mtg-trade
Scans Magic: The Gathering binder photos, turning uploaded page images into processed scan jobs, with free daily pages and paid credits.

mcp-guard
Published by GitHub account diegoperezg7
Security scanner for MCP servers that checks tool lists for poisoning, shadowing, excessive permissions, leaked secrets and weak transports.

PredictionScan
Published by GitHub account JordanKarst
Derived prediction-market flow, price changes, trader research and news. 11 read-only tools.

x402-sec-scan
Published by GitHub account 6mickswagger9
Local stdio MCP server exposing an x402 paid API for AI agents, settling payments in USDC on Base through a CDP facilitator.