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

invoice demo

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

FerramentaO que faz
business_setArmazena 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_addAdiciona 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_deleteExclui 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_listLista os clientes armazenados com seus IDs
invoice_createCria 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_hoursAtalho: 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_listLista faturas, filtradas por status, cliente e intervalo de datas de emissão
invoice_getRegistro completo armazenado para um número de fatura
invoice_mark_paidRegistra um pagamento total ou parcial; informa o saldo devido
invoice_pdfRenderiza o PDF A4 e retorna o caminho do arquivo. A resposta chama o arquivo de PDF somente quando ele é um
overdue_reportFaturas não pagas vencidas, dias de atraso, totais pendentes por moeda. Gratuito
license_statusMostra o modo gratuito ou Pro
license_activateAtiva 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ê dizFerramenta
"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

GratuitoPro
Faturas3 por mês civilIlimitadas
overdue_reportSim, ilimitadoSim, ilimitado
PDFCarrega a linha "Generated with mcp-invoice by theluckystrike"Sem marca
Logotipo no PDFNãoSim
Prefixo personalizado de faturaNão, fixo INVSim
Clientes, linhas de imposto, descontos, pagamentos, multi-moedaSimSim

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_report e 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_add ainda recusa um registro idêntico a um armazenado, e client_delete remove 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_add como 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

  • npx trava ou não encontra o pacote: a publicação npm deste pacote está pendente. Use o bundle .mcpb ou 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.js após npm run build. Aponte o command do seu cliente para node com 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_invoice com target_currency e fx_rates) em vez de cobrar silenciosamente uma linha em EUR sob um cabeçalho em USD. Sem currency na 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_create e invoice_from_hours emitem o documento com o emissor padrão "Your business" e dizem isso em uma linha; execute business_set {name, address, vat_id, iban} e renderize o PDF novamente para substituí-lo.
  • A renderização do PDF falha ou parece errada: invoice_pdf usa pdfkit, um renderizador puro em JS sem dependência nativa, então falhas são quase sempre um campo business_set ausente ou malformado (verifique invoice_get primeiro) 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_list mostra 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

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: