MCP Duplicate Supplier Invoice Check

Revisa localmente el historial de facturas de proveedores suministrado para detectar referencias repetidas y candidatos con igual monto/fecha, con evidencia completa y CSV gratuito.

Documentación

Servidor MCP de verificación de facturas de proveedor duplicadas

Servidor MCP para revisión de facturas de proveedor y notas de crédito duplicadas: referencias exactas y normalizadas del lote suministrado con evidencia CSV gratuita. Revise candidatos a facturas de proveedor duplicadas en el historial local suministrado.

Funciona con Claude Desktop, Claude Code, Cursor y cualquier cliente del Model Context Protocol. Se ejecuta en su propia máquina: este no tiene un endpoint alojado, así que instálelo desde el paquete o desde el código fuente.

Página del producto: https://mcp.zovo.one/s/duplicate-invoice-check — capacidades, límites gratuitos y rutas de instalación compatibles.

Pruebe la revisión editable de facturas duplicadas en su navegador antes de instalar. Los campos sintéticos se verifican localmente en su navegador sin cargas. Los candidatos requieren revisión; no son decisiones de pago.

Instalación

Claude Desktop, un clic. Descargue duplicate-invoice-check.mcpb del catálogo de paquetes y haga doble clic en él.

Desde el código fuente. El espejo es autónomo: cada dependencia de @theluckystrike/* está incluida, por lo que una clonación nueva se compila sin configuración adicional.

git clone https://github.com/theluckystrike/mcp-duplicate-invoice-check.git
cd mcp-duplicate-invoice-check
npm install && npm run build

Luego apunte su cliente al punto 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 aún no está publicado en npm, por lo que un comando npx -y @theluckystrike/mcp-duplicate-invoice-check fallará. Las tres rutas anteriores son las que funcionan y cada una es probada por CI.

duplicate-invoice-check demo

Espejo de solo lectura de mcp-servers/servers/duplicate-invoice-check. Consulte MIRROR.md.

Revise un lote suministrado de facturas de proveedor para detectar números de factura repetidos, variaciones de formato conservadoras o montos y fechas de factura idénticos. Este servidor MCP local devuelve evidencia agrupada completa y la razón exacta por la que cada registro necesita revisión. Facturas legítimas distintas pueden compartir un monto y una fecha. Los candidatos no son duplicados confirmados, puntuaciones de fraude, dinero recuperable ni decisiones de pago. No se conecta a un ERP, no lee PDF, no usa OCR ni recupera historial faltante.

Creado por theluckystrike. MIT. Soporte: support@zovo.one.

Instalación

Claude Desktop: descargue duplicate-invoice-check.mcpb v0.22.8 y ábralo. SHA-256: 181379eb6dcff3d90b55e080dd9c180f6c96802e991872865a6b0ce422b3aaea. Otros clientes pueden usar las instrucciones de código fuente a continuación.

Requiere Node.js 18 o superior y un cliente MCP. No se necesita clave API ni cuenta para uso gratuito. El paquete npm no está publicado: compile el checkout del código fuente y luego use una ruta local absoluta.

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: combine esta entrada en mcpServers en ~/Library/Application Support/Claude/claude_desktop_config.json en macOS, o %APPDATA%\Claude\claude_desktop_config.json en Windows. Reemplace /absolute/path con la ubicación del 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 en .cursor/mcp.json en su proyecto o ~/.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 con la clave de nivel superior servers:

{"servers":{"duplicate-invoice-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/duplicate-invoice-check/dist/index.js"]}}}

El agente Cascade heredado de Windsurf: combine el JSON de mcpServers de Claude Desktop en ~/.codeium/windsurf/mcp_config.json. Este archivo se aplica a Cascade; su agente más nuevo Devin Local usa una ruta de configuración diferente. El servidor independiente expone ocho herramientas.

Cline: abra su panel de Servidores MCP, pestaña Configurar, luego Configurar Servidores MCP. Agregue esta entrada al JSON de configuración (para la CLI de Cline, el archivo es ~/.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 son las seis configuraciones de cliente stdio local utilizadas por este proyecto. No hay endpoint alojado ni conector de chat de navegador. Si el cliente no puede encontrar node, reemplácelo con la ruta absoluta impresa por which node. Después de guardar, reconecte el servidor (salga y reinicie completamente Claude Desktop), llame a license_status y luego ejecute el ejemplo a continuación. Un resultado de tools/list por sí solo no verifica la verificación de candidatos.

Herramientas

HerramientaEntrada y resultado
duplicate_invoice_checkrecords, save opcional (falso); candidatos agrupados completos, recuentos únicos, evidencia de origen e id de vista previa gratuito.
report_listoffset opcional (0), limit (20, máx. 100); UUID guardados y resúmenes de recuento.
report_getid guardado; registros de origen, grupos y razones.
report_pageid guardado o de vista previa, section, offset opcional, limit (máx. 100), group_id; páginas de evidencia completas.
report_deleteid guardado; elimine un informe y reutilice su espacio de almacenamiento.
report_export_csvid guardado o de vista previa, offset opcional, limit (máx. 1000); una fila por registro de origen, razones de candidato e ids de grupo.
license_statusSin argumentos; nivel sin conexión y enlace de checkout.
license_activatekey; verifique y almacene una licencia Pro sin conexión.

Una referencia repetida y un total igual legítimo

Llame a duplicate_invoice_check con 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
}

El resultado tiene cuatro registros candidatos únicos y tres grupos. exact_reference incluye A/B a pesar de sus diferentes fechas y totales. normalized_reference incluye A/B/C y expone cada campo en conflicto. same_amount_date incluye A/D: dos servicios legítimos diferentes podrían tener la misma fecha y total, por lo que este grupo es una indicación de revisión. A aparece en tres grupos pero se cuenta una vez. No se calcula ninguna suma de pérdidas posibles. Cambiar C a INV-1 lo excluye del grupo normalizado INV001 porque los ceros iniciales siguen siendo significativos.

Contrato de entrada exacto

Suministre de 1 a 1000 registros, cada uno con record_id único, entity_id y supplier_id exactos, document_type (invoice o credit_note), invoice_number, YYYY-MM-DD invoice_date real, currency de tres letras en mayúsculas y total_minor entero seguro positivo. Los ids y números de factura tienen de 1 a 160 caracteres sin espacios circundantes ni caracteres de control. entity_label y supplier_label opcionales son texto solo de visualización, hasta 200 caracteres sin controles. Los campos desconocidos se rechazan.

Los montos son unidades menores de moneda enteras, nunca montos de punto flotante: USD 12500 significa $125.00. Los códigos de moneda se verifican por sintaxis de tres letras en mayúsculas, no contra un registro de monedas externo. Las notas de crédito usan montos absolutos positivos y se comparan solo con notas de crédito. No se agregan, convierten ni interpretan montos como pérdida financiera. Año 0000, fechas de calendario imposibles, ids de registro duplicados, dinero cero/negativo/decimal/inseguro y lotes que exceden el límite son errores de entrada.

Cada regla agrupa solo registros con (entity_id, supplier_id, document_type, currency) exactamente igual. Los ids de entidad y proveedor distinguen entre mayúsculas y minúsculas: nombres similares, ids diferentes y entidades diferentes nunca se unen. Múltiples entidades pueden aparecer en un lote, pero cada una permanece como un ámbito separado. Las etiquetas de visualización no afectan la coincidencia.

Tres reglas de igualdad se ejecutan de forma independiente:

  1. exact_reference: el número de factura original coincide exactamente, incluso cuando los montos/fechas difieren.
  2. normalized_reference: el a-z ASCII se convierte en A-Z; solo se eliminan espacio ASCII, guion, barra y punto. Los ceros iniciales, acentos, todos los caracteres Unicode, guiones bajos, espacios no separables, guiones Unicode y caracteres similares a letras/dígitos permanecen sin cambios. Las claves normalizadas vacías no colisionan.
  3. same_amount_date: el monto positivo y la fecha de factura coinciden ambos exactamente. Esto frecuentemente tiene explicaciones legítimas.

Los grupos contienen membresía completa, ámbito exacto y clave de coincidencia, una explicación y campos de origen diferentes. Son razones superpuestas independientes, no grupos de duplicados confirmados transitivos. candidate_record_count cuenta la unión una vez. no_candidates_in_supplied_batch significa que estas reglas limitadas no encontraron ninguna en los registros suministrados; no significa seguro para pagar. Historial faltante y cambios de referencia, fecha o monto pueden evadir estas reglas. Los informes guardados nunca se convierten en historial implícito entre llamadas: incluya todos los registros que desea comparar cada vez.

Los registros de origen y los grupos de informes se ordenan de forma determinista; reordenar los mismos registros de entrada produce la misma evidencia de diagnóstico. El cálculo agrupa claves en lugar de producir cada par: como máximo 3000 membresías para 1000 registros, incluida la superposición. El servidor no realiza telemetría ni solicitudes de red.

Evidencia gratuita, paginación y CSV

Cada verificación devuelve un retrieval.report_id, incluidas las verificaciones no guardadas. Los ids de vista previa son preview:<UUID>, locales al proceso del servidor actual. Las dos últimas vistas previas permanecen disponibles durante 30 minutos. Una tercera verificación, reinicio o expiración puede desalojar una vista previa; vuelva a enviar el diagnóstico gratuito original. Los UUID guardados persisten en disco.

Las secciones de report_page son records, groups, record_summaries y group_members. Siga next_offset hasta que sea nulo, con limit de 1 a 100. Las páginas de grupo devuelven metadatos de resumen y member_count; lea todos los miembros usando section: "group_members" y el group_id exacto. Las páginas de miembros contienen registros originales completos. Los registros se almacenan una vez en el informe; los grupos se refieren a sus ids de registro exactos. Todas las páginas y exportaciones CSV son gratuitas, incluso después de alcanzar el límite de informes guardados.

El mensaje stdio entrante codificado debe caber en el búfer de recepción de 10 MiB del SDK. Las respuestas usan un presupuesto de sobre de texto escapado de 8 MiB; un informe más grande devuelve una descripción general paginada explícita con las mismas instrucciones de recuperación gratuita. Los límites actuales de 1000 filas/texto caben en ese presupuesto en pruebas de transporte, incluido el citado en el peor caso. CSV usa una fila por registro en lugar de repetirlo para cada grupo. Incluye campos de origen originales, indicador de candidato, códigos de razón e ids de grupo. El texto inicial similar a fórmulas se escapa. La exportación devuelve texto; nunca escribe en un nombre de archivo proporcionado por el llamante. Las páginas CSV pueden contener menos filas que el límite solicitado cuando el citado excedería el presupuesto de respuesta. Siga el next_offset real hasta que sea nulo; returned siempre cuenta las filas en esa página. Cada página CSV repite su encabezado; conserve un encabezado al unir páginas.

Gratis y Pro

CapacidadGratisPro
Todas las verificaciones, registros de origen, razones agrupadasIncluido, hasta 1000 registros/llamadaIgual
Páginas de vista previa y CSVIncluidoIgual
Informes guardados simultáneos3Sin límite de recuento de informes
Almacenamiento total guardado64 MiB64 MiB
Límites de seguridad de entrada/salida, texto y vista previaMismos límites documentadosIgual

save: true en el límite gratuito aún devuelve el diagnóstico completo y la vista previa gratuita con saved: false, save_error: "free_saved_report_cap" y un enlace de actualización. Elimine un informe guardado para reutilizar un espacio. Los fallos de almacenamiento también preservan los diagnósticos. Pro elimina solo el límite de recuento guardado; no aumenta los límites de entrada, transporte, vista previa o almacenamiento total.

Obtenga Pro: $19 una vez. Todos los servidores: paquete de $39. Establezca MCP_LICENSE_KEY o llame a license_activate. Las claves se verifican sin conexión.

Todos los datos permanecen locales. Los informes viven bajo ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/duplicate-invoice-check/. XDG_DATA_HOME debe ser absoluto y la ascendencia del directorio no debe contener enlaces simbólicos. Los archivos JSON privados usan escrituras atómicas y bloqueos de mutación entre procesos; las lecturas revalidan los registros de origen y recalculan la evidencia en lugar de confiar en resultados derivados editados. La activación de licencia escribe la configuración de licencia local compartida. Administre usted mismo el acceso a los datos contables locales y las copias de seguridad.

Desarrollo

npm run build --workspace @theluckystrike/mcp-duplicate-invoice-check
npm test --workspace @theluckystrike/mcp-duplicate-invoice-check

Compile Docker desde la raíz del repositorio: docker build -f servers/duplicate-invoice-check/Dockerfile .. Las pruebas cubren llamadas stdio reales, rechazo de esquema, ámbito/Unicode/negativos cero, un oráculo por pares independiente de 2000 lotes, transporte agrupado de 1000 registros, páginas y CSV, límites de guardado entre procesos, recálculo, rechazo de enlaces simbólicos/rutas y límites de almacenamiento agregados. Una prueba stdio de clave firmada local usa el firmante existente del operador si está presente; se omite cuando ese firmante privado está ausente.