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-check ainda não está publicado no npm, portanto um comando npx -y @theluckystrike/mcp-duplicate-invoice-check falhará. Os três caminhos acima são os que funcionam e cada um é testado pelo CI.

duplicate-invoice-check demo

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

FerramentaEntrada e resultado
duplicate_invoice_checkrecords, save opcional (falso); candidatos completos agrupados, contagens únicas, evidências de origem e um id de pré-visualização gratuito.
report_listoffset opcional (0), limit (20, máx. 100); UUIDs salvos e resumos de contagem.
report_getid salvo; registros de origem, grupos e motivos.
report_pageid salvo ou de pré-visualização, section, offset opcional, limit (máx. 100), group_id; páginas de evidências completas.
report_deleteid salvo; exclui um relatório e reutiliza seu slot de armazenamento.
report_export_csvid 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_statusSem argumentos; nível offline e link de checkout.
license_activatekey; 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:

  1. exact_reference: o número de fatura original corresponde exatamente, mesmo quando valores/datas diferem.
  2. normalized_reference: a-z ASCII torna-se A-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.
  3. 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

RecursoGratuitoPro
Todas as verificações, registros de origem, motivos agrupadosIncluído, até 1000 registros/chamadaIgual
Páginas de pré-visualização e CSVIncluídoIgual
Relatórios salvos simultâneos3Sem limite de contagem de relatórios
Armazenamento total salvo64 MiB64 MiB
Limites de segurança de entrada/saída, texto e pré-visualizaçãoMesmos limites documentadosIgual

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.