scan-mcp
Servidor MCP mínimo para captura de scanner (ADF/duplex/tamanho de página), loteamento e montagem de múltiplas páginas
Documentação
scan-mcp
Servidor MCP mínimo para captura de scanner (ADF/duplex/tamanho de página), processamento em lote e montagem de multipáginas.
Recursos
- Servidor MCP pequeno e tipado, expondo ferramentas para descoberta de dispositivos e trabalhos de digitalização
- Entradas validadas por JSON Schema com saídas determinísticas e tipadas
- Seleção inteligente de dispositivo (prefere ADF/duplex, evita backends de câmera), padrões robustos
- Transportes local-first: stdio por padrão para manter tudo no dispositivo, HTTP opcional para suas próprias implantações de rede
Nota: Este pacote tem como alvo Node 22 e backends SANE Linux (scanimage).
Início Rápido (stdio local, padrão)
Adicione uma entrada de servidor à configuração do seu cliente MCP:
{
"mcpServers": {
"scan": {
"command": "npx",
"args": [
"-y",
"scan-mcp"
],
"env": {
"INBOX_DIR": "~/Documents/scanned_documents/inbox"
}
}
}
}
- Esta invocação roda via stdio para uma configuração de máquina única, priorizando privacidade.
- Chame
start_scan_jobsem umdevice_idpara selecionar automaticamente um scanner e iniciar a digitalização. - Os artefatos são gravados em
INBOX_DIRpor trabalho:job-*/page_*.tiff,doc_*.tiff,manifest.json,events.jsonl. Quandocrop_carrier_sheetsestá definido e uma folha transportadora é detectada, um derivadopage_*.cropped.tifftambém é gravado por página afetada.
Transporte HTTP Streamable
Prefere conectar o scanner a outra máquina na sua rede? scan-mcp também suporta o
transporte HTTP streamable:
scan-mcp --http
- A porta padrão é
3001; definaMCP_HTTP_PORTpara substituir (por exemplo,MCP_HTTP_PORT=3333 scan-mcp --http). - Vincula todas as interfaces (
::) por padrão; definaMCP_HTTP_HOSTpara restringir (por exemplo,MCP_HTTP_HOST=127.0.0.1quando um proxy reverso fica à frente do servidor). - As respostas HTTP usam server-sent events (SSE) para streaming da saída das ferramentas; clientes como Claude Desktop e Windsurf suportam este transporte.
- Atualmente não há autenticação; isso é destinado a redes LAN internas
Instalação
- Execute com npx:
npx scan-mcp(recomendado)- A CLI executa uma verificação prévia rápida para Node 22+ e ferramentas de scanner/imagem necessárias, e imprime dicas de instalação se algo estiver faltando.
- Veja a configuração de servidor recomendada acima
- Use
npx scan-mcp --httppara iniciar o transporte HTTP streamable ao executar em outra máquina. - Ajuda da CLI:
scan-mcp --help - A partir do código-fonte (para desenvolvimento):
npm installnpm run build
- Para configuração do Cline e outras instalações agênticas automatizadas, veja llms-install.md
Requisitos do Sistema
- Linux com utilitários SANE:
scanimage(e opcionalmentescanadf) - Ferramentas TIFF:
tiffcp(preferido) ou ImageMagickconvert
Variáveis de Ambiente
SCAN_MOCK(padrão:false): simula chamadas SANE e gera TIFFs falsos para testes.INBOX_DIR(padrão:scanned_documents/inbox): diretório base para execuções de trabalhos e artefatos.SCANIMAGE_BIN/SCANADF_BIN(padrões:scanimage/scanadf): substitui caminhos de binários.TIFFCP_BIN/IM_CONVERT_BIN(padrões:tiffcp/convert): ferramentas de montagem de multipáginas.SCAN_EXCLUDE_BACKENDS(CSV): backends a excluir (por exemplo,v4l).SCAN_PREFER_BACKENDS(CSV): backends preferidos (por exemplo,epjitsu,epson2).PERSIST_LAST_USED_DEVICE(padrão:true): persiste e prefere levemente o último dispositivo usado.MCP_HTTP_PORT(padrão:3001): porta TCP para o transporte HTTP.
API
Ferramentas
-
list_devices
- Descobre scanners conectados com detalhes do backend.
- Entradas: nenhuma.
-
get_device_options
- Obtém opções SANE para um dispositivo específico.
- Entradas:
device_id(string): Identificador do dispositivo alvo.
-
start_scan_job
- Inicia um trabalho de digitalização; omitir
device_idaciona a seleção automática e opções padrão. - Entradas (todas opcionais, salvo indicação):
device_id(string)resolution_dpi(inteiro, 50–1200)color_mode(Color|Gray|Lineart): color_mode padrão é Lineart (documento primeiro); em >= 600dpi, o padrão é Color, já que captura em alta resolução geralmente significa arte/fotos onde 1-bit destrói informações. Passe color_mode explicitamente para substituir qualquer um dos padrões; alta resolução é o único sinal usado.source(Flatbed|ADF|ADF Duplex)duplex(booleano)page_size(Letter|A4|Legal|Custom)custom_size_mm{width,height}doc_break_policy{type,blank_threshold,page_count,timer_ms,barcode_values}output_format(string, padrãotiff)tmp_dir(string)crop_carrier_sheets(booleano, padrãofalse): detecta a banda da borda dianteira da folha transportadora e grava derivados de páginas recortadas; as páginas brutas são mantidas
- Inicia um trabalho de digitalização; omitir
-
get_job_status
- Inspeciona o estado do trabalho e contagens de artefatos.
- Entradas:
job_id(string)
-
cancel_job
- Solicita cancelamento do trabalho; melhor esforço durante loops de digitalização.
- Entradas:
job_id(string)
-
list_jobs
- Lista trabalhos recentes do diretório de entrada.
- Entradas (opcionais):
limit(inteiro, máx. 100)state(running|completed|cancelled|error|unknown)
-
get_manifest
- Busca o
manifest.jsonde um trabalho. - Entradas:
job_id(string)
- Busca o
-
get_events
- Recupera o log de
events.jsonlde um trabalho. - Entradas:
job_id(string)
- Recupera o log de
Veja os JSON Schemas em schemas/ para formatos de entrada. Testes verificam esses contratos.
Como Funcionam Seleção e Padrões
Os padrões visam 300dpi, modo de cor razoável e ADF/duplex quando disponível. Detalhes completos sobre pontuação e fallbacks estão na documentação:
- Seleção e padrões:
docs/SELECTION.md
Estrutura do Projeto
src/mcp.ts— entrada do servidor MCP e registro de ferramentassrc/services/*— interface de hardware e orquestração de trabalhosschemas/— JSON Schemas usados para validação e testesdocs/— arquitetura, convenções e mergulhos profundos
Desenvolvimento
npm run dev(servidor MCP stdio),npm run dev:http(transporte HTTP)make verifyexecuta lint, typecheck e testes- Convenções:
docs/CONVENTIONS.mde arquitetura emdocs/BLUEPRINT.md
Roadmap
Ideias de rastreamento e melhorias futuras estão documentadas em docs/ROADMAP.md.