关于 expenses
expenses 是一款本地 MCP 服务,可通过聊天记录商务支出、收据和里程。它支持增值税拆分、按币种汇总和导出,并可将可报销支出整理为发票行项目。
主要功能
- 01记录并分类支出
- 02将含税金额拆分为净额和增值税
- 03通过 SHA-256 哈希关联收据
- 04按地区费率记录里程
- 05按币种汇总并导出
- 06整理可开票支出
适用场景
- 01追踪项目支出和收据
- 02查看月度增值税及分类汇总
- 03导出为 CSV、xlsx 或 JSON
- 04将项目可开票支出交给 mcp-invoice
MCP 相关
向 MCP 客户端提供支出、收据、里程、汇总和导出工具,以及 `expenses://month` 资源和 `monthly_close` 提示词。它可将可开票支出整理为 `mcp-invoice` 所需格式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
在 Claude 中记录费用,使用免费的 MCP 服务
位于官方 MCP Registry(io.github.theluckystrike/expense-tracker-receipts-mileage)。
![]()
说一句“在 Adobe 花了 12.30 欧元,软件费用,可向 Acme 收费”,费用就会被记录、分类、拆分增值税,并准备好转收费用。这个 MCP 服务会在本地保存你的业务费用账本:每笔金额都以整数形式按其货币的最小单位存储;vat_rate 会将收据总额拆分为净额和增值税(用 expense_settings 设置一次,之后的每笔费用都会自动拆分,无需重复设置);商户规则会自动为新费用分类;收据通过路径和 sha256 附加,以便审计时证明文件未被更改;商务出行则依据内置里程费率表计价。摘要会按类别、项目、月份或商户分组,始终按货币分别统计,绝不混合。它支持导出为 CSV、xlsx 或 JSON;expense_to_invoice 会将项目中可转收的费用按 invoice_create 所需的确切明细项格式交给 mcp-invoice。所有内容都存储在你自己设备上的纯 JSON 文件中,不会上传到任何地方。
在聊天中记录收据和里程、拆分增值税,并将费用转收到发票上,无需使用费用 SaaS。
60 秒安装
在 Claude Desktop 中使用 expense-tracker.mcpb v0.22.9。已发布的校验和和按版本整理的下载目录可用于确认确切的发行版本。npm 包尚未发布。
如需从源代码安装,请使用 Node.js 22 或更高版本,并先构建共享依赖:
git clone https://github.com/theluckystrike/mcp-servers.git
cd mcp-servers
npm ci
node scripts/bootstrap-timezone.mjs
npm run build -w packages/mcp-license -w servers/expense-tracker
将此条目合并到 Claude Desktop 的 mcpServers 中,或合并到 Cursor 的 .cursor/mcp.json 中。将绝对路径替换为你的检出目录:
{
"mcpServers": {
"expense-tracker": {
"command": "node",
"args": ["/absolute/path/mcp-servers/servers/expense-tracker/dist/index.js"]
}
}
}
对于 Claude Code:
claude mcp add expense-tracker -- node /absolute/path/mcp-servers/servers/expense-tracker/dist/index.js
要在 Pro 模式下运行,请在同一配置块中设置 MCP_LICENSE_KEY,或使用你的密钥调用一次 license_activate。
工具
| 工具 | 功能说明 |
|---|---|
expense_add | 记录一笔支出:金额、币种、类别、商家、日期、项目、备注、收据路径、可计费标记和 VAT 税率。如果类别为空,则根据商家规则自动填入。billable 的默认值为:提供了 project 时为 true,否则为 false;响应中始终会说明采用了哪个值 |
expense_settings | 读取或设置 expense_add 在调用未指定以下默认值时使用的设置:default_vat_rate、default_currency |
expense_list | 列出指定日期范围内的支出,可按项目、类别或是否可计费筛选,并按币种汇总 |
expense_update | 按 ID 更改已存储支出的任意字段。rebilled: false 会清除已重新计费标记和发票编号。如果支出已重新计费,则不允许修改金额、币种和 vat_rate;除非传入 unlink_rebill: true 清除重新计费关联,因为发票收取的金额可能不同 |
expense_delete | 按 ID 删除一笔支出。不会删除收据文件本身 |
receipt_attach | 将收据文件附加到一笔支出。文件必须存在;其路径和 sha256 会被存储 |
category_rules | 设置或列出商家到类别的规则。不含正则表达式元字符的匹配项会按普通子字符串处理;含有这类字符的匹配项仅在不会导致指数级回溯时才会编译,并且会拒绝类似 (a+)+ 的模式 |
expense_summary | 按类别、项目、月份或商家分组汇总指定范围内的支出,按币种显示总额、净额和 VAT |
mileage_add | 记录以 km 或英里为单位的行程,并根据费率表(或自定义费率)计算金额 |
expense_export | 将指定范围写入 csv、xlsx 或 json 文件,并返回路径。绝不会写入不完整的文件 |
expense_to_invoice | 将项目中尚未开票的可计费支出预览为 invoice_create 行项目,按币种分组,并可选择加价和指定 assume_vat_rate。传入 target_currency + fx_rates 可将所有币种合并到一个分组。如果没有匹配项,则返回 count: 0、不包含 fx_note,并给出明确原因。绝不会标记任何项目为已重新计费 |
expense_mark_rebilled | 发票创建后,按 ID 或按项目、日期范围和 currency 将支出标记为已重新计费。必须提供 invoice_number |
license_status | 显示免费模式或 Pro 模式 |
license_activate | 激活 Pro 密钥(离线验证) |
资源:expenses://month 返回当前日历月份按类别分组、按币种统计的总额。
提示词:monthly_close 会逐项检查当月总额、尚未开票的可计费支出,以及尚未附加收据的支出。
里程费率
该表为每个地区列出一个统一费率。每一行都是基于明确假设的近似值,并非税务计算结果:
| 地区 | 费率 | 单位 | 货币 | 假设条件 |
|---|---|---|---|---|
| PL | 1.15 | km | PLN | 排量超过 900 cm3 的汽车。波兰对排量不超过 900 cm3 的汽车规定上限为 PLN 0.89/km,摩托车和轻便摩托车另有费率 |
| UK | 0.45 | mile | GBP | 汽车,且处于该纳税年度前 10,000 个商务里程内。超过此门槛后,HMRC 支付的费率较低;摩托车和自行车也适用不同费率 |
| US | 0.70 | mile | USD | IRS 某一日历年的商务标准费率。IRS 每年会重新发布该费率,也曾在年中调整 |
| EU | 0.30 | km | EUR | 通用的每公里补贴。欧盟没有统一费率;各成员国自行制定费率 |
这些数字背后有意不设年份、车辆或门槛表:看起来权威却已过时一年的表格,不如明确说明自身局限的表格。每条 mileage_add 回复都会注明所用费率并重申这一限制,例如 (table rate PL 1.15 PLN/km, an approximation; pass rate_per_km for your exact scheme)。
未提供 region 时,英里使用 US 费率,公里使用 EU 费率。rate_per_km 会针对你传入的单位,用自定义费率覆盖表格费率;这是申报精确方案(发动机排量等级、年中调整的费率、超过 10,000 英里的档位)的受支持方式。currency 只有在同时传入 rate_per_km 时才会被接受:表格费率以其自身货币报价,而将 PLN 1.15/km 重新标为 EUR 1.15/km 并不会进行任何换算,反而会记入约 4 倍于实际成本的金额,因此此类调用会被拒绝。
与集合中其他工具配合使用
expense_to_invoice 会返回 {description, quantity, unit_price, tax_rate} 对象,恰好对应 mcp-invoice 所接受的 items 数组。unit_price 是未税金额,tax_rate 是费用中记录的 VAT 税率,因此发票会重新计算相同的税额,而不是重复收费;行项目总额最终会与收据上的含税金额一致。如果再次舍入税额无法还原该含税金额(EUR 0.03 按 23% 计算会拆分为 0.02 + 0.01,但 0.02 按 23% 计税后舍入为 0.00),那么若将 unit_price 微调 1 分即可使发票金额完全吻合,就会进行这一调整;否则该组会附带一条醒目的 [rounding adjustment ...] 行,且 tax_rate: 0;rounding_adjustment_lines 会统计这类行数。
多币种
一张发票只对应一种币种,因此一周内的 USD 工时、EUR 收据和 GBP 里程费会分成三组。若要生成一张发票,请提供目标币种和你自己的汇率:
expense_to_invoice {project: "Nova", from: "2026-09-01", to: "2026-09-07",
target_currency: "USD", fx_rates: {"EUR": 1.08, "GBP": 1.27}}
fx_rates 的含义是“1 单位该币种 = X 单位的 target_currency”。每一行都会转换,并返回一组结果;每条转换后的明细也会注明转换信息:... [converted from EUR 12.40 at 1.08]。此处不会获取或虚构汇率;如果某种币种没有汇率,系统会明确指出该币种并拒绝处理。如果没有提供 fx_rates,对于包含多种币种的范围,系统会返回确切的调用方式,而不是让你自己推算。
存储的 vat_rate 为 0 表示税率为零,而不是缺失:免税收据仍然免税。未记录税率的支出按含税金额保存,并原样重新计费,同时设置 tax_rate: 0,并在说明中注明 tax_rate: 0 (VAT unknown, gross rebilled as-is; pass assume_vat_rate to split),这样发票上的默认税率就不会对收据重复征税。expense_settings 默认值会在支出录入时应用,不会在重新计费时追溯应用:之后更改默认值,不得改变该默认值设立之前录入的收据的税务含义。若仍要拆分这些较早的明细,请在 expense_to_invoice 调用中明确传入 assume_vat_rate,明细会标记为 [vat assumed 23%]。
该调用不会将任何支出标记为已重新计费,也没有选项可以这样做:先创建发票,再调用 expense_mark_rebilled,并且必须提供 invoice_number。由于一张发票只对应一种币种,结果会按币种分组,每组都有自己的 expense_ids,你需要传入其中一组。按 ID 标记是最精确的方式;按项目和日期范围标记时还必须提供 currency,且只会处理其中可计费、尚未重新计费的支出,因此为 EUR 组开票不会标记 PLN 组。mcp-time-tracker 为同一项目的工时开票;此服务为项目产生的费用开票。
Free 与 Pro
| Free | Pro | |
|---|---|---|
| 记录支出、里程和收据 | 不限 | 不限 |
expense_list 和 expense_summary | 最近 30 天 | 完整历史记录 |
| 项目 | 3 个 | 不限 |
| 类别规则 | 5 条 | 不限 |
| CSV 和 JSON 导出 | 最多 200 行 | 不限 |
| xlsx 导出 | 否 | 是 |
expense_to_invoice | 每次最多 20 项,包含 markup_percent | 不限 |
| 多币种、增值税拆分、收据哈希 | 是 | 是 |
达到限制时,系统绝不会写入不完整文件,也不会静默截断:导出会被拒绝,磁盘上不会留下任何文件,并且工具会说明需要缩小哪些范围。
Pro 为一次性付费 $19,或支付 $39 即可用于合集中的所有服务,均为终身授权。
数字与金额
每笔金额都是以支出自身币种计量的最小货币单位整数,所有显示的金额都带有币种代码,例如 EUR 61.50。每个货币单位包含多少最小货币单位,依据 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-invoice 使用同一张表,因为两个服务会交换金额。此处 HUF 使用 2 位小数:ISO 4217 将其规定为两位最小货币位数,尽管通常报价时会省略小数。
记录的金额是收据上的含税总额。vat_rate 会对增值税而非未税金额进行四舍五入拆分:vat = round(gross * rate / (100 + rate)),net = gross - vat,因此未税金额加增值税始终恰好等于总额,半分的增值税会进位,而不会被舍去(23% 税率下,EUR 0.03 拆分为未税金额 0.02 加增值税 0.01)。汇总会在同一币种内累加每笔支出已四舍五入的金额;不同币种不会相加,也不会转换。里程费用按费率所用币种计算,金额为 round(distance * rate)。日期采用 ISO 格式 YYYY-MM-DD。
隐私
如果 data.json 无法读取或不是有效的 JSON 文件,它不会被视为“尚无支出”。该文件会按字节原样移至 data.json.corrupt-<timestamp>,并写入 data.json.corrupt 标记。在你恢复有效副本并删除该标记之前,所有工具都会返回 data file is corrupt; moved to ...; nothing was written,因此截断的文件绝不会被空数据库覆盖。
所有数据都保留在本地,存放于 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/expense-tracker/。不会发起任何网络调用:收据会在你的机器上进行哈希处理,导出文件会写入你的机器,许可证密钥则使用编译进软件包的公钥离线验证。
由 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 上的 expense-tracker 服务是一款免费的 MCP 支出追踪器:你可以通过 Claude 或任何 MCP 客户端记录支出,并填写类别、金额和日期,然后列出或导出记录。免费套餐,远程托管端点,无需安装。
如何通过 Claude 记录支出?
连接 https://mcp.zovo.one/mcp/expense-tracker(从 mcp.zovo.one/mcp/connect 获取带令牌的 URL),然后说:“记录一笔 42.50 EUR 的客户午餐费用,类别为餐饮。”该条目会优先存储在你本地的机器上。
将这些文档用作 MCP 服务
任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此仓库的文档,无需安装:
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。