关于 tiedout
tiedout 是面向小企业、自由职业者和簿记人员的 MCP 服务与命令行工具,用于核对银行和发票 CSV。它通过精确计算按可信程度和原因分类结果;命令行处理在本机完成。
主要功能
- 01匹配银行 CSV 与发票或账单
- 02按确定程度分类并说明原因
- 03识别可能的重复付款
- 04读取多种 CSV 格式和列名
- 05在本机运行且无需联网
适用场景
- 01核对客户付款与发票
- 02将对外付款与供应商账单匹配
- 03查找未匹配交易和可能的重复付款
MCP 相关
提供核对两个 CSV 文件以及查看检测到的列和行数的工具。通过 MCP 发送的核对结果包含文件中的名称和金额,并会返回给 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mode | enum | 否 | receivable 表示将收款与客户发票匹配;payable 表示将付款与账单匹配receivable | payable |
| limit | integer | 否 | 每组的最大项目数。0 表示仅返回摘要 |
| bank_path | string | 是 | 银行对账单 CSV 的路径 |
| date_format | enum | 否 | 仅当工具报告日期存在歧义时才需要dmy | mdy |
| window_days | integer | 否 | 对于没有发票编号的匹配,付款在发票日期之后多少天内仍可计为匹配 |
| bank_columns | object | 否 | 检测失败时的列名,例如 {"date":"Posted","amount":"Value"} |
| invoices_path | string | 是 | 发票或账单 CSV 的路径 |
| invoice_columns | object | 否 | 列名;检测失败时使用,例如 {"number":"Doc","amount":"Gross"} |
详细介绍
tiedout:CSV 文件的银行对账
将银行对账单与发票或账单进行匹配,计算精准,不必将账目上传到任何地方。适用于小型企业、自由职业者和簿记员。
手动核对付款很慢,让 AI 模型比较较长的 CSV 文件又容易出现计算错误。tiedout 通过代码进行匹配,并将每一行归类为已匹配、可能匹配、待审核或未匹配,同时说明原因。人或 Agent 只需检查例外情况即可。它既是 MCP 服务,也是一个 CLI,无需账户、API 密钥,也不会访问网络。
它适用于任何能导出 CSV 的银行或开票工具。它可以读取标题行、页脚、分开的贷方和借方列、分号、小数逗号、日优先日期,以及多种语言的列名。
可以向你的 Agent 提出什么要求
- “这是我的银行导出文件和发票。谁已经付款了?”
- “哪些客户还欠我钱?”
- “将这些供应商账单与我的银行对账单进行匹配。”
- “有没有重复付款,或没有对应发票的付款?”
安装
作为 Claude Code 插件安装,它会添加 MCP 服务和一项技能,告知 Claude 何时使用该服务:
claude plugin marketplace add GillMacedo/tiedout
claude plugin install tiedout@tiedout-marketplace
对于其他 MCP 客户端,可通过 npm 运行。需要 Node 22.19 或更高版本:
{
"mcpServers": {
"tiedout": {
"command": "npx",
"args": ["-y", "tiedout", "serve"]
}
}
}
用法
使用 examples/ 中的示例文件试用。文件中的名称都是虚构的。
$ node plugin/dist/tiedout.js match examples/bank.csv examples/invoices.csv
MATCHED (2)
2026-03-02 1200.00 TRANSFER FROM EXAMPLE SUPPLIES REF INV-1001 -> INV-1001 [invoice number and amount]
2026-03-04 450.50 PAYMENT FICTIONAL CAFE INV 1002 INV1003 -> INV-1002, INV-1003 [invoice numbers and total]
LIKELY: check these (2)
2026-03-09 975.00 SAMPLE WIDGETS ONLINE TRANSFER -> INV-1004 [amount and party name]
2026-03-16 700.00 PLACEHOLDER GARDENS -> INV-1007, INV-1008 [party name, and the amounts add up]
REVIEW: a person should decide (3)
2026-03-11 590.00 ACME TEST CO INV-1005 -> INV-1005 [names INV-1005, but short by 10.00]
2026-03-18 1200.00 TRANSFER FROM EXAMPLE SUPPLIES REF INV-1001 [names INV-1001, which is already settled: possible duplicate payment]
2026-03-12 310.00 DEPOSIT 3301 -> INV-1006 [amount only]
UNMATCHED BANK LINES (1)
2026-03-20 42.00 UNKNOWN SENDER
OPEN INVOICES (1)
INV-1009 125.00 Mock Logistics due 2026-03-28
SKIPPED bank row 12: no valid date
2 matched, 2 likely, 3 to review, 1 unmatched, 1 open invoices
使用 --payable 可将支出与账单进行匹配。不带参数运行 tiedout 可查看所有选项,包括 --json 和手动指定列名。
判定方式
| 分组 | 规则 |
|---|---|
| 已匹配 | 银行记录中提到了发票,且金额完全一致 |
| 可能匹配 | 出现了交易方名称,且金额只符合一个选项;或者该交易方的一组发票金额只有一种组合方式能凑出该金额 |
| 待审核 | 提到了发票但金额不符、可能重复、存在多种匹配结果,或只有金额而没有其他佐证 |
它绝不会在多种结果中擅自选择,也绝不会在不说明原因的情况下将某行标记为缺失。
MCP 工具
| 工具 | 功能 |
|---|---|
reconcile_match | 匹配两个 CSV 文件并返回分组,大量结果会受到数量限制 |
reconcile_inspect_csv | 显示检测到的列和行数,不包含行内容 |
这两个工具都是只读的。reconcile_match 会将文件中的名称和金额返回给 MCP 客户端,因此这些信息会传送到你使用的 AI 模型。tiedout CLI 会将所有内容保留在你的设备上。
限制
- 这有助于记账,但不构成会计建议。请先检查结果,再决定是否依赖这些结果。
- 它只读取 CSV,因此需要先转换 PDF 对账单。
- 它假设金额有两位小数,且不会转换货币。不同币种的条目永远不会匹配。
- 它会将每个文件视为未结项目的完整列表,不会在多次运行之间跟踪部分付款。
- 目前,它只在常见导出格式的模拟数据上测试过,尚未测试所有银行的实际导出文件。如果你的文件无法正常使用,请提交 issue 并附上列标题,不要附上你的数据。
常见问题
如何自动对账银行对账单和发票? 将两者导出为 CSV,然后运行 npx tiedout match bank.csv invoices.csv。匹配结果会附带原因,不确定的项目则会交由人工审核。
我的财务数据会上传吗? 该工具不含网络代码。CLI 会将所有内容保留在你的设备上。通过 MCP 使用时,结果会发送给你的客户端所使用的 AI 模型。
它支持 QuickBooks、Xero 或我的银行吗? 它读取 CSV 导出文件,而不会连接这些服务。大多数会计工具和银行都可以导出 CSV。目前尚未测试每种服务的实际导出文件。
它能匹配应付账款吗? 可以。使用 --payable 可匹配支出和账单。
参与贡献
欢迎个人以及使用 AI Agent 的贡献者参与。请参阅 CONTRIBUTING.md。适合初次参与的 issue:
- 为更多语言和会计工具添加列名称
- 添加
--out,将结果写入 CSV 以便在电子表格中使用 - 支持 OFX 和 QIF 银行文件
- 跟踪多条银行流水中的部分付款
- 添加插件图标
Pull request 的处理流程
- 提交 PR。 Fork 仓库,在分支上进行开发,并确保只包含一项更改。标题要说明用户能看到哪些变化,因为它会成为变更日志条目:
feat:会归入 Added,fix:会归入 Fixed。 - 自动检查。 代码更改需要附带测试,并且
make test必须通过。超过 30 行的更改需要关联一个已提交的 issue(Closes #<number>),PR 的更改行数不得超过 800 行。如果缺少任何内容,系统会发表评论告知需要修复的地方。 - 审核。 Claude 会自动审核每个 PR。代码 PR 还会接受安全审核,并在沙盒中进行测试。审核通过后会合并 PR,否则会要求修改。更改 CI、Agent 设置、npm 或 Python 依赖、供应商代码或构建文件的 PR 无法通过此方式合并,系统会发表评论说明原因。安全审核未通过的更改也一样。
- 发布。 影响用户安装内容的合并更改会在约两小时内发布为新版本,并附带 GitHub Release,以及项目提供的 npm 包。文档和 CI 更改会等到下一次发布。
AI 使用说明
本项目主要由 Claude Code 生成,并由维护者审核。
关于我
我是 Giulliano Macedo,在 GoTech Solutions 开发开发者工具。欢迎关注我或与我联系:
- GitHub:GillMacedo
- LinkedIn:giulliano
- X:@giumacedo
如果 tiedout 为你节省了半天时间,点个 star 能帮助更多人发现它。
采用 MIT 许可证。
由 Giulliano Macedo、GoTech Solutions 构建 · LinkedIn · X
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。