mcpField
F
freelance-invoice

freelance-invoice

远程服务
mcp.zovo.one金融数据21 天前更新

关于 freelance-invoice

freelance-invoice 是用于创建带编号发票的 MCP 服务,支持税额计算和 A4 PDF。它还管理客户和付款,面向自由职业者及小型企业,业务与发票数据保存在本地。

主要功能

  1. 01创建带编号和税额明细的发票
  2. 02管理企业资料和客户
  3. 03生成 A4 发票 PDF
  4. 04记录全额或部分付款
  5. 05跟踪逾期发票和未付余额
  6. 06支持多种币种

适用场景

  1. 01为客户准备含增值税的发票
  2. 02生成可发送的发票 PDF
  3. 03记录部分或全额付款
  4. 04查看逾期发票和未付余额

MCP 相关

向 MCP 客户端提供发票、客户和付款工具、未付款发票资源及月度开票提示词。客户端可创建和查询发票、记录付款并查看逾期余额。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.zovo.one/mcp/freelance-invoice
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.zovo.one/mcp/freelance-invoice需要授权
安装包
mcpbinvoice.mcpb0.21.0

工具

13
参数类型必填说明
vatnumber否default_tax_rate 的别名
bankstring否银行名称 / BIC
ibanstring否用于收款的 IBAN 或账号
namestring是您的企业或自由职业者名称
emailstring否您自己的电子邮件地址。除非用户提供了该地址,否则请勿填写:任何服务都不会从此资料或显式参数以外的来源填入电子邮件地址
phonestring否您自己的电话号码。与电子邮件地址规则相同:仅在用户提供时填写
vat_idstring否VAT / 税务登记号
addressstring否邮寄地址,可包含换行符
tax_ratenumber否default_tax_rate 的别名
timezonestring否您所在的 IANA 时区,例如 Europe/Warsaw。与 time-tracker(条目会使用该时区标记时间)和 timezone(您的本拠时区)共享
vat_ratenumber否default_tax_rate 的别名
logo_pathstring否PNG 或 JPG 格式徽标的路径(Pro)
invoice_prefixstring否发票编号前缀,默认为 INV(自定义前缀需 Pro)
default_currencystring否ISO 代码,例如 EUR、USD、JPY。默认为 EUR
default_tax_ratenumber否适用于未单独设置税率项目的默认 VAT 百分比
payment_terms_daysnumber否默认到期天数。默认为 14

详细介绍

使用免费 MCP 服务从 Claude 生成并发送发票

收录于 AI Product Index——提供可实时使用的远程端点 mcp.zovo.one/s/invoice,免费版,无需注册。

入选 Awesome MCP Servers——目录条目 | 实时托管端点,免费版,无需注册。

说一句“给 Acme 开一张发票,12 小时,每小时 90 EUR,14 天后到期”,就能获得一份可发送的真实 PDF。此 MCP 服务会保存你的业务资料和客户,分配永不重复的连续发票编号,以整数最小货币单位计算小计、折扣(如有)、每个 VAT 税率对应的一行税额及总计,并生成 A4 PDF,其中包含开票方和付款详情、可换行的项目表格及规范的总计区块。它还会跟踪付款,并在 Pro 版中报告逾期情况及逾期天数。所有数据都以纯 JSON 文件的形式保存在你自己的计算机上;不会上传到任何地方。

已收录于官方 MCP Registry(io.github.theluckystrike/invoice-pdf-billing-generator)。

发票演示

在聊天中创建带编号和税额明细的发票,并生成真实 PDF,无需发票 SaaS。

60 秒安装

@theluckystrike/mcp-invoice 的 npm 发布尚未完成。在此之前,可使用 .mcpb 一键安装包,或克隆并构建; 以下两种方式均已验证。

一键安装(.mcpb):从最新版本下载 invoice.mcpb,并在 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"]
    }
  }
}

上述 npx 方式将在软件包发布后立即可用。在此之前,请使用上面的 .mcpb 安装包,或使用以下三个命令从源码构建:

git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/invoice

然后将客户端的 command 指向 node,并传入一个参数:servers/invoice/dist/index.js 的绝对路径。

如需在 Pro 模式下运行,请在同一配置块中设置 MCP_LICENSE_KEY,或使用密钥调用一次 license_activate。

