mcp-invoice
Servidor MCP gratuito e hospedado: crie faturas com linhas de impostos e IVA, gere PDFs profissionais, acompanhe o status de pagamento — a partir do Claude ou de qualquer cliente MCP.
Documentação
Gere e envie faturas a partir do Claude com um servidor MCP gratuito
Servidor MCP para geração de faturas: um gerador de faturas que pode gerar uma fatura PDF numerada com IVA para seus clientes. Faturas numeradas com linhas de imposto, renderizadas em um PDF profissional.
Funciona com Claude Desktop, Claude Code, Cursor e qualquer cliente do Model Context Protocol. Roda na sua própria máquina ou hospedado, sem necessidade de instalação.
Página do produto: https://mcp.zovo.one/s/invoice — o que faz, as ferramentas que expõe e um endpoint de token ao vivo.
Instalação
Hospedado, nada para instalar. Obtenha um token em https://mcp.zovo.one/mcp/connect (a página de conexão) ou https://mcp.zovo.one/mcp/token (o mesmo token como JSON); um token anônimo gratuito é emitido na hora e uma chave Pro funciona da mesma forma. Em seguida, aponte um cliente MCP para https://mcp.zovo.one/mcp/invoice via streamable-http e envie o token como Authorization: Bearer <token>.
Se o seu cliente não puder definir cabeçalhos, coloque o token no caminho: https://mcp.zovo.one/mcp/invoice/t/<token>. Ambas as formas funcionam. A URL simples sem token responde 401 em tools/call, então o token não é opcional.
Claude Desktop, um clique. Baixe invoice.mcpb do último lançamento e clique duas vezes nele.
A partir do código-fonte. O espelho é autocontido: cada dependência @theluckystrike/* é incluída, então um clone novo compila sem configuração extra.
git clone https://github.com/theluckystrike/mcp-invoice-generator.git
cd mcp-invoice-generator
npm install && npm run build
Em seguida, aponte seu cliente para o ponto de entrada compilado:
{
"mcpServers": {
"invoice": {
"command": "node",
"args": ["/absolute/path/to/mcp-invoice-generator/dist/index.js"]
}
}
}
@theluckystrike/mcp-invoice-generatorainda não foi publicado no npm, então um comandonpx -y @theluckystrike/mcp-invoice-generatorfalhará. Os três caminhos acima são os que funcionam e cada um é testado pela CI.

Espelho somente leitura de mcp-servers/servers/invoice. Veja MIRROR.md.
Listado no AI Product Index — endpoint remoto ao vivo em mcp.zovo.one/s/invoice, plano gratuito, sem cadastro.
Destaque no Awesome MCP Servers — listagem no diretório | endpoint hospedado ao vivo, plano gratuito, sem cadastro.
Diga "crie uma fatura para a Acme, 12 horas a 90 EUR, vencimento em 14 dias" e receba um PDF real que você pode enviar. Este servidor MCP armazena seu perfil comercial e seus clientes, aloca um número de fatura sequencial que nunca é reutilizado, calcula o subtotal, qualquer desconto, uma linha de imposto por taxa de IVA e o total em unidades monetárias inteiras, e renderiza um PDF A4 com seus dados de emissor e pagamento, uma tabela de itens com quebra de linha e um bloco de totais adequado. Ele também rastreia pagamentos e, no Pro, informa o que está vencido e por quantos dias. Tudo é armazenado em arquivos JSON simples na sua própria máquina; nada é enviado para lugar nenhum.
No Registro Oficial de MCP (io.github.theluckystrike/invoice-pdf-billing-generator).
Crie faturas numeradas com linhas de imposto e um PDF real a partir do chat, sem precisar de SaaS de faturamento.
Instalação em 60 segundos
A publicação no npm para @theluckystrike/mcp-invoice está pendente. Até lá, o pacote de um clique .mcpb ou um clone+compilação
é o caminho que funciona, ambos verificados abaixo.
Um clique (.mcpb): baixe invoice.mcpb do último lançamento e clique duas vezes nele no 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"]
}
}
}
O formulário npx acima começa a funcionar no momento em que o pacote é publicado. Até lá, use o pacote .mcpb acima, ou
compile a partir do código-fonte com exatamente estes três 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
Em seguida, aponte o command do seu cliente para node com um argumento: o caminho absoluto para servers/invoice/dist/index.js.
Para executar no modo Pro, defina MCP_LICENSE_KEY no mesmo bloco de configuração, ou chame license_activate uma vez com sua chave.
Ferramentas
| Ferramenta | O que faz |
|---|---|
business_set | Armazena o perfil do emissor: nome, endereço, e-mail, ID de IVA, IBAN, banco, logotipo, moeda padrão, taxa de imposto padrão, condições de pagamento, prefixo da fatura. tax_rate, vat_rate e vat são aceitos como aliases para default_tax_rate, e qualquer campo não reconhecido é reportado de volta em vez de descartado |
client_add | Adiciona ou atualiza um cliente (nome, endereço, e-mail, ID de IVA). Um registro idêntico a um já armazenado é recusado, nomeando o ID que o contém, para que o mesmo cliente não possa ser armazenado duas vezes |
client_delete | Exclui um cliente armazenado que nada utiliza. Recusado, com o documento nomeado, enquanto uma fatura, cotação, nota de crédito, ordem de compra, depósito, extrato ou agendamento recorrente ainda o referenciar |
client_list | Lista os clientes armazenados com seus IDs |
invoice_create | Cria uma fatura a partir de itens de linha; aloca o próximo número, calcula desconto, imposto por taxa e total. Os itens podem ter um currency por linha, e uma mistura é recusada em vez de cobrada como uma única moeda. Se o cliente for criado a partir de um nome simples, a resposta informa que o bloco BILL TO não tem endereço e como adicionar um |
invoice_from_hours | Atalho: cobra um cliente por N horas a uma taxa horária. target_currency + fx_rates emitem a fatura em outra moeda (você fornece a taxa); entry_ids retornam com o novo número da fatura para que as horas rastreadas possam ser fechadas com o entry_mark_billed do rastreador de tempo |
invoice_list | Lista faturas, filtradas por status, cliente e intervalo de datas de emissão |
invoice_get | Registro completo armazenado para um número de fatura |
invoice_mark_paid | Registra um pagamento total ou parcial; informa o saldo devido |
invoice_pdf | Renderiza o PDF A4 e retorna o caminho do arquivo. A resposta chama o arquivo de PDF somente quando ele é um |
overdue_report | Faturas não pagas vencidas, dias de atraso, totais pendentes por moeda. Gratuito |
license_status | Mostra o modo gratuito ou Pro |
license_activate | Ativa uma chave Pro (verificada offline) |
Recurso: invoices://open retorna todas as faturas não pagas ou parcialmente pagas como JSON.
Prompt: monthly_invoicing revisa o que está não pago e o que está vencido em um mês e, em seguida, elabora a próxima fatura.
O que você pode dizer
| Você diz | Ferramenta |
|---|---|
| "Configure meu negócio: Acme Consulting, EUR, 23% IVA, condições de 14 dias." | business_set |
| "Adicione um cliente: Beta Corp, o ID de IVA deles é..., e-mail billing@beta.example." | client_add |
| "Liste meus clientes." | client_list |
| "Remova aquele cliente duplicado Beta Corp." | client_delete |
| "Fature a Acme por 12 horas a 90 EUR mais 300 EUR de configuração, 23% IVA, PDF." | invoice_create + invoice_pdf |
| "Cobre da Beta Corp por 5 horas a 120 EUR." | invoice_from_hours |
| "Mostre todas as faturas não pagas de agosto." | invoice_list |
| "Abra a fatura INV-2026-0007." | invoice_get |
| "Marque INV-2026-0007 como paga integralmente." | invoice_mark_paid |
| "Quais faturas estão não pagas e vencidas?" | overdue_report |
| "Estou no plano gratuito ou no Pro?" | license_status |
Exemplo prático
De docs/USER_VALUE_R2.md, a solicitação exata testada de ponta a ponta e verificada de forma independente quanto à
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
A aritmética: 12 x 90 = 1080,00, mais 300,00 = 1380,00 de subtotal; 23% de 1380,00 = 317,40; total 1697,40 EUR. Cada valor no PDF e na resposta em texto carrega seu código de moeda, nada é exibido como um número simples.
Gratuito vs Pro
| Gratuito | Pro | |
|---|---|---|
| Faturas | 3 por mês civil | Ilimitadas |
overdue_report | Sim, ilimitado | Sim, ilimitado |
| Carrega a linha "Generated with mcp-invoice by theluckystrike" | Sem marca | |
| Logotipo no PDF | Não | Sim |
| Prefixo personalizado de fatura | Não, fixo INV | Sim |
| Clientes, linhas de imposto, descontos, pagamentos, multi-moeda | Sim | Sim |
O Pro custa US$ 19 únicos, ou US$ 39 para todos os servidores da coleção, vitalício.
Números e dinheiro
Os números de fatura são PREFIX-YYYY-NNNN. O contador é persistido por prefixo e ano e é gravado antes de a fatura ser armazenada, de modo que uma falha queima um número em vez de reutilizá-lo; os números existentes também são verificados para que um arquivo de dados restaurado nunca devolva um número que já esteja em um documento enviado.
Todo valor monetário impresso em qualquer lugar — preços unitários por linha, valores por linha, subtotal, desconto, cada linha de imposto, o total e o saldo devido, na resposta em texto e no PDF — carrega seu código de moeda, por exemplo EUR 1080.00. Nenhum valor é exibido como um número simples.
Todos os valores são mantidos como unidades monetárias inteiras. Quantas unidades formam uma unidade vem de uma tabela ISO 4217, não de um palpite: 2 para a maioria das moedas, 0 para JPY, KRW, VND, CLP, ISK e o restante da lista de zero decimais, 3 para BHD, IQD, JOD, KWD, LYD, OMR e TND, 4 para CLF e UYW. KWD 1.234 é 1234 unidades monetárias, não 123. A tabela é idêntica à do mcp-expense-tracker, porque os dois servidores trocam valores e uma moeda com 3 decimais em um e 2 decimais no outro reescalaria o dinheiro por dez. HUF tem 2 decimais: a ISO 4217 dá dois dígitos menores, mesmo que normalmente seja cotada sem eles. O arredondamento é por linha e depois somado: o bruto de cada linha é arredondado primeiro, um discount_percent em nível de fatura é aplicado e arredondado por linha, o imposto é calculado e arredondado por linha e depois agrupado em uma linha por taxa, e os totais são somas inteiras simples desses valores já arredondados. Um total impresso nunca pode, portanto, discordar das linhas impressas. As datas são ISO YYYY-MM-DD.
Como armazena dados
Perfil comercial, clientes, faturas e o contador de números ficam em
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/ como arquivos JSON separados, além de uma subpasta pdf/
contendo os PDFs renderizados. Toda chamada de mutação (business_set, client_add, invoice_create,
invoice_from_hours, invoice_mark_paid) é executada dentro de locked(), que obtém um arquivo de bloqueio consultivo em
.../invoice/.lock durante a chamada; é isso que torna a alocação de números segura quando duas
faturas são criadas no mesmo segundo, pois a leitura do contador, o incremento e a gravação da fatura acontecem todos
sob um único bloqueio. As gravações vão para um arquivo temporário e são renomeadas para o lugar. Para fazer backup dos seus dados de faturamento,
copie todo o diretório de dados invoice/, incluindo pdf/ se quiser também os arquivos renderizados; eles podem
sempre ser regenerados a partir dos registros armazenados com invoice_pdf.
Se um desses arquivos JSON estiver ilegível ou não for JSON válido, ele nunca é tratado como "vazio". O arquivo é
movido para o lado byte a byte como <name>.json.corrupt-<timestamp>, um marcador <name>.json.corrupt é gravado,
e toda ferramenta retorna data file is corrupt; moved to ...; nothing was written até que você restaure uma cópia boa
e exclua o marcador. Um clients.json truncado não pode mais ser silenciosamente substituído por uma lista
de clientes vazia.
Limites e ressalvas honestas
- O plano gratuito permite 3 faturas por mês civil; o contador é reiniciado no dia 1º.
overdue_reporte todo o resto (clientes, linhas de imposto, descontos, pagamentos, multi-moeda) é irrestrito no gratuito. - Clientes nunca são medidos: a lista de clientes é ilimitada no gratuito e no Pro.
client_addainda recusa um registro idêntico a um armazenado, eclient_deleteremove um cliente não utilizado, então um registro digitado incorretamente ou duplicado sempre pode ser desfeito sem uma chave de licença. Um cliente referenciado por qualquer documento não pode ser excluído. - PDFs gratuitos carregam uma pequena linha de rodapé "Generated with mcp-invoice"; o Pro a remove e adiciona um logotipo.
- Criar uma fatura para um nome de cliente que o servidor nunca viu cria esse cliente sem endereço;
a resposta informa isso e nomeia
client_addcomo a correção, mas nada impede você de enviar um PDF com um bloco BILL TO com nome simples se ignorar a observação. - Este servidor não envia e-mails, links de pagamento ou sincronização com software de contabilidade: ele produz o PDF e o registro; entregá-lo ao cliente é com você.
- A conversão de moeda não é realizada em nenhum lugar; a moeda de uma fatura é fixada na criação e cada linha deve usar valores já nessa moeda.
Solução de problemas
npxtrava ou não encontra o pacote: a publicação npm deste pacote está pendente. Use o bundle.mcpbou o caminho de clonar e compilar acima até que ele seja publicado.- Usando o bundle
.mcpb: ele instala diretamente no Claude Desktop; não há etapa de configuração separada. - Usando o caminho de clonagem: o binário do servidor é
servers/invoice/dist/index.jsapósnpm run build. Aponte ocommanddo seu cliente paranodecom esse caminho absoluto como único argumento. - Versão do Node: requer Node >= 18. Verifique com
node -v. - Moedas mistas: um item pode ter sua própria
currency. Cada linha em uma fatura deve concordar com a moeda da fatura; uma mistura é recusada e a mensagem nomeia a chamada de conversão a fazer (expense_to_invoicecomtarget_currencyefx_rates) em vez de cobrar silenciosamente uma linha em EUR sob um cabeçalho em USD. Semcurrencyna fatura, uma única moeda de item acordada torna-se a da fatura. - Sem perfil de negócios ainda: a emissão de faturas nunca é bloqueada por isso.
invoice_createeinvoice_from_hoursemitem o documento com o emissor padrão "Your business" e dizem isso em uma linha; executebusiness_set {name, address, vat_id, iban}e renderize o PDF novamente para substituí-lo. - A renderização do PDF falha ou parece errada:
invoice_pdfusapdfkit, um renderizador puro em JS sem dependência nativa, então falhas são quase sempre um campobusiness_setausente ou malformado (verifiqueinvoice_getprimeiro) em vez de um problema de ambiente. - "3 faturas este mês" atingido inesperadamente: o limite gratuito é por mês calendário em todos os clientes,
não por cliente.
invoice_listmostra o que já contou contra ele. - Nada aparece / falhas silenciosas: os logs vão apenas para stderr, nunca stdout. No Claude Desktop, verifique
Configurações -> Desenvolvedor -> o arquivo de log do servidor; no Claude Code, verifique o terminal ou
--mcp-debug.
Privacidade
Todos os dados permanecem locais, em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/. Não há chamadas de rede: chaves de licença são verificadas offline com uma chave pública compilada no pacote, e PDFs são renderizados na sua máquina.
Combina com
- mcp-time-tracker, a saída
invoice_summarylá mapeia diretamente para os itens de linhainvoice_createaqui. - mcp-spreadsheet, puxe itens de linha ou listas de clientes de uma planilha antes de faturar.
- mcp-price-tracker, fatura um cliente por algo cujo preço você rastreou.
- office-suite, todos os servidores irmãos atrás de uma instalação, uma entrada de configuração.
- Guia: Crie um PDF de fatura a partir de uma mensagem de chat com um servidor MCP
FAQ
Sim. A taxa de imposto é por item de linha. O bloco de totais imprime uma linha de imposto por taxa distinta, então uma linha de 23% e uma linha de 0% de cobrança reversa aparecem separadamente e o total soma.
É uma única página A4 com blocos de emissor e cliente, datas, uma tabela de linhas com imposto por linha, subtotal,
linhas de imposto, total e detalhes de pagamento com IBAN e referência. Adicione o endereço do cliente com client_add
primeiro, caso contrário BILL TO mostra apenas o nome.
INV-YYYY-NNNN, alocados em sequência e nunca reutilizados. O prefixo é configurável com business_set;
um prefixo diferente de INV é um recurso Pro.
Não. A renderização é local com pdfkit, e os registros de fatura vivem em
~/.local/share/mcp-servers/invoice/. O servidor não faz nenhuma chamada de rede.
Os valores são unidades inteiras de menor denominação. Cada linha é arredondada uma vez, depois as linhas são somadas, então 12 h a 90 EUR mais 300 EUR com 23% de IVA dá 1380,00 mais 317,40 = 1697,40 sem resíduo de ponto flutuante.
Construído por theluckystrike.
Um perfil de negócios para toda a suíte
Sua identidade é armazenada uma vez, em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
e cada servidor na suíte a lê: o emissor de faturas, o cabeçalho de carta do docx, o emissor
recorrente, a taxa de IVA padrão do expense-tracker, o fuso horário padrão do time-tracker e do timezone, e os
cabeçalhos de currículo e contrato. Configure uma vez com business_set (invoice ou docx) - você nunca
repete em nenhum outro lugar. Um endereço de e-mail só é obtido desse perfil ou de um
argumento explícito; quando nenhum está armazenado, os documentos mostram [add: email] e a ferramenta diz isso em vez de
deixar alguém improvisar um endereço.
Perguntas frequentes
Existe um servidor MCP gratuito para faturas?
Sim. O servidor de faturas em mcp.zovo.one é um servidor MCP gratuito para faturas: crie faturas com itens de linha com linhas de imposto e IVA a partir do Claude ou de qualquer cliente MCP, renderize um PDF profissional e acompanhe o status de pagamento. Três faturas por mês calendário são gratuitas, sem instalação necessária — você cola uma URL hospedada no seu cliente.
Como gero uma fatura a partir do Claude?
Conecte o endpoint hospedado https://mcp.zovo.one/mcp/invoice (copie a URL tokenizada de mcp.zovo.one/mcp/connect), então diga: 'Fature a Acme por 12 horas a 90 EUR com 23% de IVA, vencimento em 14 dias.' O Claude cria a fatura numerada e retorna um PDF.
Use estes documentos como um servidor MCP
Qualquer cliente MCP (Claude, Cursor, Windsurf, VS Code) pode ler a documentação deste repositório diretamente via GitMCP — sem instalação:
- URL do MCP de Documentação: https://gitmcp.io/theluckystrike/mcp-invoice