EU Open Banking MCP
EU Open Banking MCP
Самостоятельно размещаемый MCP-сервер только для чтения для доступа к личным европейским банковским счетам через Enable Banking, защищенный и развернутый на Cloudflare Workers.
[!IMPORTANT] Относитесь к каждому развертыванию как к частной финансовой системе. Репозиторий имеет открытый исходный код; ваш Worker, URL-адрес MCP, секреты, идентификаторы сессий, идентификаторы счетов и финансовые данные являются конфиденциальными.
Зачем это нужно
ChatGPT Finances показывает, какие возможности открываются, когда ассистент может работать с реальными остатками и транзакциями. Подключение к счетам в нем реализовано через Plaid и в настоящее время доступно только в США.
Я создал этот проект, потому что не смог найти столь же прямой, развертываемый на собственной инфраструктуре путь для личных европейских счетов. В Европе существует Open Banking, но частные лица по-прежнему получают банковские данные только через регулируемых провайдеров, у которых процедуры перехода в production и сами API различаются. Опубликованные Plaid MCP-серверы полезны для инструментов разработки и диагностики production, но они не предоставляют остатки и транзакции пользователя в виде MCP-инструментов для личных финансов.
Этот проект заполняет этот узкий пробел: один человек разворачивает один частный MCP, авторизует только свои банковские счета и позволяет выбранным MCP-клиентам выполнять ограниченный анализ только для чтения. Это инфраструктура для личного использования, а не финансовый продукт или многопользовательский агрегатор.
Related MCP server: openbanking-mcp
Почему Enable Banking
Среди оцененных провайдеров именно Enable Banking оказался самым простым решением для самостоятельного персонального развертывания. Его режим restricted-production не только допускает активацию приложения путем connecting own account владельца до подписания коммерческого соглашения, в том числе для индивидуального некоммерческого использования. После этого приложение может читать только эти связанные счета. См. руководство по счетам restricted-production от Enable Banking.
Такая модель соответствует границе безопасности этого проекта:
панель управления Enable Banking является белым списком счетов;
процесс авторизации банка создает отзываемое согласие на API;
MCP предоставляет только фиксированные операции чтения, ограниченные счетами, подпадающими под одновременное действие обоих уровней.
Привязка на панели управления сама по себе не является авторизацией API. После развертывания /setup все равно проводит владельца через процесс согласия в его банке и сохраняет полученный идентификатор сессии Enable Banking. Этот второй шаг обязателен даже в случае, если этот же счет уже был привязан на панели управления.
Архитектура
flowchart LR
C[ChatGPT, Codex, or another MCP client] --> A[Cloudflare Access]
A -->|platform-validated ctx.access| W[Stateless MCP Worker]
W -->|session IDs only| K[Workers KV]
W -->|fresh RS256 JWT per call| E[Enable Banking]
E --> B[Your bank]Клиент → MCP: MCP Access Managed OAuth, доступ ограничивается только владельцем развертывания.
MCP → Enable Banking: часовой RS256 JWT, подписан закрытым ключом, хранящимся как секрет Worker.
Storage: KV contains only identifiers of Enable Banking session, created через защищенный процесс настройки.
Чтение онлайн-счетов: Worker передает IP-адрес подключающегося клиента, предоставленный Cloudflare, и User-Agent MCP-клиента как заголовки Enable Banking
Psu-Ip-AddressandPsu-User-Agent. These request-scoped values are not stored or logged. The bank states that the logged-in owner specifically requested data requested.
Worker не хранит остатки, транзакции, UUID счетов, IBAN\s, authorization codes и ответы провайдера. Ответы используют Cache-Control: no-store.
Инструменты
Инструмент | Назначение | Ограничения |
| Обнаружение активных счетов и переданных метаданных | 20 авторизованных сессий, 20 активных счетов |
| Один обнаруженный счет или все активные счета | Частичные результаты по счетам; последовательно по банку |
| Постранично нормализованные транзакции | 366 дней, 200 результатов на ответ |
| Текстовый поиск по транзакционной информации | 366 дней, 5 страниц провайдера, 100 совпадений |
| Итоги по проведенным кредитам, дебету и сальдо, разбитым по валюте | 366 дней, 20 страниц, 10 000 транзакций |
finance_list_accounts возвращает непрозрачный accountId, привязанный к сессии. Инструменты, работающие с одним счетом, принимают этот ID и проверяют его по активным Enable-сессиям перед использованием. Никакие and чипы или manual copy of UUID not required.
Параметры nextCursor (курсорные значения) pagePagging инкапсулируют состояние продолжения; они непрозрачны, но не ильным совместным. Not используйте его повторно with other cash and filters; The Worker checks it before using.
All tool calls are read-only, non-destructively. Provider codes simplified to descriptive values like interim_available, booked, professional. Several balance messages for construction: these are alternative indicators and never sum. Monetary calculations are always decimal, no mixing of currencies.
To completely update the balance, call finance_get_balances once without specifying accountId. The tool will find all active sessions Avtomatodich, so calling finance_list_accounts beforehand is not required. The response retains the successful summaries if one account returns an error and, mundtide, returns error messages for the account in safe collection Отдельные per-account errors. Do not systematically retry accounts that returned aspsp_rate_limited.
Установка
Установка устанавливает три независимых отношения доверия: Worker доказывает свою идентичность система enable, банк предоставляет Worker отзываемое согласие, and Cloudflare Access limits the called resources.
Шаг | Что устанавливается | Почему это существует |
Регистрация приложения Enable Banking | идентичность Worker → Enable Banking ID | БИД и закрытый ключ приложения подписывают запраши к провайдерр |
Связь панели с Enable Banking | белый список счетов production | Restricted production app может получать данные only of preliminary validated personal accounts |
Изменить Worker | больной runtime MCP and session storage | Cloudflare выполняется code и предоставляет KV to store sessions only |
Encloiving Cloudflare Access and Managed OAuth | MCP client → Worker identity | Private Worker affects these callers who were not explicitly allowed |
Connect each bank through | согласие банка and active Enable session | Allow list sets the scope; grant API access only comprehensive BIA client agreement |
1. Подготовьте Cloudflare и Enable Banking
Вам понадобятся:
аккаунт Cloudflare с поддоменом
workers.devи Zero Trust;Enable Banking-приложение modes;
UUID приложения и его закрытый ключ RSA.
Выберите имя Worker во время регистрации приложения Enable Banking. Зарегирируйте этой callback URL, завершив transmitting both placeholders:
https://<worker-name>.<account-subdomain>.workers.dev/callbackЗарегистрируйте production-приложение, key generator outside the browser and install the public certificate in PEM format matches it. Keep private key: the deploy flow will store it as a Worker secret; никогда не помещайте в репозиторий и не передайте other.
After Control Enable Banking, dashboard populates the panel can be connected. Dashboard linking is a production token/permission list; this not WhatsApp entire API access. Worker should complete second authorization session /setup after deployment. See the linked-account guide from Enable Banking.
This repository is a communication project for personal, non-commercial use. Verify that your deployment is responsible under the current Terms use of Enable Banking.
2. Развертывание в Cloudflare
Use the Deploy to Cloudflare button above. Cloudflare will then:
copy this repo into your GitHub or GitLab account;
ask for
ENABLE_BANKING_APPLICATION_IDandENABLE_BANKING_PRIVATE_KEY_PEM;provision the
SESSION_STOREKV namespace;connect the requirement for this project in Cloudflare Access;
build and publish the Worker with Workers Builds.
The two secret fields initially contain repository placeholder values from .dev.vars.example: all-zero UUID and replace-me private key. They are not real credentials. Replace both fields with the production UUID and private key, then didn't deploy.
Cloudflare marks Access as optional, because Workers can be public, but this project requires an approach. In deployment page, enable Защита с помощью Cloudflare Access, select Весь трафик, and add an authentication policy. For personal calls, allow only your identity (or your Cloudflare account, if they contain only trusted people). Только предпросмотры do not protect the production Worker.
Cloudflare explains this in Deploy to Cloudflare.
3. Включите Managed OAuth
Open Zero Trust → Access controls → Applications → the Access application created during deployment.
Open Раширенные настройки, enable Managed OAuth and save.
If additional protection not enabled for Cloudflare Access during the deployment, connect its access to the Workera manually before continuous. Access needs to be connected, otherwise Worker will be required with 403 access_required error because Cloudflare has not provided ctx.access. Worker-level Access protects /, /setup, /callback and /mcp across all four associated domains. See Cloudflare's Worker-level Access guide.
Managed OAuth provides the metadata of the protected resource and 권한, which MCP clients use. Cloudflare checks the query before calling the Worker; this project does not make Cloudflare another payload.
4. Authorize your banks
Open
https://<your-worker>.workers.dev/setup.Choose a country и личный фактор if the entrance is personal or corporate, then select a bank from the live supported List Cloudflare API.
Authorize access in the bank. Callback validates data, exchanges the one-time code and stores only the resulting session ID in KV.
Repeat for each separate login. One authorization can produce multiple accounts.
If consent expires or is withdrawn: /about /setup, remove the inactive session and connect the bank again. Removing a link also asks Enable Banking to cancel the consent. Otherwise (after a new permission) Enable creates new newsletter session and tag пажа; MCP Finds them automatically.
5. Connect MCP client
Use this MCP URL:
https://<your-worker>.workers.dev/mcpПример Before verifying
Check, to check:
no MCP блат requests are rejected by the Access;
/setuplists only sessions that were created with this deployment itself;tools listshows exactly the five named tools;finance_list_accountsreturns encrypted account IDs and does not encode IBAN;does the status of a smaller balance and business operations run?
One request for all bank accounts returns a bank summary for accounts, even if the account is not operational;
Cloudflare logs are not net balance, transactions, secrets, records and session IDs.
There is deliberately no /health endpoint. Cloudflare Workers does not require it, and the checks are /mcp as the page setup by itself. In "plain language" "No offenses" "## Security characteristics" end.
Исправлено вышестоящее происхождение: запросы могут направляться только на
https://api.enablebanking.com.Исправлены операции провайдера: настройка может начинать, завершать и закрывать авторизацию аккаунта; инструменты MCP выполняют только документированные вызовы на чтение.
Инициируемые пользователем операции чтения аккаунта передают ограниченные значения
Psu-Ip-AddressиPsu-User-Agent, полученные из входящего запроса Cloudflare; запросы обнаружения сеансов и авторизации не получают эти заголовки.Контроль аккаунтов: каждый предоставленный идентификатор аккаунта должен принадлежать активному сохранённому сеансу.
Маршруты настройки и обратного вызова защищены Access на уровне Worker и проверяют источник/состояние.
Коды авторизации обмениваются немедленно и никогда не сохраняются.
KV хранит только идентификаторы сеансов и шифруется Cloudflare при хранении.
Ограничены входные данные, даты, страницы, результаты, ответы вышестоящих систем и таймауты.
При сбоях провайдера в журнал записываются только нормализованная операция, HTTP-статус, допустимый код ошибки провайдера и ограниченное значение
Retry-After— никогда идентификаторы, заголовки запросов, тела ответов провайдера или финансовые данные.Нет платежей, универсальных HTTP-инструментов, сохранения финансовых данных, кэширования ответов, CORS или регистрации чувствительных данных.
Модель угроз и политика раскрытия уязвимостей описаны в SECURITY.md.
Разработка
bun run typecheck
bun run test
bun run checkТесты выполняются в среде выполнения Cloudflare Workers и покрывают конфигурацию, поведение Access fail-closed, авторизацию настройки, обнаружение сеансов, контроль аккаунтов, схемы инструментов MCP, формирование JWT для Enable Banking, нормализацию и ограниченные ответы.
Область провайдера
Enable Banking — первый модуль провайдера. Будущие провайдеры должны предоставлять тот же узкий нормализованный финансовый интерфейс, а не раскрывать универсальные HTTP-операции провайдера через инструменты MCP. Вносимые изменения должны оставаться доступными только для чтения через MCP и включать тесты проверки идентификаторов и нормализации ответов.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that exposes Enable Banking API tools for interacting with bank accounts through Open Banking. It enables users to authenticate sessions, list accounts, and fetch transaction history or balances via a secure self-hosted server.2
- AlicenseBqualityBmaintenanceEnables read-only access to personal bank accounts via the TrueLayer API, allowing querying of accounts, balances, transactions, and generating financial analytics such as spending by category, subscriptions, and monthly summaries.9MIT
- AlicenseNot gradedqualityCmaintenanceA remote MCP server on Cloudflare Workers that gives Claude read-only access to your Monzo account, enabling balance checks, transaction listing, and pot management via natural language.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI tools to interact with a Firefly III personal finance instance via MCP protocol, deployed on Cloudflare Workers for low-latency global access.12ISC
Related MCP Connectors
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cver-me/EU-Open-Banking-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server