mcpField
B
BankMCP™

BankMCP™

本地服务
bankmcp.dk金融数据2956 天前更新

关于 BankMCP™

BankMCP™ 是面向个人的开源自托管银行账户 MCP 服务,通过 Enable Banking 连接欧洲银行,并向 MCP 客户端提供只读账户数据。它不存储余额或交易,也不支持付款。

主要功能

  1. 01读取账户余额与交易
  2. 02按商户或发票搜索交易
  3. 03生成月度收支摘要
  4. 04设置余额与付款监控
  5. 05提供银行连接提示词

适用场景

  1. 01查询账户余额和可用余额
  2. 02核对发票是否到账
  3. 03按月查看支出与收入
  4. 04在余额触及阈值时接收通知

MCP 相关

BankMCP™ 将账户信息和只读工具提供给 MCP 客户端。客户端可通过本地 stdio 或远程 HTTP 连接,并使用提示词发起银行连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"noskillish-bankmcp": {
"command": "npx",
"args": [
"-y",
"bankmcp"
]
}
}
}
启动命令npx -y bankmcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmbankmcp0.1.14

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

BankMCP™

让 AI 读取你的银行账户。 询问它任何有关你账户的事情。只读、可自托管、供一位用户使用。采用标准 MCP;已通过 Claude 和 Ollama 测试。

BankMCP™ 不是银行,而是一个由你自行托管的小型开源服务 (npm 包 bankmcp)。它通过 Enable Banking 连接到你的银行。Enable Banking 通过一个 PSD2 API 接入了 2,700 多家欧洲银行,并将它们作为连接器提供给任何 MCP 客户端。只读、不支持支付,也没有第三方保管你的数据。

“Acme 的发票付了吗?”·“我们 8 月在食品杂货上花了多少钱?”·“我在付费订阅哪些服务?每年要花多少钱?”·“余额低于 5,000 时提醒我。”

工作原理

Your assistant ──OAuth──▶ your BankMCP™ server ──JWT──▶ Enable Banking ──PSD2──▶ your bank
  • 你的助手(Claude、ChatGPT、Cursor 或任何 MCP 客户端)将你的服务用作连接器。你只需使用密码登录一次;之后由令牌处理一切。
  • 你的服务保存 Enable Banking 应用密钥、银行授权和你的账户 ID。它不存储余额或交易记录,也不发送遥测数据。
  • Enable Banking 是连接你的服务与银行的持牌服务提供商。你查询的每笔余额和交易都会经过它的服务器,再到达你的服务;它不会存储这些数据,也看不到你的银行凭据,因为你是在银行自己的网站上登录的。PSD2 的运作方式需要经过这一环节,而这也是整个链路中唯一不在你设备上的部分。

设置

有两种运行方式。两种方式都需要一个免费的 Enable Banking 账户,设置约需十分钟。

  • 在自己的设备上运行,适用于 Claude Desktop、Claude Code、Cursor 和其他桌面 MCP 客户端。无需部署,也无需密码。
  • 在小型服务上运行,适用于你想在 claude.ai 或手机上使用的情况。
在自己的设备上运行

服务及其状态数据都保存在你的计算机上,AI 供应商或应用开发者都看不到你的数据。银行连接不在你的计算机上,而是通过 Enable Banking 建立,如上所述。

需要 Node 24 或更高版本。将 BankMCP™ 添加到你的客户端:

Claude Code:

claude mcp add bankmcp -- npx -y bankmcp

Claude Desktop:下载 bankmcp.mcpb 并打开;Claude Desktop 会将其安装为扩展。也可以在 claude_desktop_config.json 中手动添加:

{ "mcpServers": { "bankmcp": { "command": "npx", "args": ["-y", "bankmcp"] } } }

Cursor 和其他客户端:使用相同的命令 npx -y bankmcp,作为 stdio 服务运行。

然后向你的助手询问任何有关银行账户的事情。它会提供一个 localhost 地址。打开该地址:设置页面会列出在 Enable Banking 注册应用所需的信息,随后让你填写应用 ID 并上传密钥文件。浏览器会针对 localhost 的证书警告一次;由于 Enable Banking 要求银行重定向使用 https,因此服务为自己生成了该证书。继续访问即可。然后说“连接我的银行”,并登录你的银行账户。

如需完全避免警告,可使用浏览器已信任的证书:mkcert 可通过 mkcert localhost 127.0.0.1 生成证书;将 TLS_CERT_PATH 和 TLS_KEY_PATH 指向这两个文件,服务便会使用它们,而不是自行生成证书。BankMCP™ 本身不会修改系统的信任存储。

状态数据保存在 ~/.bankmcp 中。删除该文件夹即可清除所有数据。

在服务上运行
1. 部署

