关于 vendor-statement-open-items
用于财务团队的本地 MCP 服务,将供应商对账单与应付账款未结项目清单逐行比较。保留原始记录,并标出缺失项、金额或日期差异及无法安全配对的重复引用。
主要功能
- 01比较两侧未结项目
- 02标记缺失记录与差异
- 03识别重复引用歧义
- 04保留并分页查看原始证据
- 05导出逐条记录 CSV
- 06本地保存与管理报告
适用场景
- 01核对供应商对账单与应付账款导出
- 02调查金额或日期不一致
- 03审查重复发票引用
- 04导出记录用于后续检查
MCP 相关
作为本地 stdio MCP 服务,向 MCP 客户端提供对账、报告查看、分页、删除、CSV 导出及许可证管理工具。它不连接 ERP,也不读取 PDF 或批准付款。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
供应商对账单核对 MCP 服务
将收到的供应商对账单与应付账款未结项目导出数据进行比较。 找出仅在一方出现的发票或贷项通知单、未结金额或日期不一致的项目,以及无法安全配对的重复引用。本地 MCP 服务会保留每一行原始数据,并说明每项发现。它会检查两份提供的未结项目列表;不会核对期初/期末余额、匹配 付款、连接 ERP、读取 PDF 或批准付款。
由 theluckystrike 构建。MIT。支持邮箱:[email protected]。
安装前试用
在浏览器中运行免费的供应商对账单示例。 使用合成示例查看缺失项目以及金额/日期差异。 浏览器演示与此服务使用相同的比较核心。此本地服务的免费套餐无需账户或 API 密钥。 产品与安装选项。
| 你的任务 | 从这里开始 |
|---|---|
| 将供应商/供货商对账单未结项目与应付账款未结项目导出数据进行比较 | 此服务:supplier_statement_check。 |
| 查找所提供的发票历史记录中的重复发票引用 | 供应商发票重复项审核。 |
| 根据采购订单和已验收的收货记录核对发票行 | 发票三方匹配。 |
这些比较需要相关源数据。它们不会检索缺失的单据,也不会授权付款。完整诊断和 CSV 始终免费;付费升级仅会 取消已保存报告数量的限制。
安装
需要 Node.js 18 或更高版本,以及 MCP 客户端。Claude Desktop 可以打开
supplier-statement-check.mcpb v0.25.0 package。
其他客户端可以构建以下源代码。npm 包尚未发布;
npx @theluckystrike/mcp-supplier-statement-check 不是安装方式。
git clone https://github.com/theluckystrike/mcp-servers.git
cd mcp-servers
npm install
node scripts/bootstrap-timezone.mjs
npm run build --workspace @theluckystrike/mcp-license
npm run build --workspace @theluckystrike/mcp-supplier-statement-check
这些命令只会构建共享许可证依赖项和此服务。请将下方的
/absolute/path 替换为源代码检出位置。如果 MCP 客户端找不到
node,请使用其可执行文件的完整路径。
Claude Desktop:在 macOS 上合并到
~/Library/Application Support/Claude/claude_desktop_config.json 的 mcpServers 中,或在 Windows 上合并到
%APPDATA%\Claude\claude_desktop_config.json:
{"mcpServers":{"supplier-statement-check":{"command":"node","args":["/absolute/path/mcp-servers/servers/supplier-statement-check/dist/index.js"]}}}
Claude Code:
claude mcp add supplier-statement-check -- node /absolute/path/mcp-servers/servers/supplier-statement-check/dist/index.js
Cursor:合并到项目中的 .cursor/mcp.json 或 ~/.cursor/mcp.json:
{"mcpServers":{"supplier-statement-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/supplier-statement-check/dist/index.js"]}}}
VS Code:将条目放在 .vscode/mcp.json 的 servers 下:
{"servers":{"supplier-statement-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/supplier-statement-check/dist/index.js"]}}}
Windsurf 的旧版 Cascade Agent:在
~/.codeium/windsurf/mcp_config.json 中使用 Claude Desktop 的 mcpServers 条目。该文件适用于 Cascade;其他
Agent 可以使用不同的配置方式。
Cline:打开 MCP Servers、Configure、Configure MCP Servers,然后添加:
{"mcpServers":{"supplier-statement-check":{"type":"stdio","command":"node","args":["/absolute/path/mcp-servers/servers/supplier-statement-check/dist/index.js"],"disabled":false,"autoApprove":[]}}}
这些都是本地 stdio 配置。此服务没有托管端点或浏览器聊天连接器。重新连接客户端,调用
license_status,然后运行下方的示例。仅发现工具并不能验证比较结果。
工具
| 工具 | 输入和结果 |
|---|---|
supplier_statement_check | as_of、statement_records、ledger_records,以及可选的 save:false;完整证据,或带有免费预览 ID 的分页概览。 |
report_list | 可选的 offset:0、limit:20(最大值为 100);已保存的 UUID 和计数摘要。 |
report_get | 已保存的 id;经过验证的源行和重新计算的比较结果。 |
report_page | 已保存/预览的 id、section、可选的 offset、limit(最大值为 100)和 group_id;所有源证据。 |
report_delete | 已保存的 id;删除一份本地报告并释放一个已保存名额。 |
report_export_csv | 已保存/预览的 id、可选的 offset、limit(最大值为 2000);每个原始源项目对应一行的 CSV。 |
license_status | 无参数;当前离线等级和升级链接。 |
license_activate | key;验证并保存离线 Pro 许可证。 |
一项缺失记录和一笔金额不符
使用以下模拟输入调用 supplier_statement_check:
{
"as_of": "2026-10-26",
"statement_records": [
{"record_id":"S1","entity_id":"UK-1","supplier_id":"V-9","currency":"USD","document_type":"invoice","document_reference":"INV-001","document_date":"2026-10-01","outstanding_minor":12500},
{"record_id":"S2","entity_id":"UK-1","supplier_id":"V-9","currency":"USD","document_type":"invoice","document_reference":"INV-002","document_date":"2026-10-02","outstanding_minor":20000},
{"record_id":"S3","entity_id":"UK-1","supplier_id":"V-9","currency":"USD","document_type":"credit_note","document_reference":"CR-003","document_date":"2026-10-03","outstanding_minor":5000}
],
"ledger_records": [
{"record_id":"L1","entity_id":"UK-1","supplier_id":"V-9","currency":"USD","document_type":"invoice","document_reference":"INV-001","document_date":"2026-10-01","outstanding_minor":12500},
{"record_id":"L2","entity_id":"UK-1","supplier_id":"V-9","currency":"USD","document_type":"invoice","document_reference":"INV-002","document_date":"2026-10-04","outstanding_minor":19000},
{"record_id":"L4","entity_id":"UK-1","supplier_id":"V-9","currency":"USD","document_type":"invoice","document_reference":"INV-004","document_date":"2026-10-05","outstanding_minor":7000}
],
"save": false
}
结果包含四个组:一组匹配记录、一组同时存在 amount_mismatch
和 date_mismatch 的差异记录、一项仅出现在对账单中的记录,以及一项仅出现在分类账中的记录。
每一行输入记录都会保留。贷项通知单的金额为正数,不会与发票金额相抵。
不会计算余额、损失或可收回金额。
如果你在任一方的精确范围内添加另一条 INV-001,其整个组将变为 ambiguous_reference;该工具不会挑选看似合适的金额组合。
精确的输入约定和比较规则
提供一个真实的 YYYY-MM-DD as_of 日期,以及两个数组,每个数组包含 0–1000 条记录。
至少一侧必须包含一条记录。该日期声明预期的共同快照;工具无法验证导出数据的新鲜度,也不会按日期筛选行。
比较之前,请确保两个列表中的未结项目范围一致。
每条记录都必须包含 record_id、entity_id、supplier_id、三个大写字母组成的
currency、document_type(invoice 或 credit_note)、document_reference、真实的
ISO document_date,以及正的安全整数 outstanding_minor。ID 和引用长度为 1–160 个字符,且不能有首尾空格或控制字符。每侧的 ID 必须唯一;两侧可以使用相同的 ID。未知字段、无效日期、年份 0000、零/负数/小数/不安全金额以及超出上限的数组都会被拒绝。货币格式会经过检查,但不会使用外部货币列表。
金额以货币的最小单位表示:USD 12500 表示 $125.00。贷项通知单使用正的绝对未结金额,且只与其他贷项通知单比较。两侧不必使用共同的供应商名称,但 supplier_id 必须完全一致。
不同实体、供应商、货币和单据类型会分别处理。
联接键为精确的 (entity_id, supplier_id, currency, document_type, document_reference)。前导零、标点、大小写、重音符号、Unicode 形式和形似字符均会影响匹配。不会推断供应商、清理引用、贪心匹配金额、分配付款或转换货币。
| 分组状态 | 含义 |
|---|---|
matched | 两侧各有且仅有一行;键、未结金额和单据日期一致。 |
only_in_statement | 一条对账单行找不到键完全匹配的账簿行。 |
only_in_ledger | 一条账簿行找不到键完全匹配的对账单行。 |
discrepancy | 两侧各有且仅有一行共享同一个键,但金额和/或日期不同;issues 会保留这两类原因。 |
ambiguous_reference | 某个键在任一侧重复;保留所有行,不选择配对。 |
缺失行和不一致可能是导出时间或范围造成的。重复引用也可能是合理的。即使提供的列表完全一致,也不能证明供应商余额正确:两份不完整的导出数据也可能一致。状态
no_discrepancies_in_supplied_open_items 仅表示这一有限结论。
已保存的报告不会成为隐藏的跨调用历史记录;每次都要包含两个列表。
分组和行会以确定性的顺序排序。每条来源行恰好属于一个分组;引擎不会展开所有可能的记录配对。分组会按对账单/账簿侧限定来源 ID,因此两侧相同的 ID 不会覆盖证据。不会发出网络或遥测请求。
免费证据、预览和 CSV
每次检查都会返回 retrieval.report_id。未保存的预览使用 preview:<UUID>,并会在内存中保留 30 分钟,供此进程内最后两次检查使用。第三次检查、重启或过期可能会清除预览;请重新提交免费检查。已保存的 UUID 会持久化到磁盘。预览数据不会写入浏览器或文件系统。
report_page 支持 statement_records、ledger_records、groups 和 group_members。分组页面包含摘要元数据和按侧分类的成员数量。使用 section:"group_members" 和准确的 group_id 读取完整的源成员。持续读取,直到 next_offset 为 null。即使达到已保存报告数量上限,分页和 CSV 仍免费。
响应使用 512 KiB 的转义 MCP 文本信封预算。较大的报告会返回分页概览;为符合该预算,页面包含的行数可能少于请求数量。CSV 每条原始源记录占一行,包含其所属侧、原始字段、分组和原因。类似公式的文本会经过转义;JSON 源值保持不变。导出会返回 CSV 文本,绝不会写入提供的文件名,并在每页重复标题行。合并页面时只保留一个标题行。请依据实际的 returned 和 next_offset 值,而不要假设返回了请求数量的记录。
免费版和 Pro
| 功能 | 免费版 | Pro |
|---|---|---|
| 完整检查、差异原因和原始源行 | 包含,每侧 1000 条记录 | 相同 |
| 预览页面和 CSV | 包含 | 相同 |
| 已保存报告数量 | 3 | 无数量上限 |
| 已保存数据总存储量 | 64 MiB | 64 MiB |
| 单文件完整性限制 | 8 MiB | 8 MiB |
| 输入、响应、文本和预览限制 | 相同的文档所述上限 | 相同 |
达到免费版上限后,save:true 会返回诊断结果和免费预览,并附带 saved:false、save_error:"free_saved_report_cap" 以及升级链接。删除一份已保存报告即可释放名额。存储失败也会保留诊断结果。
获取 Pro:一次性支付 $19。
全部服务:$39 套装。设置 MCP_LICENSE_KEY 或调用 license_activate;许可证密钥可离线验证。Pro 仅移除已保存报告数量上限,不提供额外的会计数据、准确性保证、ERP 访问权限或安全审批。升级以保存历史记录为目标,这只是一项商业假设,并无已证实的投资回报。
所有数据都保留在本地。报告存储于
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/supplier-statement-check/。
XDG_DATA_HOME 必须是绝对路径,且其目录祖先必须真实存在。私有 JSON 文件会在跨进程修改锁保护下以原子方式写入。读取时会验证原始输入并重新计算证据,而不是信任经过编辑的结果。激活许可证会写入共享的本地许可证配置。会计数据的访问、保留和备份由你自行管理。
开发
npm run build --workspace @theluckystrike/mcp-supplier-statement-check
npm test --workspace @theluckystrike/mcp-supplier-statement-check
在 monorepo 根目录使用 docker build -f servers/supplier-statement-check/Dockerfile . 构建 Docker 镜像。独立镜像会在生成过程中获得自己的独立 Dockerfile。测试涵盖比较预言机、严格输入、范围/Unicode 隔离、完整源覆盖、歧义、大型免费分页/CSV、安全存储、并发保存上限以及实际 stdio 调用。有签名许可证测试时会使用现有的本地私钥签名器;如果该签名器不存在,则跳过测试。私有签名密钥不会打包,也不是用户所必需的。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。