mcpField
E
Enable Banking

Enable Banking

本地服务
foreverworks.github.io金融数据1今天更新

关于 Enable Banking

Enable Banking 是面向欧洲银行账户的 MCP 服务,通过 Enable Banking 提供只读的交易记录与余额访问,不支持资金转移。它可管理账户授权、筛选交易并导出 CSV,授权需账户持有人批准。

主要功能

  1. 01查找支持的银行并管理授权
  2. 02列出账户和余额
  3. 03读取及筛选交易记录
  4. 04将交易记录导出为 CSV
  5. 05查看授权到期时间

适用场景

  1. 01汇总多个账户的收入或支出
  2. 02检查 EUR 账户可用余额
  3. 03按交易对象、方向或金额筛选流水
  4. 04为会计人员导出季度交易记录

MCP 相关

作为 MCP 服务,它向客户端提供银行列表、账户授权、账户、余额和交易记录工具。银行访问仅限读取;开始授权会请求账户持有人批准。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"com-foreverworks-enable-banking": {
"command": "npx",
"args": [
"-y",
"@foreverworks/mcp-enable-banking"
],
"env": {
"ENABLE_BANKING_CONFIG": "<ENABLE_BANKING_CONFIG>",
"ENABLE_BANKING_KEY": "<ENABLE_BANKING_KEY>"
}
}
}
}
启动命令npx -y @foreverworks/mcp-enable-banking
需要配置的环境变量
ENABLE_BANKING_CONFIGPath of app.json: your Enable Banking application's id, its redirect URL and the name of its private key file, as the README describes it.
ENABLE_BANKING_KEY密钥Path of the application's private key (PEM), when app.json does not name it.

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

安装包
npm@foreverworks/mcp-enable-banking0.1.0

工具

10

收录的工具列表 · 更新于 3 天前

参数类型必填说明
labelstring否存储名称:a-z、0-9、_ 和 -。默认值:同一银行、国家和 psu_type 的已存授权标签(续期时会替换该授权);否则使用银行和国家,例如 example_bank_de。
code_or_urlstring是完整重定向 URL(...?code=...&state=...),或仅代码值。

详细介绍

Enable Banking 图标 Enable Banking MCP 服务

通过 Enable Banking(一家获得许可、服务欧洲各地银行的 PSD2 提供商),从 AI 助手中读取、搜索并导出银行对账单和余额。它不会转移资金:除了读取之外,它只会启动、存储和结束授权。start_auth 是它唯一的 money 工具,因为它会向你的银行申请 180 天的只读权限;客户端会在每次调用前征求你的同意。

你需要 一个 Enable Banking 应用(包括其 ID、已注册的重定向 URL 和私钥),并且账户持有人必须每 180 天在其银行应用中批准一次授权。账户持有人不在场时,银行每天允许读取账户约四次;所有使用该授权的程序共享这一额度,因此请一次性读取一段时间的数据,然后在此处缩小范围。

可以询问什么

  • “我们有哪些银行授权?每个授权何时到期?”
  • “今年我们向 Example Supplier SRL 支付了多少?”
  • “列出我们所有账户在 9 月收到的、金额超过 1,000 RON 的付款。”
  • “我们 EUR 账户的可用余额是多少?”
  • “将上季度的交易导出为 CSV,供会计师使用。”
  • “我们在 Example Bank 的授权下周到期。续期。”

安装

在 VS Code 中安装 在 Cursor 中安装 下载 Claude Desktop 版

使用 Claude Code:

claude mcp add enable-banking -e ENABLE_BANKING_CONFIG="<path to Enable Banking app.json>" -- npx -y @foreverworks/mcp-enable-banking

Claude Desktop(Settings、Developer、Edit Config)和大多数其他客户端会从同一 JSON 命令中读取配置:

{
  "mcpServers": {
    "enable-banking": {
      "command": "npx",
      "args": ["-y", "@foreverworks/mcp-enable-banking"],
      "env": {
        "ENABLE_BANKING_CONFIG": "<path to Enable Banking app.json>"
      }
    }
  }
}