任何容器托管平台都可以。服务需要在 /data 挂载持久化卷, 并拥有公开的 https 地址;其他配置都可以在浏览器中完成。 每次发布都会发布一个预构建镜像: ghcr.io/noskillish/bankmcp(由 GitHub Actions 根据带标签的源代码构建,支持 linux/amd64 和 linux/arm64)。

Railway: 在 Railway 上部署 会部署已发布的镜像,并配置挂载到 /data 的卷和域名,无需填写任何内容。 也可以手动操作:新建项目,选择从 GitHub 仓库部署,选中此仓库, 添加挂载到 /data 的卷并生成域名(Settings、 Networking、端口 8080)。服务会从 Railway 获取自己的地址。

Fly.io: 在检出代码后运行三个命令,使用 fly.toml:

fly launch --copy-config --no-deploy   # pick an app name and region
fly volumes create data --size 1
fly deploy

Render: 部署到 Render 使用 render.yaml。Render 的持久磁盘需要付费实例。

在自己的设备上运行 Docker:

docker run -d --name bankmcp --restart unless-stopped \
  -p 8080:8080 -v bankmcp-data:/data ghcr.io/noskillish/bankmcp:latest

或者使用 compose.yaml 运行 docker compose up -d。然后在前面配置 TLS 终止代理(Caddy 只需两行: YOUR-HOST { reverse_proxy localhost:8080 }),并将 BASE_URL 设置为 公开地址。默认情况下,服务会绑定所有网络接口。如果代理在同一台设备上运行, 请将 BIND_HOST=127.0.0.1,这样本地网络中的其他设备就无法访问登录和设置页面。

打开该地址。全新服务会显示设置页面。

2. 注册 Enable Banking 应用

设置页面可以代你完成此操作。输入 Enable Banking 账户的邮箱(或你想用来创建账户的邮箱), 然后点击 给我发送登录链接。Enable Banking 会向你发送一次性链接;在 下一页粘贴该链接。服务会使用该链接登录一次,创建包含正确重定向地址和 策略地址的应用,生成密钥对并保存应用 ID 和密钥。登录信息不会保留。在本地服务上, 点击链接即可完成相同操作,无需粘贴。

也可以手动操作:设置页面会列出 Enable Banking 表单所需的确切值,并附带复制按钮。在 https://enablebanking.com/cp/applications 创建应用,选中 generate private key, 然后保存。系统会下载一个 .pem 文件;这就是密钥。在设置页面粘贴应用 ID, 并选择 .pem 文件。保存任何内容之前,系统都会先向 Enable Banking 验证 ID 和密钥。

无论哪种方式:真实账户请选择 Production,测试数据请选择 Sandbox。 用于自有账户的生产应用需要在 Control Panel 中通过 Activate by linking accounts 激活一次;请参阅下文的 上线。

3. 完成设置

设置一个不少于 12 个字符的密码。随后会显示 Ready 页面,说明已检查的内容: 应用、重定向 URL 是否已注册以及是否已激活,还有可供复制的连接器地址。

希望通过环境配置?设置以下变量后,设置页面就不会出现:

4. 在助手中添加连接器

在 claude.ai(或桌面应用)中:设置 → 连接器 → 添加自定义 连接器。将其命名为 BankMCP™,粘贴 https://YOUR-HOST/mcp,保存,然后点击 连接。服务会显示密码页面;输入管理员密码。这是唯一一次需要登录。

在 Claude Code 中:

claude mcp add --transport http bank https://YOUR-HOST/mcp

然后在 Claude Code 中运行 /mcp 进行登录。

其他 MCP 客户端(ChatGPT、Mistral Le Chat、Cursor、VS Code)的操作方式相同: 将 URL 添加为远程 MCP 服务,并使用密码登录。已通过 Claude、Claude Code 和 Ollama 测试;其他客户端也遵循同一标准。如果客户端的域名不在 ALLOWED_REDIRECT_HOSTS 中,需要将其添加进去。

5. 连接你的银行

在助手中说 “连接我的银行”(或使用 connect-bank 提示词)。它 会查找你的银行并提供链接,你在银行登录并授权后,账户就会显示出来。授权 最长有效期为 180 天;授权即将到期时会通知你,并可在同一段对话中续期。

在它建议时为账户添加标签(“日常开支”“共同开支”“房贷”)。每个工具都接受标签,而非 ID。

使用你自己的账户上线

Enable Banking 的生产环境通常需要签订合同,但它提供了一种受限模式, 明确允许个人非商业用途访问自己的账户。注册 Production 应用后:

  1. 在(Inactive)应用上点击 Activate by linking accounts。
  2. 在银行登录并授权。对你需要使用的每家银行重复此操作。
  3. 应用会变为 active,API 仅返回你通过这种方式关联的账户。

