关于 bank-statement-pdf
bank-statement-pdf 的名称指向 PDF,但所提供的项目文档描述的是将银行 CSV 导入本地账本的 MCP 服务。它支持交易分类、按币种汇总、检测周期性支出及核对收据。
主要功能
- 01导入并去重银行 CSV
- 02按规则分类交易
- 03按币种汇总收支
- 04检测周期性支出
- 05将扣款与收据核对
- 06以 JSON 在本地保存账本
适用场景
- 01查看月度收入与支出
- 02查找订阅及年度费用
- 03找出缺失收据或未到账款项
- 04导入支持银行的对账单
MCP 相关
提供导入、搜索、分类、汇总、导出和核对交易的工具,以及月度汇总资源和月末复核提示词。MCP 客户端可借此管理本地银行账本。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.zovo.one/mcp/bank-statement-pdfclaude mcp add --transport http theluckystrike-bank-statement-pdf https://mcp.zovo.one/mcp/bank-statement-pdf{"mcpServers":{"theluckystrike-bank-statement-pdf":{"type":"http","url":"https://mcp.zovo.one/mcp/bank-statement-pdf"}}}在 Cursor 中打开{"servers":{"theluckystrike-bank-statement-pdf":{"type":"http","url":"https://mcp.zovo.one/mcp/bank-statement-pdf"}}}在 VS Code 中打开{"mcpServers":{"theluckystrike-bank-statement-pdf":{"type":"http","url":"https://mcp.zovo.one/mcp/bank-statement-pdf"}}}{"mcpServers":{"theluckystrike-bank-statement-pdf":{"serverUrl":"https://mcp.zovo.one/mcp/bank-statement-pdf"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.zovo.one/mcp/bank-statement-pdf需要授权工具
15| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| bank | enum | 否 | 银行配置文件。默认值为 "auto":由表头决定。"generic" 会跳过配置文件检测,仅使用表头启发式规则auto | revolut | wise | mbank | pko | ing | n26 | generic |
| path | string | 是 | 使用 bank_upload 上传的对账单名称 |
| account | string | 否 | 此账户的名称,例如 "business EUR"。默认值:去掉扩展名的文件名。之后导入同一账户时会与该账户的数据去重 |
| currency | string | 否 | 文件未指定币种时,适用于各行的币种。默认使用共享业务配置文件的 default_currency,否则使用 EUR;响应会说明实际使用的币种 |
| overwrite | boolean | 否 | 导入前删除此账户已存储的所有交易,而不是合并。银行重新签发了更正后的导出文件时使用 |
详细介绍
mcp-bank-statement
已收录于 官方 MCP Registry(io.github.theluckystrike/bank-statement-csv-categorize-reconcile-ledger)。