每个客户端都会在 Node 22.19 或更高版本上运行已发布的软件包。VS Code 和 Claude Desktop 安装包会在添加服务时询问各项设置;可选项可以留空。Cursor 则会从环境变量中读取各项设置(例如 ${env:ENABLE_BANKING_CONFIG}),因此请在启动 Cursor 前设置好这些变量。以上命令仅设置必需项;其余设置请参阅配置。

从克隆仓库安装
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add enable-banking -e ENABLE_BANKING_CONFIG="<path to Enable Banking app.json>" -- node "$PWD/servers/enable-banking/dist/index.js"

在 JSON 配置中,命令为 node,唯一参数是 servers/enable-banking/dist/index.js 的完整路径。若要通过 HTTP 在多个客户端之间共享同一个运行实例,请参阅 docs/deploying.md。

配置

变量必需含义
ENABLE_BANKING_CONFIG是app.json(如下)的路径,服务仅读取此文件。
ENABLE_BANKING_KEY否应用私钥(PEM)的路径。未设置时,app.json 中的 private_key 会指定该文件,路径相对于 app.json 所在文件夹。
ENABLE_BANKING_STATE_DIR否存放授权(sessions.json)、其备份及锁的位置;默认值见 docs/configuration.md。
ENABLE_BANKING_EXPORTS_DIR否export_transactions 写入 CSV 文件的位置。默认值:状态文件夹中的 exports/。

app.json 保存控制面板中应用的详细信息:

{
  "application_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "application_name": "Example Books",
  "environment": "sandbox",
  "redirect_url": "https://example.com/bank-callback",
  "private_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.pem"
}

必须填写 application_id 和 redirect_url;除非设置了 ENABLE_BANKING_KEY,否则也必须填写 private_key。redirect_url 必须与已注册的某个地址 完全一致。application_name 和 environment 仅用于标注 health 的响应; application_id 决定使用沙盒还是生产环境。api_base 可覆盖 https://api.enablebanking.com,用于测试或代理;其他键都会被忽略。 在 systemd 下,凭据目录会将文件重命名为凭据名称,因此请在该目录中设置 ENABLE_BANKING_KEY。所有服务共用的变量见 docs/configuration.md。

获取应用和密钥
  1. 在 Enable Banking 的控制面板中,从顶部菜单打开 API applications。在“Add a new application”中,保留 Sandbox 环境:其中的测试银行让你无需真实账户即可试用所有工具。
  2. 为应用命名(账户持有人会看到该名称),并输入 重定向 URL。任何由你控制的页面都可以:complete_auth 只需要浏览器最终跳转到的地址。
  3. 保留默认的私钥选项,然后点击 Register。浏览器会生成密钥并将其保存为 <application id>.pem;将它移至只有此服务才能读取的位置,并在其旁边创建 app.json。

生产环境需要另行注册一个应用,并选择 Production 环境。该应用初始状态为 Inactive;“Activate by linking accounts”会在受限模式下将其激活,在你与 Enable Banking 签订合同之前,它只能读取你自己关联的账户。

首次运行

  1. 请助手运行 Enable Banking 的 health 检查。它会显示应用名称、环境、是否已激活及其重定向 URL, 并统计已存储的授权数量。与 application_id 不匹配的密钥会导致检查失败。
  2. 使用该国家的 list_aspsps 查找你的银行。start_auth 需要其 name;psuTypes 列出其账户类型(business、personal), maxConsentDays 则列出其最长授权期限。
  3. 请助手使用该银行名称、国家和 psu_type 调用 start_auth,然后批准授权。返回的链接供账户持有人使用:请预留五分钟,并准备好装有银行应用的手机。
  4. 打开链接,登录银行,并勾选它提供的每个账户。 请求中不指定账户,即表示请求全部账户。
  5. 银行会将你带回重定向 URL,并附上 ?code=...。请立即将该地址(或代码)交给 complete_auth:代码只能使用一次,且几分钟后就会失效。响应会列出账户及授权的到期日期。