在使用前,请阅读 Enable Banking 服务条款中的使用限制一节: 受限模式仅适用于你自己的账户,不可用于向他人提供服务。本项目不会更改这些条款。

你将获得

工具(均为只读):

工具功能
list_banks、start_consent、consent_status、disconnect_bank连接和管理银行
list_accounts、set_account_label查看账户及已入账余额;为账户设置自定义名称
get_balances查看单个账户的已入账余额和可用余额
get_transactions查看带正负号的金额、一个交易对手方和一条描述;支持分页
search_transactions在所有账户中查找商户或发票编号;匹配完整词语
monthly_summary按月汇总收入和支出,不计入自有账户之间的转账
create_watch、list_watches、delete_watch、check_watches创建带 Webhook 通知的后台规则
attest_account默认关闭;以签名形式确认某个 IBAN 是否属于你,供你向其证明账户归属的第三方使用——详见 ATTESTATION.md

提示词:connect-bank、monthly-summary、build-budget、 savings-scan、subscription-audit、unusual-transactions。

监控规则在服务端运行。规则包括:余额低于或高于某个金额、单笔借记超过某个金额、 匹配指定名称的转入或转出款项,以及“如果截至某日期仍未收到这笔款项,请告诉我”。 每个账户每天最多检查四次,这是无人值守访问的 PSD2 限制。 通知会以 Slack 消息或 JSON POST 的形式发送到 NOTIFY_WEBHOOK_URL。

Enable Banking 自身的 Webhook 仅适用于支付发起,因此账户数据通过轮询获取。 在 PSD2 规定下,没有其他办法。

Claude Code 插件

此代码库也属于 Claude Code 插件市场。bank 插件提供三项技能:/bank:setup 会引导你在 自己的设备上安装 BankMCP™,/bank:deploy 会引导你托管它,而 bank 则说明如何处理 这些数据:账户映射、分类规则、月度审查格式,以及何时创建监控规则。

将其指向你的服务端,然后安装:

export OPENBANK_URL=https://YOUR-HOST/mcp   # put this in your shell profile
/plugin marketplace add noskillish/bankmcp
/plugin install bank@bank

然后运行 /mcp,选择 bank,点击 Authenticate,并输入密码。无需组织管理员参与; 插件按用户安装。

技能文件位于 plugin/skills/bank/SKILL.md。 将其复制到你自己的技能中,填写账户映射和商户规则。服务端保持通用; 规则由你自己掌控。

本地模型(实验性)

服务器不关心发起请求的是哪个模型。npm run chat 会通过标准输入/输出,将 Ollama 模型接入同一组工具,因此不会有 AI 供应商看到任何交易:

ollama pull qwen3:8b
npm run chat -- "what's my balance?"

在一台配备 24 GB 内存的 MacBook Air 上测得:每个账户的余额正确,但总额错误,每次回答耗时十分钟。8B 模型目前还不能放心地用于处理资金;在配备独立 GPU 的机器上运行 30B 级模型,才真正有用。任何支持工具调用的 MCP 客户端(LM Studio、Goose、Jan)也可以直接连接到 node src/stdio.ts。无论采用哪种方式,Enable Banking 始终介于你和银行之间;这一环节受监管,无法绕开。

