mcp-invoice-generator
Genera y envía facturas profesionales en PDF desde tu chat de IA: partidas, impuestos, fechas de vencimiento y datos del cliente en un solo comando.
Documentación
Genera y envía facturas desde Claude con un servidor MCP gratuito
Servidor MCP para generación de facturas: un generador de facturas que puede crear una factura PDF numerada con IVA para tus clientes. Facturas numeradas con líneas de impuestos, renderizadas en un PDF profesional.
Funciona con Claude Desktop, Claude Code, Cursor y cualquier cliente del Protocolo de Contexto de Modelos. Se ejecuta en tu propia máquina, o alojado sin necesidad de instalación.
Página del producto: https://mcp.zovo.one/s/invoice — qué hace, las herramientas que expone y un endpoint de token en vivo.
Instalación
Alojado, nada que instalar. Obtén un token de https://mcp.zovo.one/mcp/connect (la página de conexión) o https://mcp.zovo.one/mcp/token (el mismo token como JSON); se emite uno anónimo gratuito al instante y una clave Pro funciona de la misma manera. Luego apunta un cliente MCP a https://mcp.zovo.one/mcp/invoice a través de streamable-http y envía el token como Authorization: Bearer <token>.
Si tu cliente no puede configurar cabeceras, coloca el token en la ruta en su lugar: https://mcp.zovo.one/mcp/invoice/t/<token>. Ambas formas funcionan. La URL sin token responde 401 en tools/call, por lo que el token no es opcional.
Claude Desktop, un clic. Descarga invoice.mcpb desde la última versión y haz doble clic en él.
Desde el código fuente. El espejo es autocontenido: 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-invoice-generator.git
cd mcp-invoice-generator
npm install && npm run build
Luego apunta tu cliente al punto de entrada compilado:
{
"mcpServers": {
"invoice": {
"command": "node",
"args": ["/absolute/path/to/mcp-invoice-generator/dist/index.js"]
}
}
}
@theluckystrike/mcp-invoice-generatoraún no está publicado en npm, por lo que un comandonpx -y @theluckystrike/mcp-invoice-generatorfallará. Las tres rutas anteriores son las que funcionan y cada una está verificada por CI.