如需续期授权(list_stored_sessions 会显示剩余天数), 请使用该银行、国家和类型重复步骤 3 至 5。若不提供 label,新授权会取代旧授权及其标签。

在命令行中,node dist/index.js --health 会打印一行 ENABLEBANKING:, 并在需要人工操作时以状态码 1 退出;若 Enable Banking 服务异常,则以状态码 2 退出, 适合用于每日定时任务。

工具

read 不会更改银行中的任何内容或已存储的同意(导出操作只会写入文件);write 会更改已存储的同意;money 会向银行请求访问你的账户。

工具访问权限功能
healthreadEnable Banking 是否接受此密钥、该密钥对应的应用和环境、文件所在位置,以及已存储的同意数量。
list_aspspsreadEnable Banking 在某个国家/地区可连接的银行(对每个市场均为空):start_auth 要使用的 name、各银行提供的账户类型,以及其最长同意期限。缓存 1 小时。
list_stored_sessionsread按标签列出每项已存储的同意,包括其银行、账户及其到期时间(以日期和剩余天数表示)。
start_authmoney为银行提供的所有账户发起一项为期 180 天的同意。返回一个账户持有人必须打开的链接。
complete_authwrite根据银行的重定向完成一项同意,将其按标签存储,并报告其账户和结束日期。
revoke_sessionwrite在银行处结束一项已存储的同意,并在此处将其移除,同时保留之前的文件作为备份。
list_accountsread向银行查询一项同意当前可访问的账户,并列出每个账户的 uid,供其他工具使用。
get_transactionsread获取一个账户、一项同意下的所有账户或所有已存储账户的交易明细,包含精确的带符号金额;可按文本、方向和金额缩小范围,且不会再次向银行读取。
export_transactionsread将相同的交易明细写入 CSV 文件,适用于较长时期、多个账户或会计师。返回文件路径、大小和 SHA-256。
get_balancesread获取银行为一个账户报告的所有余额(已记账、可用及其他返回的余额),每项均包含精确金额、PSD2 代码及其含义。

资金操作

start_auth 不会转移资金,但会授予为期 180 天的只读访问权限,是否授权应由账户持有人决定。它在 tools/list 中标记为 money,因此你的客户端会在每次调用前询问你(Claude Code 在所有权限模式下都会这样做)。设置 MCP_CONFIRM=elicit 后,服务会根据参数生成一行提示并自行询问你:

enable-banking: Bank consent (PSD2, read-only: balances and transactions) with Example Bank (DE), personal accounts, every account the bank offers, valid 180 days: until 2030-07-01 if confirmed today

询问你时会计算结束日期,调用运行时也会再次计算,因此稍后确认会因延迟而推迟结束日期。账户持有人在其银行处批准后,访问权限即开始生效。

故障排查

config:“未设置 ENABLE_BANKING_CONFIG”,或消息中提到了 app.json。将 ENABLE_BANKING_CONFIG 设置为可读取的 app.json,并将 ENABLE_BANKING_KEY(或 private_key)设置为密钥。

auth:“无法使用位于……的私钥”。密钥文件不存在、无法读取,或不是 RS256 私钥。将 ENABLE_BANKING_KEY 或 private_key 指向控制面板保存的 .pem 文件;下次调用时会重新读取,无需重启。

api 返回状态码 401 或 403。 Enable Banking 拒绝了签名令牌: 密钥与 application_id 不匹配(例如,生产环境 ID 配的是沙盒密钥)。

api 的 reason 为 EXPIRED_SESSION、REVOKED_SESSION、CLOSED_SESSION 或 SESSION_DOES_NOT_EXIST,或状态码为 422 或 404,但前一天调用还正常。 用户已在银行应用中撤销授权,或授权已过期;重试也无法恢复。按照首次运行中的第 3 至第 5 步重新授权。