工具

工具功能
business_set保存开票方资料:名称、地址、邮箱、VAT id、IBAN、银行、徽标、默认货币、默认税率、付款期限、发票前缀。tax_rate、vat_rate 和 vat 可作为 default_tax_rate 的别名;任何无法识别的字段都会反馈给你,而不会被丢弃
client_add添加或更新客户端(名称、地址、邮箱、VAT id)。如果记录与已有记录完全相同,则会拒绝添加并指出保存该记录的 id,因此同一客户端不会被重复保存
client_delete删除没有任何内容引用的已保存客户端。如果发票、报价单、贷项通知单、采购订单、定金、对账单或定期计划仍引用该客户端,则会拒绝删除并指出相关单据
client_list列出已保存的客户端及其 id
invoice_create根据明细项创建发票;分配下一个编号,并计算折扣、各税率对应的税额和总额。明细项可带有逐项设置的 currency;如果货币混用,则会拒绝将其作为单一货币开票。如果客户端是通过一个单独的名称创建的,响应会说明 BILL TO 区块没有地址,并告知如何添加地址
invoice_from_hours快捷操作:按小时费率向一个客户端收取 N 小时的费用。target_currency + fx_rates 可将发票开为其他货币(汇率由你提供);entry_ids 会随新发票编号一并返回,以便使用时间跟踪器的 entry_mark_billed 将已跟踪工时标记为已开票
invoice_list列出发票,可按状态、客户端和开具日期范围筛选
invoice_get获取一个发票编号对应的完整已保存记录
invoice_mark_paid记录全额或部分付款;反馈应付余额
invoice_pdf生成 A4 PDF 并返回文件路径。只有在文件确实为 PDF 时,响应才会将其称为 PDF
overdue_report列出逾期未付发票、逾期天数,以及按货币统计的未结总额。免费
license_status显示免费模式或 Pro 模式
license_activate激活 Pro 密钥(离线验证)

资源:invoices://open 以 JSON 格格式返回所有未付款或部分付款的发票。

提示词:monthly_invoicing 会检查一个月内未付款和逾期的项目,然后起草下一张发票。

你可以这样说

你说工具
“设置我的企业资料:Acme Consulting,EUR,23% VAT,付款期限 14 天。”business_set
“添加客户端:Beta Corp,其 VAT id 是……,邮箱是 [email protected]。”client_add
“列出我的客户端。”client_list
“删除那个重复的 Beta Corp 客户端。”client_delete
“为 Acme 开具发票:12 小时,每小时 90 EUR,另加 300 EUR 的设置费,23% VAT,生成 PDF。”invoice_create + invoice_pdf
“按每小时 120 EUR 的费率向 Beta Corp 收取 5 小时费用。”invoice_from_hours
“显示 8 月的所有未付款发票。”invoice_list
“调出发票 INV-2026-0007。”invoice_get
“将 INV-2026-0007 标记为已全额付款。”invoice_mark_paid
“哪些发票未付款且已逾期?”overdue_report
“我使用的是免费版还是 Pro?”license_status

示例

摘自 docs/USER_VALUE_R2.md,这是经过端到端测试并独立核对计算结果的确切请求。

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

计算过程:12 x 90 = 1080.00,再加上 300.00,得出小计 1380.00;1380.00 的 23% = 317.40;总计 1697.40 EUR。PDF 上和文本响应中的每个金额都带有货币代码,不会只显示一个没有货币标识的数字。

免费版与 Pro

免费版Pro
发票每个日历月 3 张不限
overdue_report是,不限是,不限
PDF带有“由 mcp-invoice(theluckystrike)生成”一行无品牌标识
PDF 上的徽标否是
自定义发票前缀否,固定为 INV是
客户端、税额明细、折扣、付款、多币种是是

Pro 一次性付费 $19;若要用于集合中的每个服务,则为 $39,均为终身使用。

数字与金额

发票编号格式为 PREFIX-YYYY-NNNN。计数器按前缀和年份持久化,并在保存发票前写入,因此即使发生崩溃,也只会造成一个编号作废,而不会重复使用;系统还会扫描已有编号,因此恢复数据文件时,绝不会再次分配已出现在已发送单据上的编号。