Espejo de solo lectura de mcp-servers/servers/invoice. Consulta MIRROR.md.
Listado en el Índice de Productos de IA — endpoint remoto en vivo en mcp.zovo.one/s/invoice, nivel gratuito, sin registro.
Destacado en Awesome MCP Servers — listado del directorio | endpoint alojado en vivo, nivel gratuito, sin registro.
Di "haz una factura para Acme, 12 horas a 90 EUR, vencimiento en 14 días" y obtén un PDF real que puedes enviar. Este servidor MCP almacena tu perfil de negocio y tus clientes, asigna un número de factura secuencial que nunca se reutiliza, calcula el subtotal, cualquier descuento, una línea de impuestos por cada tipo de IVA y el total en unidades menores enteras, y renderiza un PDF A4 con tus datos de emisor y pago, una tabla de artículos ajustada y un bloque de totales adecuado. También registra pagos y, en Pro, informa qué está vencido y por cuántos días. Todo se almacena en archivos JSON simples en tu propia máquina; nada se sube a ningún lugar.
En el Registro oficial de MCP (io.github.theluckystrike/invoice-pdf-billing-generator).
Crea facturas numeradas con líneas de impuestos y un PDF real desde el chat, sin necesidad de un SaaS de facturación.
Instalación en 60 segundos
La publicación en npm para @theluckystrike/mcp-invoice está pendiente. Hasta entonces, el paquete de un clic .mcpb o una clonación + compilación
es la ruta que funciona, ambas verificadas a continuación.
Un clic (.mcpb): descarga invoice.mcpb desde la última versión y haz doble clic en él en Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"invoice": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-invoice"]
}
}
}
Claude Code:
claude mcp add invoice -- npx -y @theluckystrike/mcp-invoice
(.cursor/mcp.json):
{
"mcpServers": {
"invoice": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-invoice"]
}
}
}
La forma npx anterior comienza a funcionar en el momento en que se publica el paquete. Hasta entonces, usa el paquete .mcpb anterior, o
compila desde el código fuente con exactamente estos tres comandos:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/invoice
Luego apunta el command de tu cliente a node con un argumento: la ruta absoluta a servers/invoice/dist/index.js.
Para ejecutar en modo Pro, configura MCP_LICENSE_KEY en el mismo bloque de configuración, o llama a license_activate una vez con tu clave.
Herramientas
| Herramienta | Qué hace |
|---|---|
business_set | Almacena el perfil del emisor: nombre, dirección, correo electrónico, ID de IVA, IBAN, banco, logotipo, moneda predeterminada, tasa de impuestos predeterminada, condiciones de pago, prefijo de factura. tax_rate, vat_rate y vat se aceptan como alias para default_tax_rate, y cualquier campo no reconocido se informa en lugar de descartarse |
client_add | Agrega o actualiza un cliente (nombre, dirección, correo electrónico, ID de IVA). Un registro idéntico a uno ya almacenado se rechaza, nombrando el id que lo contiene, por lo que el mismo cliente no puede almacenarse dos veces |
client_delete | Elimina un cliente almacenado que nada utiliza. Se rechaza, nombrando el documento, mientras una factura, cotización, nota de crédito, orden de compra, depósito, estado de cuenta o programa recurrente aún lo referencie |
client_list | Lista los clientes almacenados con sus ids |
invoice_create | Crea una factura a partir de artículos; asigna el siguiente número, calcula el descuento, el impuesto por tasa y el total. Los artículos pueden llevar un currency por línea, y se rechaza una mezcla en lugar de facturarse en una sola moneda. Si el cliente se crea a partir de un nombre simple, la respuesta indica que el bloque BILL TO no tiene dirección y cómo agregarla |
invoice_from_hours | Atajo: factura a un cliente por N horas a una tarifa horaria. target_currency + fx_rates emiten la factura en otra moneda (tú proporcionas la tasa); entry_ids regresan con el nuevo número de factura para que las horas rastreadas puedan cerrarse con el entry_mark_billed del rastreador de tiempo |
invoice_list | Lista facturas, filtradas por estado, cliente y rango de fechas de emisión |
invoice_get | Registro completo almacenado para un número de factura |
invoice_mark_paid | Registra un pago total o parcial; informa el saldo pendiente |
invoice_pdf | Renderiza el PDF A4 y devuelve la ruta del archivo. La respuesta llama al archivo PDF solo cuando lo es |
overdue_report | Facturas impagas vencidas, días de retraso, totales pendientes por moneda. Gratis |
license_status | Muestra el modo gratuito o Pro |
license_activate | Activa una clave Pro (verificada sin conexión) |
Recurso: invoices://open devuelve cada factura impaga o parcialmente pagada como JSON.
Prompt: monthly_invoicing revisa qué está impago y qué está vencido durante un mes, luego redacta la siguiente factura.
Lo que puedes decir
| Tú dices | Herramienta |
|---|---|
| "Configura mi negocio: Acme Consulting, EUR, 23% IVA, condiciones de 14 días." | business_set |
| "Agrega un cliente: Beta Corp, su ID de IVA es..., correo billing@beta.example." | client_add |
| "Lista mis clientes." | client_list |
| "Elimina ese cliente duplicado Beta Corp." | client_delete |
| "Factura a Acme por 12 horas a 90 EUR más 300 EUR de configuración, 23% IVA, PDF." | invoice_create + invoice_pdf |
| "Factura a Beta Corp por 5 horas a 120 EUR." | invoice_from_hours |
| "Muéstrame cada factura impaga de agosto." | invoice_list |
| "Abre la factura INV-2026-0007." | invoice_get |
| "Marca INV-2026-0007 como pagada en su totalidad." | invoice_mark_paid |
| "¿Qué facturas están impagas y vencidas?" | overdue_report |
| "¿Estoy en el plan gratuito o en Pro?" | license_status |
Ejemplo práctico
Desde docs/USER_VALUE_R2.md, la solicitud exacta probada de extremo a extremo y verificada de forma independiente contra la
aritmética.
You: Invoice Acme for 12 hours of API work at 90 EUR plus a 300 EUR setup fee,
23% VAT, due in 14 days, and give me the PDF.
invoice_create {
client: "Acme", currency: "EUR", due_days: 14,
items: [
{ description: "API work", quantity: 12, unit_price: 90, tax_rate: 23 },
{ description: "Setup fee", quantity: 1, unit_price: 300, tax_rate: 23 }
]
}
-> INV-2026-0001, client "Acme" created with no address on file
invoice_pdf { number: "INV-2026-0001" }
-> /Users/you/.../invoice/pdf/INV-2026-0001.pdf
Assistant: Created INV-2026-0001 for Acme.
API work 12 h x EUR 90.00 = EUR 1080.00
Setup fee 1 x EUR 300.00 = EUR 300.00
Subtotal EUR 1380.00
Tax 23% on EUR 1380.00 EUR 317.40
Total EUR 1697.40
Note: Acme was created from a bare name with no address. Add one with
client_add before you send this. PDF: INV-2026-0001.pdf
La aritmética: 12 x 90 = 1080.00, más 300.00 = 1380.00 de subtotal; 23% de 1380.00 = 317.40; total 1697.40 EUR. Cada cantidad en el PDF y en la respuesta de texto lleva su código de moneda, nada se muestra nunca como un número simple.
Gratis vs Pro
| Gratis | Pro | |
|---|---|---|
| Facturas | 3 por mes calendario | Ilimitadas |
overdue_report | Sí, ilimitado | Sí, ilimitado |
| Lleva la línea "Generated with mcp-invoice by theluckystrike" | Sin marca | |
| Logotipo en el PDF | No | Sí |
| Prefijo de factura personalizado | No, fijo INV | Sí |
| Clientes, líneas de impuestos, descuentos, pagos, multimoneda | Sí | Sí |
Pro es un pago único de $19, o $39 por cada servidor de la colección, de por vida.
Números y dinero
Los números de factura son PREFIX-YYYY-NNNN. El contador se persiste por prefijo y año y se escribe antes de almacenar la factura, por lo que un fallo quema un número en lugar de reutilizar uno; también se escanean los números existentes para que un archivo de datos restaurado nunca pueda devolver un número que ya está en un documento enviado.
Cada valor monetario impreso en cualquier lugar — precios unitarios por línea, importes por línea, subtotal, descuento, cada línea de impuestos, el total y el saldo pendiente, en la respuesta de texto y en el PDF — lleva su código de moneda, por ejemplo EUR 1080.00. Ningún importe se muestra nunca como un número simple.
Todos los importes se mantienen como unidades menores enteras. Cuántas componen una unidad proviene de una tabla ISO 4217, no de una suposición: 2 para la mayoría de las monedas, 0 para JPY, KRW, VND, CLP, ISK y el resto de la lista de cero decimales, 3 para BHD, IQD, JOD, KWD, LYD, OMR y TND, 4 para CLF y UYW. KWD 1.234 es 1234 unidades menores, no 123. La tabla es idéntica a la de mcp-expense-tracker, porque los dos servidores intercambian importes y una moneda que es de 3 decimales en uno y de 2 en el otro reescalaría el dinero por diez. HUF tiene 2 decimales: ISO 4217 le da dos dígitos menores aunque normalmente se cotice sin ellos. El redondeo es por línea, luego se suma: el bruto de cada línea se redondea primero, se aplica un discount_percent a nivel de factura y se redondea por línea, el impuesto se calcula y redondea por línea y luego se agrupa en una línea por tasa, y los totales son sumas enteras simples de esos valores ya redondeados. Por lo tanto, un total impreso nunca puede discrepar de las líneas impresas. Las fechas son ISO YYYY-MM-DD.
Cómo almacena los datos
El perfil de negocio, los clientes, las facturas y el contador de números viven bajo
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/ como archivos JSON separados, más una subcarpeta pdf/
que contiene los PDF renderizados. Cada llamada de mutación (business_set, client_add, invoice_create,
invoice_from_hours, invoice_mark_paid) se ejecuta dentro de locked(), que toma un archivo de bloqueo de asesoría en
.../invoice/.lock durante la duración de la llamada, esto es lo que hace segura la asignación de números cuando dos
facturas se crean en el mismo segundo, ya que la lectura del contador, el incremento y la escritura de la factura ocurren todos
bajo un solo bloqueo. Los guardados van a un archivo temporal y se renombran en su lugar. Para respaldar tus datos de facturación,
copia todo el directorio de datos invoice/, incluido pdf/ si también quieres los archivos renderizados, siempre pueden
regenerarse a partir de los registros almacenados con invoice_pdf.
Si uno de esos archivos JSON es ilegible o no es JSON válido, nunca se trata como "vacío". El archivo se
mueve a un lado byte por byte como <name>.json.corrupt-<timestamp>, se escribe un marcador <name>.json.corrupt,
y cada herramienta devuelve data file is corrupt; moved to ...; nothing was written hasta que restaures una copia
buena y elimines el marcador. Un clients.json truncado ya no puede ser reemplazado silenciosamente por una lista
de clientes vacía.
Límites y advertencias honestas
- El nivel gratuito permite 3 facturas por mes calendario; el contador se reinicia el día 1.
overdue_reporty todo lo demás (clientes, líneas de impuestos, descuentos, pagos, multimoneda) no tiene restricciones en el nivel gratuito. - Los clientes nunca se miden: la lista de clientes es ilimitada en gratuito y en Pro.
client_addaún rechaza un registro idéntico a uno almacenado, yclient_deleteelimina un cliente no utilizado, por lo que un registro mal escrito o duplicado siempre se puede deshacer sin una clave de licencia. Un cliente al que cualquier documento haga referencia no se puede eliminar. - Los PDF gratuitos llevan una pequeña línea de pie de página "Generated with mcp-invoice"; Pro la elimina y agrega un logotipo.
- Crear una factura para un nombre de cliente que el servidor nunca ha visto crea ese cliente sin dirección;
la respuesta lo indica y nombra
client_addcomo la solución, pero nada te impide enviar un PDF con un bloque BILL TO de nombre simple si ignoras la nota. - Este servidor omite el envío de correos electrónicos, los enlaces de pago y la sincronización con software de contabilidad: produce el PDF y el registro; hacerlo llegar al cliente depende de ti.
- La conversión de moneda no se realiza en ningún lugar, la moneda de una factura se fija en la creación y cada línea debe usar importes ya en esa moneda.
Solución de problemas
npxse cuelga o no encuentra el paquete: la publicación npm de este paquete está pendiente. Usa el paquete.mcpbo la ruta de clonar y compilar indicada arriba hasta que esté disponible.- Usar el paquete
.mcpb: se instala directamente en Claude Desktop; no hay un paso de configuración separado. - Usar la ruta de clonación: el binario del servidor es
servers/invoice/dist/index.jsdespués denpm run build. Apunta elcommandde tu cliente anodecon esa ruta absoluta como único argumento. - Versión de Node: requiere Node >= 18. Compruébalo con
node -v. - Monedas mixtas: un artículo puede llevar su propio
currency. Cada línea de una misma factura debe coincidir con la moneda de la factura; una mezcla se rechaza y el mensaje indica la llamada de conversión a realizar (expense_to_invoicecontarget_currencyyfx_rates) en lugar de facturar silenciosamente una línea en EUR bajo un encabezado en USD. Si no haycurrencyen la factura, una única moneda de artículo acordada se convierte en la de la factura. - Aún no hay perfil de negocio: la facturación nunca se bloquea por esto.
invoice_createyinvoice_from_hoursemiten el documento con el emisor provisional "Your business" y lo indican en una línea; ejecutabusiness_set {name, address, vat_id, iban}y renderiza el PDF de nuevo para reemplazarlo. - El renderizado del PDF falla o se ve mal:
invoice_pdfusapdfkit, un renderizador puro en JS sin dependencia nativa, por lo que los fallos casi siempre se deben a un campobusiness_setfaltante o mal formado (revisainvoice_getprimero) más que a un problema del entorno. - "3 facturas este mes" alcanzado inesperadamente: el límite gratuito es por mes calendario en todos los clientes,
no por cliente.
invoice_listmuestra lo que ya ha contado contra él. - No aparece nada / fallos silenciosos: los registros van solo a stderr, nunca a stdout. En Claude Desktop revisa
Configuración -> Desarrollador -> el archivo de registro del servidor; en Claude Code revisa la terminal o
--mcp-debug.
Privacidad
Todos los datos permanecen locales, en ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/. No hay llamadas de red: las claves de licencia se verifican sin conexión con una clave pública compilada en el paquete, y los PDF se renderizan en tu máquina.
Se combina con
- mcp-time-tracker, la salida
invoice_summaryallí se asigna directamente a los artículos de líneainvoice_createaquí. - mcp-spreadsheet, extrae artículos de línea o listas de clientes de una hoja antes de facturar.
- mcp-price-tracker, factura a un cliente por algo cuyo precio has rastreado.
- office-suite, todos los servidores hermanos detrás de una sola instalación, una sola entrada de configuración.
- Guía: Crea un PDF de factura desde un mensaje de chat con un servidor MCP
Preguntas frecuentes
Sí. La tasa de impuesto es por artículo de línea. El bloque de totales imprime una línea de impuesto por cada tasa distinta, por lo que una línea al 23% y una línea de reversión de cargo al 0% aparecen por separado y el total suma correctamente.
Es una sola página A4 con bloques de emisor y cliente, fechas, una tabla de líneas con impuesto por línea, subtotal,
líneas de impuesto, total y detalles de pago con IBAN y referencia. Añade la dirección del cliente con client_add
primero; de lo contrario, BILL TO muestra solo el nombre.
INV-YYYY-NNNN, asignados en secuencia y nunca reutilizados. El prefijo es configurable con business_set;
un prefijo distinto de INV es una función Pro.
No. El renderizado es local con pdfkit, y los registros de facturas viven en
~/.local/share/mcp-servers/invoice/. El servidor no realiza ninguna llamada de red.
Los importes son unidades menores enteras. Cada línea se redondea una vez y luego se suman las líneas, por lo que 12 h a 90 EUR más 300 EUR con IVA al 23% da 1380.00 más 317.40 = 1697.40 sin residuo de coma flotante.
Creado por theluckystrike.
Un perfil de negocio para todo el conjunto
Tu identidad se almacena una vez, en ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
y cada servidor del conjunto la lee: el emisor de facturas, el membrete de docx, el emisor
recurrente, la tasa de IVA predeterminada de expense-tracker, la zona horaria de time-tracker y timezone, y los
membretes de currículum y contrato. Configúralo una vez con business_set (invoice o docx): nunca lo
repites en ningún otro lugar. Una dirección de correo electrónico solo se toma de ese perfil o de un
argumento explícito; cuando no hay ninguna almacenada, los documentos muestran [add: email] y la herramienta lo indica en lugar de
permitir que alguien improvise una dirección.
Preguntas frecuentes
¿Hay un servidor MCP gratuito para facturas?
Sí. El servidor de facturas en mcp.zovo.one es un servidor MCP gratuito para facturas: crea facturas con artículos de línea con impuestos y líneas de IVA desde Claude o cualquier cliente MCP, renderiza un PDF profesional y realiza un seguimiento del estado de pago. Tres facturas por mes calendario son gratuitas, sin instalación requerida: pegas una URL alojada en tu cliente.
¿Cómo genero una factura desde Claude?
Conecta el endpoint alojado https://mcp.zovo.one/mcp/invoice (copia la URL tokenizada de mcp.zovo.one/mcp/connect) y luego di: 'Factura a Acme por 12 horas a 90 EUR con IVA al 23%, vencimiento en 14 días.' Claude crea la factura numerada y devuelve un PDF.
Usa estos documentos como un servidor MCP
Cualquier cliente MCP (Claude, Cursor, Windsurf, VS Code) puede leer la documentación de este repositorio directamente a través de GitMCP, sin instalación:
- URL de documentos MCP: https://gitmcp.io/theluckystrike/mcp-invoice