complete_auth 返回的 api 错误,其 reason 为 EXPIRED_AUTHORIZATION_CODE、 WRONG_AUTHORIZATION_CODE 或 outcome_unknown。 授权码只能使用一次,且有效期只有几分钟;若兑换请求未成功,则无法再次兑换。重新运行 start_auth,并在批准后立即调用 complete_auth。

api 的 reason: "ASPSP_RATE_LIMIT_EXCEEDED"。 当天的账户读取次数已用完。等待一天,然后每个时间段读取一次,并用筛选条件缩小范围。

input:“银行拒绝了授权:……”。账户持有人拒绝了授权,或银行发生故障;请重新运行 start_auth。**“那里没有 code 参数”**表示你粘贴的是 start_auth 返回的链接,而不是银行重定向回来的地址。

工作原理

账单

金额始终以十进制字符串保存,绝不转成 JavaScript 数字,因为后者只能保留 15 到 17 位有效数字(9007199254740993.01 会变成 9007199254740992)。Enable Banking 会发送无符号金额和 credit_debit_indicator;get_transactions 会根据该文本添加正负号,支出为负数。如果某行的金额以 JSON 数字形式返回,或不是普通十进制数,该行会带有 amountWarning。

搜索在读取后进行:银行只会返回某个日期范围内的所有行。筛选后的结果会回显筛选条件,并同时显示 fetched(读取的行数)和 count(匹配的行数)。

  • text 会搜索交易对手的名称和 IBAN、付款备注以及分录参考号,不区分大小写、变音符号,也会忽略 IBAN 中的空格:santier 可以匹配 ȘANTIER EXEMPLU SRL,以及某些银行仍会发送的带 cedilla 的 Şantier。
  • direction 为 credit(收入)或 debit(支出)。
  • amount_min 和 amount_max 会限定金额大小,忽略正负号,边界值也包括在内,并按精确十进制数处理;无法精确读取金额的行会被排除,并计入 amountUnreadable。
  • date_from 和 date_to 均包含边界日期;留空则不设限。transaction_status 默认为 booked,可填写名称(pending、cancelled 等)或 PSD2 代码;留空则使用银行的默认值。

多个账户会逐个读取,因为银行会限制突发请求;每行都会注明所属账户。被拒绝的账户会连同错误和补救方法列在 accounts 中,与其他账户的行并列。首次读取前会先检查参数,包括账户 uid(每次授权后都会变化的 UUID)的格式,因此拼写错误不会消耗任何资源。系统会一直读取后续页面,最多 200 页。

交易对手是另一方。 对于借记交易,debtor_account 是你自己的 IBAN,因此会根据交易方向选取另一方。汇款备注行会用一个空格连接,因为银行可能在任意位置拆分参考信息。

导出文件包含以下列:account_label、account_iban、booking_date、value_date、direction、amount、currency、counterparty_name、counterparty_iban、remittance、reference、status、bank_code、merchant_category_code、amount_warning。每个单元格都会加引号;对于可能被电子表格当作公式执行的内容(以 =、+ 或 @ 开头),会在前面加上一个撇号,但负数金额除外。每个文件名都包含其范围、日期和创建时间,因此不会覆盖他人正在打开的文件;文件权限为 0640。

授权和 sessions.json

会先保存授权,再执行其他操作,因为 Enable Banking 只会显示一次会话 ID,再次获取则需要账户持有人重新进行身份验证。complete_auth 会交换代码并保存结果,然后获取每个账户的详细信息;如果这一步失败,授权仍然有效,该账户会带有 detailsError。新银行的授权会命名为 <bank>_<country>(example_bank_de),除非你提供了 label。

