A serverless Monzo → Claude connector on Cloudflare Workers
Ya existen algunos servidores MCP de Monzo (partymola, BfdCampos, uno de npm), y son buenos, pero todos son servidores stdio locales que ejecutas en tu propia máquina. Este es el primero remoto/serverless que he encontrado: vive en un Cloudflare Worker, así que te autenticas una vez y te sigue a todas las superficies de Claude, sin nada que mantener en ejecución.
Documentación
Conector Monzo → Claude

Un servidor MCP remoto, que se ejecuta en un Worker de Cloudflare, que da a Claude acceso de solo lectura a tu cuenta de Monzo mediante OAuth.
Una vez conectado en claude.ai, puedes preguntar cosas como "¿cuál es mi saldo de Monzo?", "lista mis transacciones recientes" o "¿cuánto hay en mis bolsas de ahorro?" en cualquier chat — web, escritorio o teléfono. Autentica una vez; te sigue a todas partes. Sin portátil, sin servidor local, nada que mantener en ejecución.
No afiliado a Monzo. Esta es una herramienta de uso personal construida sobre la API de desarrollador pública de Monzo. Úsala bajo tu propio riesgo y lee el Modelo de seguridad antes de desplegarla.
Lo que expone
| Herramienta | Descripción |
|---|---|
get_accounts | Cuentas abiertas (personal, conjunta, Flex, recompensas) con ids/códigos de clasificación |
get_balance | Saldo, total incl. bolsas, y gastado hoy — una cuenta o todas |
list_transactions | Transacciones recientes (últimos 90 días), filtrables por fecha |
get_transaction | Detalle completo de una transacción individual |
list_pots | Bolsas de ahorro y sus saldos |
Solo lectura por diseño: no hay pagos, transferencias ni movimientos de bolsas — las herramientas simplemente no existen, así que ninguna cantidad de inyección de prompts puede mover dinero.
Arquitectura
Claude (claude.ai) ──OAuth──> This Worker ──OAuth──> Monzo API
│
workers-oauth-provider (KV) + McpAgent (Durable Object)
@cloudflare/workers-oauth-provideres el servidor OAuth al que Claude se autentica — maneja el registro dinámico de clientes,/authorize,/tokeny el almacenamiento de concesiones en KV.src/monzo-handler.tshace de puente con el OAuth de Monzo (autorizar → correo de enlace mágico → aprobación en la app → callback).src/mcp.tses elMcpAgent— un Durable Object por usuario conectado, que guarda los tokens de Monzo de ese usuario y los refresca automáticamente mediante el token de refresco.src/monzo.tses el cliente fino de la API de Monzo.
Modelo de seguridad
Vale la pena entenderlo antes de desplegar — el diseño aísla a los usuarios por construcción:
- Sin credencial bancaria permanente en el Worker. Los únicos secretos a nivel de Worker
son el
client_id/client_secretde OAuth de Monzo, que pueden intercambiar códigos de autorización pero no pueden leer ningún dato de cuenta por sí solos. - Los tokens viven por concesión, no por Worker. Cuando un usuario completa el baile
OAuth, sus tokens de Monzo se almacenan cifrados dentro de su concesión
(
completeAuthorization({ props: ...tokens })). Cada solicitud MCP se resuelve mediante el token de portador del llamante hasta su concesión, su Durable Object, su cuenta de Monzo. No existe solicitud que llegue a los datos de otro usuario. - Las solicitudes no autenticadas reciben 401. El endpoint
/mcpsolo responde a tokens de portador que el propio Worker emitió. - Monzo añade sus propias barreras. Los clientes OAuth del portal de desarrolladores solo autorizan al propietario del cliente (más colaboradores añadidos explícitamente), y cada inicio de sesión requiere aprobación en la app de Monzo en el teléfono del titular de la cuenta (SCA).
- Los alcances son solo de lectura y los endpoints de pago/transferencia nunca se llaman.
Los riesgos residuales son los habituales para cualquier conector: protege los secretos desplegados y trata tu sesión de claude.ai como la credencial que es.
Configuración
-
Registra un cliente OAuth de Monzo en https://developers.monzo.com — Confidencialidad: Confidencial (requerido para tokens de refresco). URL de redirección:
https://<your-worker>.workers.dev/callback. -
Completa los secretos en
.dev.vars(ignorado por git) para desarrollo local:MONZO_CLIENT_ID=oauth2client_... MONZO_CLIENT_SECRET=mnzconf... COOKIE_ENCRYPTION_KEY=<openssl rand -hex 32> -
Crea el espacio de nombres KV y pega el id devuelto en
wrangler.jsonc(reemplazando<YOUR_OAUTH_KV_NAMESPACE_ID>):npx wrangler kv namespace create OAUTH_KV -
Despliega y envía los secretos:
npx wrangler deploy npx wrangler secret put MONZO_CLIENT_ID npx wrangler secret put MONZO_CLIENT_SECRET npx wrangler secret put COOKIE_ENCRYPTION_KEY -
Añade el conector en claude.ai → Configuración → Conectores → Añadir conector personalizado →
https://<your-worker>.workers.dev/mcp→ autoriza. Serás redirigido a través del inicio de sesión de Monzo (correo de enlace mágico + aprobar en la app de Monzo), y entonces Claude muestra las cinco herramientas.
También funciona en Claude Code:
claude mcp add --transport http monzo https://<your-worker>.workers.dev/mcp
Notas y limitaciones
- Monzo solo expone las transacciones de los últimos 90 días a menos que reautentiques inmediatamente después de aprobar el acceso; este conector acepta esa ventana móvil.
- Los clientes de desarrollador de Monzo son de un solo usuario a menos que Monzo apruebe tu app para producción — suficiente para el caso de uso personal para el que está construido.
- Los secretos viven en
.dev.vars(local) y en los secretos de Wrangler (prod) — nunca en git. El.gitignorelo garantiza.
Licencia
MIT — haz lo que quieras, sin garantía. Los nombres y logotipos de Monzo, Claude y Cloudflare pertenecen a sus respectivos dueños.