EU Open Banking MCP
EU Open Banking MCP
Un servidor MCP autohospedado y de solo lectura para acceder a las cuentas bancarias europeas personales a través de Enable Banking, protegido y desplegado en Cloudflare Workers.
[!IMPORTANT] Trata cada despliegue como un sistema financiero privado. El repositorio es de código abierto; tu Worker, tu URL de MCP, tus secretos, tus IDs de sesión, tus IDs de cuenta y tus datos financieros son privados.
Por qué existe
ChatGPT Finances demuestra lo que es posible cuando un asistente puede razonar sobre saldos y transacciones reales. Su conexión con las cuentas funciona con Plaid y está actualmente disponible en Estados Unidos.
Este proyecto surgió porque no pude encontrar una vía directa y comparablemente autohospedable para cuentas personales europeas. En Europa existe la banca abierta, pero las personas siguen accediendo a los datos bancarios mediante proveedores regulados cuyos procesos de onboarding en producción y APIs varían. Los servidores MCP publicados por Plaid son útiles para herramientas de desarrollo y diagnósticos de producción, pero no exponen los saldos y las transacciones de una persona como herramientas MCP de finanzas personales.
This project fills that narrow gap: una persona despliega un único MCP disponible, autoriza solo sus propias cuentas bancarias y deja que sus clientes MCP elegidos realicen un análisis de solo lectura acotado. Es una infraestructura de uso en personal, no un proyecto financiero alojado ni un agregador multiusuario.
Related MCP server: openbanking-mcp
Por qué Enable Banking
De los proveedores evaluados, Enable Banking ofreció la opción más simple para un despliegue personal autohospedado. Su modo de producción restringida permite expresamente activar una aplicación vinculando las cuentas del propio propietario antes de firmar un acuerdo comercial, incluso para uso personal no comercial. La aplicación solo puede leer entonces esas cuentas vinculadas. Consulta la guía de cuentas vinculadas de Enable Banking.
Ese modelo se ajusta al límite de seguridad de este proyecto:
el panel de control de Enable Banking es la lista blanca de cuentas;
el flujo de autorización del banco crea el consentimiento revocable de la API;
el MCP expone solo operaciones de lectura fijas sobre las cuentas cubiertas por ambos elementos.
La vinculación en el panel no es en sí misma una autorización de la API. Después del despliegue, /setup sigue enviando al propietario por el flujo de consentimiento de su banco y almacena el identificador de sesión de Enable Banking resultante. Este segundo paso es necesario incluso si la misma cuenta ya estaba vinculada en el panel.
Arquitectura
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]Cliente → MCP: Cloudflare Access Managed OAuth, restringido al propietario del despliegue.
MCP → Enable Banking: un JWT RS256 de una hora firmado con una clave privada almacenada conol de Cloudflare Workers.
Almacenamiento: KV almacena únicamente los IDs de sesión de Enable Banking creados a través del flujo de configuración o protegido.
Lecturas en línea de cuentas: el Worker continúa reenvía la IP del cliente que se conectó a Cloudflare y el agente de usuario del cliente MCP como cabeceras
Psu-Ip-AddressyPsu-User-Agentde Enable Banking. Estos valores tienen el alcance de la solicitud y no se almacenan. Esto confirma al banco que el propietario conectado solicitó activamente los datos.
El Worker no almacena saldos, transacciones, UUIDs de cuentas, IBANs, códigos de autorización ni respuestas de proveedores. Las respuestas usan Cache-Control: no-store.
Herramientas
Herramienta | Propósito | Límites |
| Descubre cuentas activas y metadatos proporcionados por el banco | 20 sesiones autorizadas, 20 cuentas activas |
| Una cuenta descubierta o todas las cuentas activas | Resultados parciales por cuenta; secuencial dentro de cada banco |
| Transacciones normalizadas paginadas | 366 días, 200 resultados por respuesta |
| Búsqueda de texto en los metadatos de las transacciones | 366 días, 5 páginas del proveedor, 100 coincidencias |
| Totales de crédito/importe/netos por moneda | 366 días, 20 páginas, 10 000 transacciones |
finance_list_accounts devuelve un accountId opaco y específico de cada sesión. Las herramientas que se dirigen a una cuenta aceptan ese ID y lo verifican contra las sesiones activas de Enable Banking antes de usarlo. No se requieren alias ni UUIDs de cuenta copiados manualmente.
Los valores nextCursor de la paginación contienen un estado de continuación codificado; son opacos pero no confidenciales. Devuelve sin cambios con la misma cuenta y los mismos filtros. El Worker antes valida su contexto incrustado antes de usarlos.
Todas las herramientas son de solo lectura, no destructivas e idempotentes. Los códigos de proveedor se normalizan en valores descriptivos como intermining_available, booked y professional. Los múltiples saldos de una misma cuenta son métricas alternativas y nunca deben sumarse. Los cálculos con dinero usuario con energía con precisión decimal y nunca combinan divisas.
Para un refresco completo de saldos, llama a finance_get_balances una ves accountId. Descubre todas las sesiones activas disponibles, por lo que no es necesaria una llamada previa a finance_list_accounts. La respuesta conserva las saldos exitosas cuando otra cuenta falla y devuelve por separado fallos seguros por cuenta. No debes reiniciar inmediatamente las cuentas que devuelven async_provider_rate_limited.
Instalación
La instalación establece tres relaciones de confianza separadas: el Worker demuestra su identidad a Enable Banking, el banco otorga al Worker un consentimiento revocable y Cloudflare Access limita quién puede llamar a la MCP.
Paso | Qué establece | Por qué existe |
Registrar la aplicación de Enable Banking | Identidad de Worker → Enable Banking | El UUID de la aplicación y la clave RSA firman las peticiones al proveedor |
Vincular cuentas en el panel de Enable Banking | Lista de direcciones de producción | Una aplicación restringida solo puede obtener datos de cuentas personales preaprobadas |
Desplegar el Worker | Servidor MCP privado y almacenamiento de sesión | Cloudflare ejecuta el código y provee KV solo para IDs de de sesión |
Activar Cloudflare Access y Managed OAuth | Identidad de cliente MCP → Worker | El Worker privado rechaza a los que llames que no están explicitamente permitidos |
Conectar cada banco a través de | Consentimiento del banco y sesión activa de fine-grained session no | La lista de permitidas limita el alcance; la autorización del banco limpia que realmente otorga el accesso a la API |
1. ¿Qué se necesita para Cloudflare y Fine?
Necesitas:
una cuenta de Cloudflare con algo de dominio
workers.devy Zero Trust;una aplicación de Enable Banking en modo restringido;
el UUID de la aplicación no y su clave privada RSA.
Elige el nombre del Worker antes de interactuar con la aplicación de Enable Banking. Register esta URL de devolución, reemplazando ambos click:
https://<worker-name>.<account-subdomain>.workers.dev/callbackRegister a production application, generate your RSA key ring with external user and upload the certificate chain PEM. Keep private key: the script command will use it as CLIENT_ID. Do not add it to the project or publish it.
En el panel de alquiler de Enable Banking, vincula cada cuenta que la aplicación r restringa requiere en el acceso. La explicación del dashboard is not la autorización; sirve como lista blanca de cuentas. Worker completará do relación with /setup after deployment. Consult the guía de cuentas vinculadas de Enable Banking.
For personal use, check current Enable Banking offer by "For the Customer".
2. Implement a Cloudflare
Usa el botón Deploy to Cloudflare de arriba. The deployment flow de Cloudflare:
Copia el repositorio en tu cuenta de GitHub o GitLab.
Solicita la
ENABLE_HOST_APPLICATION_IDyENABLE_BANKENT_PRIVATE_KEY_PEM.Aprovisiona el namespace
SESSION_STOREde KV.Asocia la política correspondiente de Cloudflare Access.
Compila y despliega el Worker con Workers Builds.
Los dos campos para secret passwords iniciales contienen valores de prueba integrados en . -The replace-me` private key. No son credenciales reales. Sustituye these with UUID and production private key for deployment. Antes de conectar Cloudflare.
Cloudflare presente Access como opcional porque los Workers pueden ser públicos, but this project is undisputed. En la página de deployment, activa Protect with Cloudflare Access, que All traffic y añade una política de autenticación. Para un desarrollo personal, permite solo tu identidad exacta (o tu cuenta de Cloudflare si solo pertenecen a ella miembros de confianza). Previews only no protege el Worker de producción.
Cloudflare tiene doc that en Deploy to Cloudflare tien.
3. Activar Managed OAuth
Ve a Zero Trust → Access→Aplicaciones → la aplicación de Acceso creada durante el despliegue.
Abre Advanced settings, activa Managed OAuth y guarda.
If Protect with Cloudflare Access no estaba habilitado during deployment, aplica manualmente los enicates de Access al Worker. Until Access no se ha aplicado, the Worker entrará en fail-closed con 403 access_required porque Cloudflare no aporta ctx.access. The Worker-level Access protects /, /setup, /callback, and /mcp in all domain of the Worker. Consult the curve of Access de nivel Worker de Cloudflare.
Managed OAuth expone los metadatos de descubrimiento de recursos y server de autorización that use the MCP clients. Cloudflare checks the request before calling the Worker; no second comment does "HTTP" JWT verifier.
4. Autorizar sus bancos
Open
https://<your-worker>.workers.dev/setup.Elige the country and if you use personalized or enterprise. The next, ellige the banco in list of supported banks for Enable Banking.
Autoriza el acceso en tu banco. The callback checks
state, can be exchanged the code once, and store only the resulting session ID in KV.Repite para cada entrada in each bank. Un single authorization to you prove discover multiple accounts.
Si el consentimiento caduca o se revoca, retour to /setup, make inactive session remove and reconnect bank. Al quitar under connection also asks Enable Banking to close its consent. Enable Banking creates new session IDs and account IDs during the re-auth; MCP read that automatically.
5. Connect with MCP client
Use this MCP URL:
https://<your-worker>.workers.dev/mcpVerification
Before connecting a model:
That without authentication is Access;
/setupshows only sessions created by this implementation;with MCP
tools/listyou see exactly the five tools of min;finance_list_accountsreturns opaque account IDs but not IBANs;you can do small balance request and transactions;
for a request in balances of all accounts no return accounts have been processed even if another fails;
Identified in the Cloudflare logs are no payload, secret, token or session ID.
Deliberately there is no /health endpoint. Cloudflare Workers don't need løs, "/mcp" the platform helps protected configuration are the main checks for application.
Propiedades de seguridad
Origen ascendente fijado: las solicitudes solo pueden dirigirse a
https://api.enablebanking.com.Operaciones del proveedor fijadas: la configuración puede iniciar, completar y cerrar la autorización de la cuenta; las herramientas MCP solo realizan llamadas de lectura documentadas.
Las lecturas de cuentas activadas por el usuario reenvían los valores acotados de
Psu-Ip-AddressyPsu-User-Agent, derivados de la solicitud entrante de Cloudflare; el descubrimiento de sesiones y las solicitudes de autorización no reciben esas cabeceras.Control de cuentas: cada ID de cuenta proporcionado debe pertenecer a una sesión activa almacenada.
Las rutas de configuración y de devolución de llamada están protegidas por Access a nivel de Worker y validan el origen y el estado.
Los códigos de autorización se intercambian inmediatamente y nunca se persisten.
KV solo almacena IDs de sesión y se encuentra cifrado en reposo por Cloudflare.
Entradas, fechas, páginas, resultados, respuestas del flujo ascendente y tiempos de espera acotados.
Los fallos del proveedor registran solo una operación normalizada, el estado HTTP, el código de error permitido del proveedor y un valor de
Retry-Afteracotado; nunca identificadores, cabeceras de petición, cuerpos de respuesta del proveedor ni datos financieros.Sin pagos, herramientas HTTP genéricas, persistencia de datos financieros, caché de respuestas, CORS ni registro de información sensible.
Consulte SECURITY.md para ver el modelo de amenazas y la política de divulgación.
Desarrollo
bun run typecheck
bun run test
bun run checkLas pruebas se ejecutan en el runtime de Cloudflare Workers y cubren la configuración, el comportamiento de bloqueo ante fallos de Access, authorization of the configuration, la detección de sesiones, el control de cuentas, los esquemas de herramientas de MCP, la construcción del JWT de Enable Banking, la normalización y las respuestas acotadas.
Alcance del proveedor
Enable Banking es el primer módulo de proveedor. Los futuros proveedores deben exponer la misma interfaz financiera estrecha y normalizada en lugar de filtrar las operaciones HTTP genéricas del proveedor hacia las herramientas MCP. Las contribuciones deben seguir siendo de solo lectura desde MCP e incluir pruebas de validación de identificadores y normalización de las respuestas.
Wait — I included "Access" as English (good), "Worker" as English, but "the configuration" in Spanish: "la autorización de la configuración". I had "authorization of the configuration" — fix: "la autorización de la configuración".
Also "descubrimiento de sesiones" vs "detección" — keep "descubrimiento" for consistency.
Also heading "Alcance del proveedor" matches.
Also "Access" heading: "comportamiento de acceso a fallos" — I wrote "comportamiento de acceso ante fallos de Access" — better "comportamiento de cierre ante fallos de Access". Let me use "fail-closed" appropriately.
Let me also correct the trailing "orígenes" in bullet: "CORS ni orígenes" — typo no, but "CORS" should be followed by "o registro": my bullet: "...caché de respuestas, CORS ni registro de información sensible." Good.
One more thing: the heading "## Development" -> "## Desarrollo". Yes.
Review "apretao" "página de resultados" — fine.
Now, the phrase "Fixing access to the session": "descubrimiento de sesiones" or "detección de sesiones": both. I use "descubrimiento" consistently.
I further think about "proveedor cuerpo" — in Spanish HTTP: "cuerpos de respuesta del proveedor". Keep "cuerpos del proveedor".
And "solicitudes" vs "peticiones" — I used "solicitudes" mostly; "cabeceras de petición" vs "de solicitud" — make consistent: "solicitudes".
Final output must be exact. I'll write the complete final message again cleanly without commentary* Origen ascendente fijado: las solicitudes solo pueden dirigirse a https://api.enablebanking.com.
Operaciones del proveedor fijadas: la configuración puede iniciar, completar y cerrar la autorización de la cuenta; las herramientas MCP solo realizan llamadas de lectura documentadas.
Las lecturas de cuentas activadas por el usuario reenvían los valores acotados de
Psu-Ip-AddressyPsu-User-Agent, derivados de la solicitud entrante de Cloudflare; el descubrimiento de sesiones y las solicitudes de autorización no reciben esas cabeceras.Control de cuentas: cada ID de cuenta proporcionado debe pertenecer a una sesión activa almacenada.
Las rutas de configuración y de devolución de llamada están protegidas por Access a nivel de Worker y validan el origen y el estado.
Las códigos de autorización se intercambian inmediatamente y nunca se persisten.
KV solo almacena IDs de sesión y está cifrado en reposo por Cloudflare.
Entradas, fechas, páginas, resultados, respuestas ascendentes y tiempos de espera acotados.
Los fallos del proveedor registran solo una operación normalizada, el estado HTTP, el código de error permitido del proveedor y un valor de
Retry-Afteracotado—nunca identificadores, cabeceras de solicitud, cuerpos del proveedor o datos financieros.Sin pagos, herramientas HTTP genéricas, persistencia de datos financieros, caché de respuestas, CORS ni registro de información sensible.
Consulte SECURITY.md para ver el modelo de amenazas y la política de divulgación.
Desarrollo
bun run typecheck
bun run test
bun run checkLas pruebas se ejecutan en el runtime de Cloudflare Workers y cubren la configuración, el comportamiento de cierre ante fallos de Access, la autorización de la configuración, el descubrimiento de sesiones, el control de cuentas, los esquemas de herramientas MCP, la construcción del JWT de Enable Banking, la normalización y las respuestas acotadas.
Alcance del proveedor
Enable Banking es el primer módulo de proveedor. Los futuros proveedores deben exponer la misma interfaz financiera normalizada y acotada, en lugar de filtrar las operaciones HTTP genéricas del proveedor hacia las herramientas del MCP. Las contribuciones deben seguir siendo de solo lectura desde MCP e incluir pruebas de validación de identificadores y de normalización de las respuestas.
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