安全说明

  • 此服务器是完整的 OAuth 2.1 授权服务器,只有一个用户。发现、动态客户端注册和 PKCE 由 MCP SDK 提供;令牌以哈希形式存储;输错密码五次会锁定该地址 15 分钟,而所有地址累计输错二十次会锁定所有人的登录功能 15 分钟。已连接的助手在锁定期间仍可继续工作。
  • 状态保存在 DATA_DIR 中的一个 JSON 文件里:包括授权、账户 ID、监控项(以及已触发通知的交易 ID)和 OAuth 令牌。余额和交易记录不会写入磁盘。你的助手会像任何聊天应用一样保留对话,而监控通知会将匹配的交易发送到你的 webhook。如果不想重新授权,请备份该文件;删除该文件即可清除所有数据。
  • 只有重定向回已知 MCP 客户端域名(Claude、ChatGPT、Mistral、Cursor、VS Code)或 localhost 的客户端才能注册(ALLOWED_REDIRECT_HOSTS),这可以防止钓鱼链接将你的登录信息转发到其他网站。要使用不在列表中的客户端?请添加其域名。登录页面也会显示你将被重定向回的主机名。
  • 通知只会发送到一个目标:由运营者在主机上设置的 NOTIFY_WEBHOOK_URL,且必须使用 https。监控项无法指定自己的 webhook,因此被诱导这样做的客户端或助手无法将交易数据发送到其他地址,或服务器网络内部的地址。
  • 对于想查看代码的人,检查逻辑如下:每个 /mcp 请求都会先在 src/app.ts 中通过 requireBearerAuth 检查,然后才会运行任何工具;令牌由 src/auth.ts 中的 SingleUserProvider 签发和验证,且会在 completeLogin 中通过密码检查。由于只有一个用户,有效令牌就是全部授权,工具不再进行额外的用户级检查。在本地模式(npx bankmcp)下没有 OAuth:你机器上的客户端通过标准输入/输出与服务器通信,而任何能在这台机器上运行进程的人都可以使用它。
  • 交易描述和交易对方名称由他人填写,例如向你付款的人。服务器会告知助手应将这些内容视为数据,而非指令。但助手仍可能被这些内容误导。
  • 任何知道管理员密码的人都能读取你的账户。请使用足够长的密码。每次成功登录都会记录日志;如果设置了 NOTIFY_WEBHOOK_URL,还会向你发送消息。未经你本人操作的登录就是警报。
  • 忘记密码了?在主机上设置 ADMIN_PASSWORD(或 ADMIN_PASSWORD_HASH)并重启;环境变量的值会覆盖初始设置时存储的值。
  • 更改 ADMIN_PASSWORD_HASH(或 ADMIN_PASSWORD)并重启,会将所有客户端登出。这就是紧急停用开关。进一步的措施是在银行撤销授权,或删除状态文件。
  • 此处没有支付工具。支付需要持牌 PISP,并采用截然不同的安全模型,因此不在本项目范围内。

命令

npm start              # http server (reads env from the environment)
npm run dev            # same, with reload and .env
npm run check          # verify config and the Enable Banking application
npm run hash-password  # produce ADMIN_PASSWORD_HASH
npm run watch -- --force   # run all watches once, print what fired
npm test               # unit tests (node:test)
npm run typecheck
sh scripts/build-mcpb.sh   # Claude Desktop bundle → dist/bankmcp.mcpb
npm run banks          # refresh docs/banks/banks.json from Enable Banking's bank list
npm run site           # build the subpages of the landing page into docs/

需要 Node 24 或更高版本(直接运行 TypeScript,无需构建步骤)。

目录结构

src/stdio.ts          entry point for npx bankmcp: stdio server plus the localhost https side
src/server.ts         entry point for a hosted deployment: OAuth, /mcp, callback, status page
src/app.ts            the Express app shared by both entry points
src/local.ts          localhost https server and self-signed certificate for local mode
src/mcp.ts            McpServer factory (tools, prompts, instructions)
src/tools.ts          the MCP tools
src/prompts.ts        the MCP prompts
src/watcher.ts        background rule checks and notifications
src/auth.ts           single-user OAuth provider
src/setup.ts          first-run setup: validates and stores id, key and password
src/pages.ts          the HTML pages: setup, sign-in, connected, status, privacy, terms
src/config.ts         environment and data-directory configuration
src/enablebanking.ts  JWT signing and a thin typed API client
src/store.ts          the JSON state file
src/data.ts           shaping balances and transactions for an assistant
src/cli.ts            check, hash-password, watch
bin/bankmcp.js        the npx entry; dispatches to stdio or cli
scripts/              build-mcpb.sh (Claude Desktop bundle), banks.ts and site.ts (landing subpages), local-chat.ts (Ollama bridge)
plugin/               Claude Code plugin: setup and deploy skills, bank skill
docs/                 landing page (GitHub Pages, bankmcp.dk); docs/banks holds the bank list and its pages

它是什么,以及不是什么

BankMCP™ 是软件,不是服务。没有托管的 BankMCP™,无需注册账户,也没有任何人会代替你管理服务器、密钥或银行授权。每位使用者都会部署自己的副本,并独自运营该副本:自行注册 Enable Banking 应用,自行接受 Enable Banking 的条款,并自行负责托管、密码和安全。

作者仅发布代码,不提供其他任何内容。他们不为他人运行任何实例,不接收任何数据,也不隶属于 Enable Banking、Anthropic 或任何银行。BankMCP™ 不是银行,不持有资金,也不提供财务建议。

证明功能(ATTESTATION_ENABLED,默认关闭)不会改变上述任何一点。它不会增加支付发起功能,也不会扩大授权范围:底层的银行调用与 get_balances 已执行的余额读取相同;提出查询的第三方只能得知一个他们已知的 IBAN 对应的「是」或「否」。是否根据你的 Enable Banking 条款将这些信息分享给特定服务,由你作为运营者自行决定,正如这里的其他一切一样。

使用风险自负。 如果你部署它,该部署及其安全由你负责。本软件按原样提供,不附带任何形式的保证;对于软件的使用方式或由此造成的任何损失,作者概不承担责任。下文附有 MIT 许可证。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。