任何位置显示的每笔金额——行项目单价、行金额、小计、折扣、每条税费、总额和应付余额,无论是在文本响应中还是在 PDF 上——都会带有货币代码,例如 EUR 1080.00。金额绝不会以裸数字形式显示。

所有金额都以整数最小货币单位存储。一个主单位对应多少个最小单位,取自 ISO 4217 表,而不是猜测:大多数货币为 2;JPY、KRW、VND、CLP、ISK 以及其他零小数位货币为 0;BHD、IQD、JOD、KWD、LYD、OMR 和 TND 为 3;CLF 和 UYW 为 4。KWD 1.234 是 1234 个最小货币单位,不是 123。该表与 mcp-expense-tracker 中的表完全一致,因为两个服务会交换金额;如果某种货币在一个服务中按 3 位小数处理,在另一个服务中按 2 位处理,金额就会缩放十倍。HUF 按 2 位小数处理:ISO 4217 规定它有两位最小货币单位数字,尽管通常报价时不带小数。舍入按行进行,然后求和:先舍入每行的含税总额,再应用发票级别的 discount_percent 并按行舍入,再计算税额并按行舍入,随后按税率合并为每个税率一行;总额则直接对这些已舍入的数值求整数和。因此,打印出的总额绝不会与打印出的各行金额不一致。日期采用 ISO YYYY-MM-DD 格式。

数据存储方式

业务资料、客户、发票和编号计数器分别存储在 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/ 下的 JSON 文件中,此外还有一个 pdf/ 子文件夹,用于存放已生成的 PDF。每个会修改数据的调用(business_set、client_add、invoice_create、 invoice_from_hours、invoice_mark_paid)都会在 locked() 中运行;该函数会在调用期间对 .../invoice/.lock 加 advisory 锁,这能确保即使两张发票在同一秒内创建,编号分配也安全,因为计数器的读取、递增和发票写入都在同一把锁下完成。数据先保存到临时文件,再重命名到目标位置。要备份开票数据,请复制整个 invoice/ 数据目录;如果也需要已生成的文件,请一并复制 pdf/。随时都可以通过 invoice_pdf 根据已存储的记录重新生成这些文件。

如果某个 JSON 文件无法读取或不是有效 JSON,系统绝不会将其视为“空文件”。文件会逐字节移至 <name>.json.corrupt-<timestamp>,并写入 <name>.json.corrupt 标记;在恢复有效副本并删除该标记之前,每个工具都会返回 data file is corrupt; moved to ...; nothing was written。截断的 clients.json 不会再被悄悄替换成空客户列表。

限制与如实说明

  • 免费套餐每个自然月最多可开具 3 张发票;计数器会在每月 1 日重置。overdue_report 以及其他所有功能(客户、税项、折扣、付款、多币种)在免费套餐中均不受限制。
  • 客户数量永不设限:免费套餐和 Pro 套餐中的客户列表均不设上限。client_add 仍会拒绝与已有记录完全相同的记录,client_delete 则会删除未被使用的客户,因此即使没有许可证密钥,输入错误或重复的记录也始终可以撤销。任何文档引用的客户都无法删除。
  • 免费版 PDF 会带有一行小字页脚“Generated with mcp-invoice”;Pro 版会移除这行文字并添加徽标。
  • 为服务器从未见过的客户名称创建发票时,系统会创建一个没有地址的客户;响应会说明这一点,并指出可通过 client_add 修正,但如果你忽略提示,仍可发送 BILL TO 区块只有姓名的 PDF。
  • 此服务不提供邮件发送、付款链接和会计软件同步功能:它只生成 PDF 和记录;如何将其交付给客户由你决定。
  • 系统不会在任何地方进行货币转换;发票的货币在创建时即固定,每一项都必须使用该货币下的金额。

