MCP Duplicate Supplier Invoice Check
Revise o histórico de faturas de fornecedores fornecido localmente para referências repetidas e candidatos com mesmo valor/data, com evidência completa e CSV gratuito.
Documentação
Servidor MCP de verificação de faturas duplicadas de fornecedores
Servidor MCP para revisão de faturas duplicadas de fornecedores e contas a pagar: referências exatas e normalizadas de lotes fornecidos com evidências em CSV gratuitas. Revise candidatos a faturas duplicadas de fornecedores no histórico local fornecido.
Funciona com Claude Desktop, Claude Code, Cursor e qualquer cliente do Model Context Protocol. Executa na sua própria máquina: este servidor não possui endpoint hospedado, então instale-o a partir do pacote ou do código-fonte.
Página do produto: https://mcp.zovo.one/s/duplicate-invoice-check — recursos, limites gratuitos e caminhos de instalação suportados.
Experimente a revisão editável de faturas duplicadas no seu navegador antes de instalar. Campos sintéticos são verificados localmente no seu navegador, sem uploads. Candidatos exigem revisão; não são decisões de pagamento.
Instalação
Claude Desktop, um clique. Baixe duplicate-invoice-check.mcpb do catálogo de pacotes e clique duas vezes nele.
A partir do código-fonte. O espelho é autocontido: toda dependência @theluckystrike/* é incluída, então um clone novo compila sem configuração adicional.
git clone https://github.com/theluckystrike/mcp-duplicate-invoice-check.git
cd mcp-duplicate-invoice-check
npm install && npm run build
Em seguida, aponte seu cliente para o ponto de entrada compilado:
{
"mcpServers": {
"duplicate-invoice-check": {
"command": "node",
"args": ["/absolute/path/to/mcp-duplicate-invoice-check/dist/index.js"]
}
}
}
@theluckystrike/mcp-duplicate-invoice-checkainda não está publicado no npm, portanto um comandonpx -y @theluckystrike/mcp-duplicate-invoice-checkfalhará. Os três caminhos acima são os que funcionam e cada um é testado pelo CI.

Espelho somente leitura de mcp-servers/servers/duplicate-invoice-check. Consulte MIRROR.md.
Revise um lote fornecido de faturas de fornecedores em busca de números de fatura repetidos, variações conservadoras de formatação ou valores e datas de fatura idênticos. Este servidor MCP local retorna evidências completas agrupadas e o motivo exato pelo qual cada registro precisa de revisão. Faturas legítimas distintas podem compartilhar valor e data. Candidatos não são duplicatas confirmadas, pontuações de fraude, valores recuperáveis ou decisões de pagamento. Ele não se conecta a um ERP, não lê PDFs, não usa OCR nem recupera histórico ausente.
Criado por theluckystrike. MIT. Suporte: support@zovo.one.
Instalação
Claude Desktop: baixe duplicate-invoice-check.mcpb v0.22.8 e abra-o. SHA-256: 181379eb6dcff3d90b55e080dd9c180f6c96802e991872865a6b0ce422b3aaea. Outros clientes podem usar as instruções de código-fonte abaixo.
Requer Node.js 18 ou mais recente e um cliente MCP. Nenhuma chave de API ou conta é necessária para uso gratuito. O pacote npm não está publicado: compile o checkout do código-fonte e use um caminho local absoluto.
git clone https://github.com/theluckystrike/mcp-servers.git
cd mcp-servers
npm install
node scripts/bootstrap-timezone.mjs
npm run build --workspace @theluckystrike/mcp-license
npm run build --workspace @theluckystrike/mcp-duplicate-invoice-check
Claude Desktop: mescle esta entrada em mcpServers em ~/Library/Application Support/Claude/claude_desktop_config.json no macOS, ou %APPDATA%\Claude\claude_desktop_config.json no Windows. Substitua /absolute/path pelo local do checkout.
{"mcpServers":{"duplicate-invoice-check":{"command":"node","args":["/absolute/path/mcp-servers/servers/duplicate-invoice-check/dist/index.js"]}}}
Claude Code:
claude mcp add duplicate-invoice-check -- node /absolute/path/mcp-servers/servers/duplicate-invoice-check/dist/index.js
Cursor: coloque esta entrada local em .cursor/mcp.json no seu projeto ou ~/.cursor/mcp.json:
{"mcpServers":{"duplicate-invoice-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/duplicate-invoice-check/dist/index.js"]}}}
VS Code: use .vscode/mcp.json com a chave de nível superior servers:
{"servers":{"duplicate-invoice-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/duplicate-invoice-check/dist/index.js"]}}}
Agente legado Cascade do Windsurf: mescle o JSON mcpServers do Claude Desktop em ~/.codeium/windsurf/mcp_config.json. Este arquivo se aplica ao Cascade; seu agente mais recente Devin Local usa uma rota de configuração diferente. O servidor autônomo expõe oito ferramentas.
Cline: abra o painel de Servidores MCP, guia Configurar e depois Configurar Servidores MCP. Adicione esta entrada ao JSON de configurações (para o CLI do Cline, o arquivo é ~/.cline/mcp.json):
{"mcpServers":{"duplicate-invoice-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/duplicate-invoice-check/dist/index.js"],"disabled":false,"autoApprove":[]}}}
Estas são as seis configurações locais de cliente stdio usadas por este projeto. Não há endpoint hospedado ou conector de chat no navegador. Se o cliente não conseguir encontrar node, substitua-o pelo caminho absoluto impresso por which node. Após salvar, reconecte o servidor (saia e reinicie completamente o Claude Desktop), chame license_status e execute o exemplo abaixo. Um resultado tools/list sozinho não verifica a verificação de candidatos.
Ferramentas
| Ferramenta | Entrada e resultado |
|---|---|
duplicate_invoice_check | records, save opcional (falso); candidatos completos agrupados, contagens únicas, evidências de origem e um id de pré-visualização gratuito. |
report_list | offset opcional (0), limit (20, máx. 100); UUIDs salvos e resumos de contagem. |
report_get | id salvo; registros de origem, grupos e motivos. |
report_page | id salvo ou de pré-visualização, section, offset opcional, limit (máx. 100), group_id; páginas de evidências completas. |
report_delete | id salvo; exclui um relatório e reutiliza seu slot de armazenamento. |
report_export_csv | id salvo ou de pré-visualização, offset opcional, limit (máx. 1000); uma linha por registro de origem, motivos de candidato e ids de grupo. |
license_status | Sem argumentos; nível offline e link de checkout. |
license_activate | key; verifica e armazena uma licença Pro offline. |
Uma referência repetida e um total igual legítimo
Chame duplicate_invoice_check com registros sintéticos:
{
"records": [
{"record_id":"A","entity_id":"UK-1","supplier_id":"S-9","document_type":"invoice","invoice_number":"INV-001","invoice_date":"2026-10-01","currency":"USD","total_minor":12500},
{"record_id":"B","entity_id":"UK-1","supplier_id":"S-9","document_type":"invoice","invoice_number":"INV-001","invoice_date":"2026-10-02","currency":"USD","total_minor":13000},
{"record_id":"C","entity_id":"UK-1","supplier_id":"S-9","document_type":"invoice","invoice_number":"inv /001","invoice_date":"2026-10-03","currency":"USD","total_minor":12500},
{"record_id":"D","entity_id":"UK-1","supplier_id":"S-9","document_type":"invoice","invoice_number":"SERVICE-02","invoice_date":"2026-10-01","currency":"USD","total_minor":12500}
],
"save": false
}
O resultado tem quatro registros candidatos únicos e três grupos. exact_reference inclui A/B apesar de suas datas e totais diferentes. normalized_reference inclui A/B/C e expõe todos os campos conflitantes. same_amount_date inclui A/D: dois serviços legítimos diferentes podem ter a mesma data e total, então este grupo é um alerta de revisão. A aparece em três grupos, mas é contado uma vez. Nenhuma soma de perdas possíveis é calculada. Alterar C para INV-1 o exclui do grupo INV001 normalizado porque zeros à esquerda permanecem significativos.
Contrato exato de entrada
Forneça 1–1000 registros, cada um com record_id único, entity_id e supplier_id exatos, document_type (invoice ou credit_note), invoice_number, YYYY-MM-DD invoice_date real, currency de três letras maiúsculas e total_minor inteiro seguro positivo. IDs e números de fatura têm 1–160 caracteres sem espaços ao redor ou caracteres de controle. entity_label e supplier_label opcionais são texto somente para exibição, até 200 caracteres sem controles. Campos desconhecidos são rejeitados.
Valores são unidades inteiras de moeda, nunca valores de ponto flutuante: USD 12500 significa $125,00. Códigos de moeda são verificados quanto à sintaxe de três letras maiúsculas, não contra um registro externo de moedas. Notas de crédito usam valores absolutos positivos e comparam apenas com notas de crédito. Nenhum valor é somado, convertido ou interpretado como perda financeira. Ano 0000, datas de calendário impossíveis, ids de registro duplicados, dinheiro zero/negativo/decimal/inseguro e lotes acima do limite são erros de entrada.
Cada regra agrupa apenas registros com (entity_id, supplier_id, document_type, currency) exatamente igual. IDs de entidade e fornecedor diferenciam maiúsculas de minúsculas: nomes semelhantes, IDs diferentes e entidades diferentes nunca se juntam. Várias entidades podem aparecer em um lote, mas cada uma permanece em um escopo separado. Rótulos de exibição não afetam a correspondência.
Três regras de igualdade são executadas independentemente:
exact_reference: o número de fatura original corresponde exatamente, mesmo quando valores/datas diferem.normalized_reference:a-zASCII torna-seA-Z; apenas espaço ASCII, hífen, barra e ponto são removidos. Zeros à esquerda, acentos, todos os caracteres Unicode, sublinhados, espaços inseparáveis, travessões Unicode e caracteres semelhantes a letras/dígitos permanecem inalterados. Chaves normalizadas vazias não colidem.same_amount_date: valor positivo e data da fatura correspondem exatamente. Isso frequentemente tem explicações legítimas.
Grupos contêm associação completa, escopo exato e chave de correspondência, uma explicação e campos de origem divergentes. São motivos independentes sobrepostos, não clusters transitivos de duplicatas confirmadas. candidate_record_count conta a união uma vez. no_candidates_in_supplied_batch significa que estas regras limitadas não encontraram nada nos registros fornecidos; não significa seguro para pagar. Histórico ausente e alterações de referência, data ou valor podem escapar dessas regras. Relatórios salvos nunca se tornam histórico implícito entre chamadas: inclua todos os registros que deseja comparar a cada vez.
Registros de origem e grupos de relatórios são classificados deterministicamente; reordenar os mesmos registros de entrada produz as mesmas evidências de diagnóstico. O cálculo agrupa chaves em vez de produzir todos os pares: no máximo 3000 associações para 1000 registros, incluindo sobreposição. O servidor não realiza telemetria nem solicitações de rede.
Evidências gratuitas, paginação e CSV
Toda verificação retorna um retrieval.report_id, incluindo verificações não salvas. IDs de pré-visualização são preview:<UUID>, locais ao processo atual do servidor. As duas últimas pré-visualizações permanecem disponíveis por 30 minutos. Uma terceira verificação, reinicialização ou expiração pode remover uma pré-visualização; reenvie o diagnóstico gratuito original. UUIDs salvos persistem no disco.
Seções report_page são records, groups, record_summaries e group_members. Siga next_offset até nulo, com limit 1–100. Páginas de grupo retornam metadados de resumo e member_count; leia todos os membros usando section: "group_members" e o group_id exato. Páginas de membros contêm registros originais completos. Registros são armazenados uma vez no relatório; grupos referem-se aos seus ids exatos de registro. Todas as páginas e exportações CSV são gratuitas, inclusive após atingir o limite de relatórios salvos.
A mensagem stdio codificada de entrada deve caber no buffer de recebimento de 10 MiB do SDK. Respostas usam um orçamento de envelope de texto escapado de 8 MiB; um relatório maior retorna uma visão geral paginada explícita com as mesmas instruções gratuitas de recuperação. Os limites atuais de 1000 linhas/texto cabem nesse orçamento em testes de transporte, incluindo citação no pior caso. CSV usa uma linha por registro em vez de repeti-lo para cada grupo. Inclui campos de origem originais, sinalizador de candidato, códigos de motivo e ids de grupo. Texto inicial semelhante a fórmula é escapado. A exportação retorna texto; nunca grava em um nome de arquivo fornecido pelo chamador. Páginas CSV podem conter menos linhas que o limite solicitado quando a citação excederia o orçamento de resposta. Siga o next_offset real até nulo; returned sempre conta as linhas nessa página. Cada página CSV repete seu cabeçalho; mantenha um cabeçalho ao unir páginas.
Gratuito e Pro
| Recurso | Gratuito | Pro |
|---|---|---|
| Todas as verificações, registros de origem, motivos agrupados | Incluído, até 1000 registros/chamada | Igual |
| Páginas de pré-visualização e CSV | Incluído | Igual |
| Relatórios salvos simultâneos | 3 | Sem limite de contagem de relatórios |
| Armazenamento total salvo | 64 MiB | 64 MiB |
| Limites de segurança de entrada/saída, texto e pré-visualização | Mesmos limites documentados | Igual |
save: true no limite gratuito ainda retorna o diagnóstico completo e a pré-visualização gratuita com saved: false, save_error: "free_saved_report_cap" e um link de atualização. Exclua um relatório salvo para reutilizar um slot. Falhas de armazenamento também preservam diagnósticos. Pro remove apenas o limite de contagem salva; não aumenta limites de entrada, transporte, pré-visualização ou armazenamento total.
Obtenha Pro: $19 pagamento único. Todos os servidores: pacote $39. Defina MCP_LICENSE_KEY ou chame license_activate. Chaves verificam offline.
Todos os dados permanecem locais. Relatórios ficam em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/duplicate-invoice-check/. XDG_DATA_HOME deve ser absoluto e a hierarquia de diretórios não pode conter links simbólicos. Arquivos JSON privados usam gravações atômicas e bloqueios de mutação entre processos; leituras revalidam registros de origem e recalculam as evidências em vez de confiar em resultados derivados editados. A ativação de licença grava a configuração local compartilhada de licença. Gerencie você mesmo o acesso aos dados contábeis locais e os backups.
Desenvolvimento
npm run build --workspace @theluckystrike/mcp-duplicate-invoice-check
npm test --workspace @theluckystrike/mcp-duplicate-invoice-check
Compile o Docker a partir da raiz do repositório: docker build -f servers/duplicate-invoice-check/Dockerfile .. Os testes cobrem chamadas stdio reais, rejeição de esquema, escopo/Unicode/negativos zero, um oráculo independente de pares de 2000 lotes, transporte agrupado de 1000 registros, páginas e CSV, limites de salvamento entre processos, recálculo, rejeição de link simbólico/caminho e limites agregados de armazenamento. Um teste stdio local de chave assinada usa o assinante existente do operador, se presente; ele é ignorado quando esse assinante privado está ausente.