关于 dunning
dunning 是一款 MCP 服务,可从发票、贷项通知单和押金记录生成客户对账单并起草催款函。它按到期日统计欠款,读取数据但不修改账簿。
主要功能
- 01按客户和期间生成对账单
- 02按指定日期统计逾期账款
- 03导出文本或 A4 PDF 对账单
- 04起草友好、坚定或最终催款函
- 05按币种汇总未结余额
适用场景
- 01为客户准备账户对账单
- 02查询指定日期的逾期发票
- 03起草不额外添加费用的催款提醒
MCP 相关
它向 MCP 客户端提供对账单生成、账龄分析、导出、报告和催款工具,并提供数据源资源与催款提示词。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-statement-of-account
已收录于 官方 MCP 注册表(io.github.theluckystrike/statement-of-account)。
给客户端发送一份能回答“我到底欠你多少钱”的文件。此 MCP 服务会读取你在这套工具中已有的账簿、发票、贷项通知单和押金,并按指定期间生成对账单:期初余额、你开具的每张发票、收到的每笔付款、开出的每张贷项通知单,以及期末余额。它会将尚未结清的款项按逾期 0–30 天、31–60 天、61–90 天和超过 90 天进行账龄划分,让你一眼看出哪个客户端有问题;它可以将对账单生成为可直接粘贴的文本,或采用与发票相同样式的 A4 PDF;还可以起草催款信,语气分为友好、坚定或最终催款。它绝不会回写你的发票,也绝不会凭空捏造滞纳金。
由 theluckystrike 构建。
@theluckystrike/mcp-statement-of-account 尚未发布到 npm,因此目前运行 npx -y @theluckystrike/mcp-statement-of-account 会返回 404。在此之前,可使用 .mcpb 一键安装包,或克隆并构建。
安装
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或
%APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"statement-of-account": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-statement-of-account"]
}
}
}
Claude Code
claude mcp add statement-of-account -- npx -y @theluckystrike/mcp-statement-of-account
Cursor
~/.cursor/mcp.json(全局)或 .cursor/mcp.json(项目级),与 Claude Desktop 使用相同条目。
工具
| 工具 | 功能 |
|---|---|
statement_build | 生成单个客户端某一期间的对账单:期初余额、已开具发票、已收款项、贷项通知单、已抵扣押金和期末余额。所有金额均以最小货币单位表示并经过格式化 |
statement_aging | 截至指定日期的应收款,按逾期 0–30 天、31–60 天、61–90 天和超过 90 天分类;可查询单个客户端或所有客户端,并按币种区分 |
statement_text | 将同一份对账单生成为纯文本,按日期顺序列出各笔变动,可直接粘贴到电子邮件中 |
statement_pdf | 将同一份对账单生成为 A4 PDF,标题为 STATEMENT OF ACCOUNT,页面布局与发票和贷项通知单相同 |
dunning_text | 生成 1 级(友好)、2 级(坚定)或 3 级(最终催款)的催款信,附上逾期款项清单和银行账户信息 |
statements_report | 一次查看所有客户端:按币种列出未结款项和账龄,并显示账簿中逾期时间最长的发票 |
license_status | 查看免费版或 Pro 版状态,以及升级方式 |
license_activate | 激活 Pro 密钥 |
此外还有 statement://sources 资源,用于说明此服务能够读取三个存储源中的哪些,以及每个存储源包含多少行;还有 chase_overdue 提示词。
免费版与 Pro 版
| 免费版 | Pro 版 | |
|---|---|---|
| 生成对账单 | 每个自然月 5 份 | 不限 |
| 重新生成已生成的对账单 | 不限 | 不限 |
statement_aging | 不限 | 不限 |
statement_text | 可以 | 可以 |
dunning_text 1 级和 2 级 | 可以 | 可以 |
dunning_text 3 级(最终催款) | 不可以 | 可以 |
statement_pdf | 不可以 | 可以 |
statements_report | 不可以 | 可以 |
| PDF 页脚署名 | 显示 | 移除 |
账龄查询有意设置为免费且不限量。“谁欠我钱”是此服务存在的全部意义,隐藏这项功能的免费版只是演示,而不是工具。额度限制针对的是实际发送给客户端的对账单,并按不同对账单计数:相同客户端、期间和币种的对账单,无论重新生成多少次,都永久免费。
获取 Pro 版,一次性付费,终身使用此服务。密钥可离线验证。
数字的来源
这里没有任何数据需要重复录入。服务会读取三个存储,不会向其中任何一个写入数据:
| 存储 | 服务 | 从中获取的内容 |
|---|---|---|
invoices.json | mcp-invoice | 发票、到期日以及每张发票已支付的金额 |
credit-notes.json | mcp-billing-docs | 贷项通知单,已按负数存储 |
deposits.json | mcp-deposits | 定金的应用情况,以及仍被保留的金额 |
从未安装过的存储只会被视为不存在,报表会在不使用它的情况下生成。 如果某个存储存在于磁盘上,却无法读取,那就完全是另一回事;每项数据都会如实报告这一情况,因为无法计算的余额绝不能显示成无欠款的余额。服务唯一拒绝在缺少它时运行的存储是发票账簿。
一项经过验证的洞见
用今天的付款数据计算过去日期的账龄,不只是略有偏差,而是会悄无声息地得出空结果。 账龄的常见计算方式是“逐张发票计算,减去已付金额,再按到期日分组”。没人考虑过的是,这个减法也要按日期计算。在 test/_client.mjs 中的示例月份,按 2026-06-10 计算账龄时,两种规则得出的结果如下:
| 规则 | 未结余额 | 逾期金额 |
|---|---|---|
| 截至 2026-06-10 | 2,500.00 EUR | 500.00 EUR,逾期 31 天 |
按今天的 paid_minor 计算 | 1,700.00 EUR | 0.00 EUR |
这种简单规则少算了 800.00,占 2,500.00 欠款的三分之一;而在发票已逾期一个月的日期,它却报告没有任何逾期金额,因为两天后到账的付款已经从中扣除。这种错误难以察觉:答案看起来整齐,分组金额也能加总,而且由于输入数据不断变化,下个月就无法复现。因此,statement_aging 中的每项数据都会按所查询的日期计算,两个方向都一样:之后开具的发票不计入账簿,之后支付的款项尚未发生,之后开具的贷项通知单也尚未发出。
测量还揭示了第二点:发票上的 paid_minor 和 payments[] 不必一致,而且两者经常不一致。invoice_mark_paid 会同时写入两者,但 deposit_apply 只会增加 paid_minor,不会附加付款记录;在该字段出现之前创建的发票也没有付款记录。如果根据 payments[] 重建收款记录,示例月份 900.00 收款中就会漏掉 300.00,也就是三分之一的现金,而系统不会在任何地方报错。paid_minor 被视为权威数据,付款记录则只用于归属。
本服务遵循的规则
- 押金是一笔只流转一次的款项。 计入押金时,付款就已记入发票,因此对账单会在发票中计入这笔款项,并将其单独列为“其中:已抵扣押金”,而不会再次将其作为抵扣项。仍由本服务持有的押金款项会作为备忘项目列出,绝不会计入余额:在抵扣前,这笔钱属于客户。
- 不同币种绝不相加。 一份对账单只使用一种币种;如果客户的账单涉及两种币种,会询问客户选择哪一种。本服务没有汇率,因此将 EUR 账本和 USD 账本合并成一个数字,只会是凭空捏造。
- 到期日当天不算逾期。 发票在到期日次日才进入 0-30 天账龄区间。未结清但尚未到期的款项会列在各账龄区间旁边,既不会计入区间,也不会被隐藏。
- 贷项通知单只会冲减其指定的发票。 未结余额最低为零;超出的部分会列为未抵扣贷项,不会悄悄用来冲销客户从未同意抵扣的发票。
- 催款通知不会凭空捏造费用。 三个催款级别只在语气和期限上有所不同,除此之外没有区别。本服务不保存合同条款、法定利率或司法管辖区信息,因此任何级别都不会提及滞纳金、利率或法律费用。最不该放入虚构数字的地方,就是催款通知。
- 如果客户没有任何逾期款项,则拒绝发送催款通知,并说明哪些款项未结清但尚未到期。
隐私
所有数据都保留在你的机器上。发票、贷项通知单和押金从 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/ 中读取;本服务自行建立的对账单登记簿写入 .../mcp-servers/statement-of-account/,不会向任何地方发送数据。本服务完全不进行网络调用。许可证密钥会离线验证。
许可证
MIT。支持邮箱:[email protected]
由 theluckystrike 构建。
将这些文档用作 MCP 服务
任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此代码库的文档,无需安装:
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。