故障排除

  • npx 卡住或无法找到软件包:此软件包的 npm 发布仍在等待中。在发布完成之前,请使用 .mcpb 捆绑包或上述克隆并构建的方式。
  • 使用 .mcpb 捆绑包:它会直接安装到 Claude Desktop 中;无需单独进行配置。
  • 使用克隆方式:运行 npm run build 后,服务器二进制文件位于 servers/invoice/dist/index.js。将客户端的 command 指向 node,并将该绝对路径作为唯一参数。
  • Node 版本:需要 Node >= 18。使用 node -v 检查。
  • 混合货币:项目可以带有自己的 currency。同一张发票上的每一项都必须与发票货币一致;如果混用货币,系统会拒绝并提示需要调用的转换工具(expense_to_invoice,并指定 target_currency 和 fx_rates),而不会在 USD 标题下悄悄开具 EUR 项目。如果发票没有设置 currency,则所有项目一致的单一货币会成为发票货币。
  • 尚未设置企业资料:这不会阻止开具发票。invoice_create 和 invoice_from_hours 会使用占位发行方“Your business”签发文档,并用一行文字说明;运行 business_set {name, address, vat_id, iban} 并重新生成 PDF,即可替换占位信息。
  • PDF 渲染失败或显示异常:invoice_pdf 使用 pdfkit,这是一个纯 JS 渲染器,没有原生依赖,因此故障几乎总是由 business_set 字段缺失或格式错误导致(请先检查 invoice_get),而非环境问题。
  • 意外触发“本月 3 张发票”的限制:免费版上限按自然月计算,适用于所有客户,而非单个客户。invoice_list 可显示已计入上限的发票。
  • 没有内容显示 / 静默失败:日志只会写入 stderr,绝不会写入 stdout。在 Claude Desktop 中,检查 Settings -> Developer -> 服务器的日志文件;在 Claude Code 中,检查终端或 --mcp-debug。

隐私

所有数据都保存在本地,路径为 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/。系统不会进行网络调用:许可证密钥由编译进软件包的公钥离线验证,PDF 也在你的计算机上生成。

搭配使用

FAQ

可以。税率按行项目计算。总计部分会为每个不同的税率打印一行税费,因此,23% 的行项目 和 0% 的反向征税行项目会分别显示,最终总额也会正确相加。

这是单页 A4 发票,包含开具方和客户信息区块、日期、含逐行税费的明细表、小计、 税费明细、总计,以及含 IBAN 和付款参考号的付款详情。请先用 client_add 添加客户地址,否则「账单接收方」只会显示姓名。

INV-YYYY-NNNN,按顺序分配且绝不重复使用。前缀可通过 business_set 配置;使用 INV 以外的前缀需要 Pro 功能。

不需要。PDF 在本地使用 pdfkit 生成,发票记录保存在 ~/.local/share/mcp-servers/invoice/。该服务完全不会发起网络请求。

金额以整数最小货币单位存储。每行只舍入一次,然后再将各行相加,因此,12 小时 × 90 EUR 加上 300 EUR,按 23% VAT 计算,结果为 1380.00 + 317.40 = 1697.40,不会出现浮点数误差。

由 theluckystrike 构建。

整个套件共用一个企业资料

您的身份信息只需存储一次,路径为 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json, 套件中的每个服务都会读取这些信息:发票开具方、docx 信笺抬头、定期发票开具方、expense-tracker 的默认 VAT 税率、time-tracker 和 timezone 的本地区域,以及简历和合同的信笺抬头。使用 business_set(invoice 或 docx)设置一次即可——无需在其他任何地方重复设置。电子邮件地址只会从该资料或明确提供的参数中读取;如果没有存储电子邮件地址,文档会显示 [add: email],工具也会明确提示,而不会让任何人自行编造地址。

常见问题

有没有免费的发票 MCP 服务?

有。mcp.zovo.one 上的发票服务是免费的发票 MCP 服务:您可以通过 Claude 或任何 MCP 客户端创建含税费和 VAT 明细的行项目发票、生成专业 PDF 并跟踪付款状态。每个日历月可免费创建 3 张发票,无需安装——只需将托管 URL 粘贴到您的客户端中。

如何通过 Claude 生成发票?

连接托管端点 https://mcp.zovo.one/mcp/invoice(从 mcp.zovo.one/mcp/connect 复制带令牌的 URL),然后输入:「为 Acme 开具发票,12 小时,每小时 90 EUR,VAT 税率为 23%,14 天后到期。」Claude 会创建带编号的发票并返回 PDF。

将这些文档用作 MCP 服务

任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此代码库的文档,无需安装:

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。