sessions.json 是其他程序也能读取的格式,定义于 src/domain/sessionsFile.ts:

  • 以标签为键的对象(a-z 0-9 _ -,且在任意位置均可作为标识符);
  • 每个条目均为 POST /sessions 的原始响应:session_id、accounts(含 uid、account_id.iban、identification_hash 等)、aspsp、psu_type、access.valid_until;
  • 使用双空格缩进的 JSON,文件权限为 0600;在锁定状态下以原子方式写入,并保留其他标签。先将先前的文件重新序列化并写入 sessions.json.bak;如果它不是 JSON 对象,则将其另存为 sessions.json.unreadable-<ms>。

identification_hash 用于在不同授权之间识别账户,将续期授权关联到被其替代的授权记录。如果交换结果缺少此字段,complete_auth 仍会保存授权,并报告 formatWarnings。

结束授权会关闭 Enable Banking 中的会话,从而结束银行的授权,然后移除相应标签;如果银行已结束授权,也会移除该标签。如果银行拒绝结束授权,这里的状态不会改变。

请求

没有可刷新的授权。 每次尝试都会使用私钥即时签署 JWT(RS256,有效期为五分钟,application_id 作为 kid),因此 health 失败意味着密钥或 ID 有误,而非已过期。src/infra/http.ts 会在 5xx 错误或连接中断时最多重试读取四次,将 401 或 422 视为最终结果,并且绝不会重新发送 Enable Banking 可能已处理的 POST。

线缆类型由 openapi-typescript 根据 Enable Banking 的 OpenAPI 描述生成(npm run gen:types -w @foreverworks/mcp-enable-banking;请检查差异)。src/domain/schema.ts 添加了两项经验证的调整:可选字段可以为 null(对账单的最后一页有 continuation_key: null),金额类型为 string | number。

仅缓存银行目录(按国家缓存一小时,存于内存中):所有人看到的内容都相同。npx tsx scripts/smoke.ts 会从真实授权中读取过去三天内的一份对账单;加上 --consent 时还会续期授权,这需要账户持有人参与。

局限

  • 仅提供账户信息(AIS):不发起支付,也无此计划。
  • 创建和续期授权都需要账户持有人:银行身份验证正是 PSD2 的核心。
  • 每项授权都会请求 180 天和所有账户。 如果银行的 maxConsentDays 更短,银行会拒绝,而不会自动缩短期限。
  • 不保留自己的历史记录(无缓存、提醒或类别),因此每份对账单都是向银行发起的读取请求。需要减少读取次数的程序应维护自己的账本,sessions.json 就是为此设计的。
  • 每个服务仅支持一个应用:沙盒和生产环境各自需要一套配置。

其他 Enable Banking 服务

检索日期:2026-10-21。Enable Banking 没有发布任何服务:其 GitHub 组织提供 API 示例、命令行工具和 eIDAS 经纪服务,官网也未提及 MCP。以下四个社区服务通过它读取账户:

  • npm 上的 enable-banking-mcp,下载量最高(截至 2026-10-18 的当月下载量为 752):在 macOS 上通过 stdio 运行,将密钥存放在 Keychain 中,仅供个人非商业用途。
  • npm 上的 bankmcp(当月下载量为 555):可本地运行,也可托管在其自有登录系统后,并提供会调用 webhook 的监控功能。金额会转换为浮点数。
  • GitHub 上的 banking-mcp:运行于 Cloudflare Worker,通过 OAuth 保护,并将余额和交易记录存入自己的数据库,还提供类别和导出功能;通过命令行而非工具关联银行。
  • GitHub 上 elcukro 开发的 bank-mcp:除 Enable Banking 外,还支持 Plaid、Tink 和 Teller。金额会转换为浮点数。

本服务旨在实现其他服务都不具备的功能:金额从银行到答案始终保留为精确的十进制字符串;启动授权时会调用 money 工具,确认内容会列出银行、账户和结束日期;授权按标签保存在其他程序可读取的文件中,并备份上一个文件,且按账户保存将续期与历史记录关联起来的哈希。它不具备其他服务提供的功能:提醒(bankmcp)、本地缓存和类别(banking-mcp),以及 Enable Banking 之外的银行(bank-mcp)。

评论

支持 Markdown

第一次接触 MCP?

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

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