从银行导出 CSV,说一句“导入这个”,这个月的账目就一目了然。这个 MCP 服务会将银行导出文件转换为本地账本:它能在银行打印的任意前置信息下方找到标题行,判断哪一列是日期、哪一列是金额,以及资金流向,并按文件本身的区域格式读取金额,因此 mBank 的 1 234,56 和美国银行的 1,234.56 都会转换为相同的数字。借记在导入时存为负数,贷记存为正数,仅处理一次,因此后续流程无需猜测。重新导入相同的导出文件不会添加任何内容:每一行都会根据日期、金额、货币和描述生成哈希,并附带出现序号,因此同一天两笔相同金额的咖啡仍会作为两笔交易保留,而再次导入同一个文件则不会新增交易。你的规则会在交易导入时对其分类;汇总会按货币报告收入、支出和净额,绝不会混合不同货币;recurring_detect 会找出订阅项目及其年费;reconcile_expenses 会将银行借记与 mcp-expense-tracker 中的收据进行匹配,让你查看哪些借记没有收据,以及哪些收据没有出现在银行账单中。所有内容都是保存在你自己机器上的普通 JSON 文件;任何内容都不会上传。
在聊天中将银行 CSV 转换为已分类、已对账的月度账目,无需会计 SaaS。
支持的银行配置:Revolut、Wise、mBank、PKO BP、ING、N26,以及仅根据标题行工作的通用读取器。
无需特别处理即可读取的文件格式:UTF-8 和 UTF-16(任意字节序,包括 Windows 版 Excel 保存的格式)、
CRLF、LF 和仅 CR 的换行符、包含逗号、引号和换行符的带引号字段、1.234,56 和 1,234.56、
会计格式的括号 (12.50) 和尾随负号 12.50-(两者均为负数),以及同一文件中的多种货币。值为
- 或空白的单元格会被跳过,并列入 skipped_lines,而不会被读取为零。如果日期列存在歧义(例如 03/04/2026,且
没有任何大于 12 的值),响应中会说明所采用的日期顺序,而不会默默猜测。
60 秒安装
@theluckystrike/mcp-bank-statement 的 npm 发布尚未完成。在此之前,可使用一键安装包 .mcpb,或克隆并构建;
以下两种方式均已验证。
一键安装(.mcpb):从最新版本下载 bank-statement.mcpb,然后在 Claude Desktop 中双击:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"bank-statement": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-bank-statement"]
}
}
}
Claude Code:
claude mcp add bank-statement -- npx -y @theluckystrike/mcp-bank-statement
(.cursor/mcp.json):
{
"mcpServers": {
"bank-statement": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-bank-statement"]
}
}
}
上述 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/spreadsheet -w servers/bank-statement
然后将客户端的 command 指向 node,并传入一个参数:servers/bank-statement/dist/index.js 的绝对路径。
要以 Pro 模式运行,请在同一配置块中设置 MCP_LICENSE_KEY,或使用你的密钥调用一次 license_activate。
工具
| 工具 | 功能说明 |
|---|---|
statement_import | 将银行 CSV 读入账本。可在任意前置内容下方检测标题行,以及日期、描述、金额(或借方和贷方)和币种列、日期顺序和数字区域格式。会报告检测到的内容、存储的内容、与已有数据重复的行数,以及跳过的每一行及其原因 |
transactions_list | 列出指定日期范围内的交易,可按账户、类别或 uncategorized 筛选,并按币种汇总 |
transactions_search | 查找描述、交易对手、类别或账户中包含查询词的交易。仅支持子字符串匹配,绝不使用正则表达式 |
category_rules | 设置或列出交易分类规则。拒绝空匹配,因为这会将同一类别套用到整个账本。普通匹配为不区分大小写的子字符串;regex: true 仅在模式不会导致指数级回溯时才会编译,并会拒绝 (a+)+,将其作为子字符串处理。设置规则后,会将其重新应用于已存储的交易 |
transaction_categorize | 按 ID 为交易设置类别。除非所有 ID 都存在,否则不会进行任何更改 |
statement_summary | 汇总指定范围内的收入、支出和净额,可按类别、月份、账户或交易对手分组,并始终按币种分别统计 |
reconcile_expenses | 将银行借记与 mcp-expense-tracker 中的收据匹配:币种相同、金额相同且日期在指定范围内。报告匹配项、没有收据的银行记录,以及尚未入账的收据。只读取费用账本,绝不修改 |
recurring_detect | 查找订阅和定期扣款:交易对手相同、金额基本不变、周期稳定。报告周期、典型金额、下一个预计日期和年化费用。两笔扣款只能确定一个间隔,因此会暂不提供年化费用(cadence_confirmed: false),直到第三笔扣款确认周期 |
statement_export | 将指定范围写入 csv 或 json,并返回路径。采用原子写入,因此失败时不会留下不完整文件。允许替换现有文件,并会报告(overwrote_existing_file) |
accounts_list | 列出已导入的账户,包括银行、币种、交易数量、日期范围和最新余额 |
license_status | 显示免费或 Pro 模式 |
license_activate | 激活 Pro 密钥(离线验证) |
资源 bank://month 返回本月的收入、支出和净额,按类别分组并按币种分别统计。
提示词 monthly_review 会执行整个月末检查:汇总、未分类记录、订阅和对账。
免费版与 Pro 版
| 免费版 | Pro 版 | |
|---|---|---|
| 账户 | 2 个 | 不限 |
| 可读取的历史记录 | 最近 12 个月 | 全部 |
| 分类规则 | 5 条 | 不限 |
| 导入、列表、搜索、汇总 | 是 | 是 |
reconcile_expenses | 是,每次最多 31 天 | 任意日期范围 |
recurring_detect | 是,最近 3 个月、最多 5 笔扣款 | 完整历史记录、所有扣款 |
statement_export | 否 | 是 |
无论使用哪个版本,导入时都会存储每一行:如果导入时静默丢弃记录,账本就会与银行记录不一致。免费版的限制针对的是可读取的内容。
获取 Pro:https://mcp.zovo.one/buy/bank-statement,此服务一次性付费 $19,所有服务一次性付费 $39,终身有效。 密钥均离线验证;不会向任何地方发送数据。
搭配使用
- mcp-expense-tracker,记录收据和里程;
reconcile_expenses会读取该账本,并告诉你哪些银行借记没有对应的收据。 - mcp-spreadsheet,此服务使用电子表格服务自带的 RFC 4180 读取器和区域数字解析器来解析银行 CSV,因此
1 234,56在两者中的含义相同。可用它拆分导出的日期范围。 - mcp-invoice,处理收入:开具发票,然后在按交易对手分组的
statement_summary中查看款项到账情况。
隐私
所有内容都保留在你的设备上。银行对账单会在本地解析,并存储在
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/bank-statement/ 下的纯 JSON 文件中。此服务完全不会发起网络请求,无论是用于许可、解析还是其他任何用途。删除该目录即可重置。
由 theluckystrike 构建。支持:[email protected]
将这些文档用作 MCP 服务
任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此代码库的文档,无需安装:
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。