A serverless Monzo → Claude connector on Cloudflare Workers

Já existem alguns servidores MCP do Monzo (partymola, BfdCampos, um via npm), e eles são bons — mas todos são servidores stdio locais que você executa na sua própria máquina. Este é o primeiro remoto/serverless que encontrei: ele vive em um Cloudflare Worker, então você autentica uma vez e ele te acompanha em todas as superfícies do Claude, sem nada para manter rodando.

Documentação

Conector Monzo → Claude

Claude ⇄ Cloudflare Worker ⇄ Monzo

Um servidor MCP remoto, executado em um Worker da Cloudflare, que dá ao Claude acesso somente leitura à sua conta Monzo via OAuth.

Depois de conectado no claude.ai, você pode perguntar coisas como "qual é o meu saldo no Monzo?", "liste minhas transações recentes", ou "quanto há nos meus cofrinhos de poupança?" em qualquer chat — web, desktop ou celular. Autentique uma vez; ele acompanha você em todos os lugares. Sem laptop, sem servidor local, nada para manter rodando.

Não afiliado ao Monzo. Esta é uma ferramenta de uso pessoal construída sobre a API de desenvolvedor pública do Monzo. Use por sua conta e risco, e leia o modelo de segurança antes de implantar.

O que ele expõe

FerramentaDescrição
get_accountsContas abertas (pessoal, conjunta, Flex, recompensas) com ids/códigos de classificação
get_balanceSaldo, total incluindo cofrinhos e gasto de hoje — uma conta ou todas
list_transactionsTransações recentes (últimos 90 dias), filtráveis por data
get_transactionDetalhes completos de uma única transação
list_potsCofrinhos de poupança e seus saldos

Somente leitura por design: sem pagamentos, transferências ou movimentações de cofrinhos — as ferramentas simplesmente não existem, então nenhuma quantidade de injeção de prompt pode mover dinheiro.

Arquitetura

Claude (claude.ai)  ──OAuth──>  This Worker  ──OAuth──>  Monzo API
                                     │
                     workers-oauth-provider (KV)  +  McpAgent (Durable Object)
  • @cloudflare/workers-oauth-provider é o servidor OAuth ao qual o Claude se autentica — ele lida com registro dinâmico de clientes, /authorize, /token e armazenamento de concessões no KV.
  • src/monzo-handler.ts faz a ponte com o OAuth do Monzo (autorizar → e-mail com link mágico → aprovação no aplicativo → callback).
  • src/mcp.ts é o McpAgent — um Durable Object por usuário conectado, que guarda os tokens Monzo desse usuário e os renova automaticamente via o token de atualização.
  • src/monzo.ts é o cliente fino da API do Monzo.

Modelo de segurança

Vale a pena entender antes de implantar — o design isola usuários por construção:

  • Nenhuma credencial bancária permanente no Worker. Os únicos segredos no nível do Worker são o client_id/client_secret do OAuth do Monzo, que podem trocar códigos de autorização, mas não conseguem ler nenhum dado de conta por conta própria.
  • Tokens vivem por concessão, não por Worker. Quando um usuário conclui o fluxo OAuth, os tokens Monzo dele são armazenados criptografados dentro da concessão dele (completeAuthorization({ props: ...tokens })). Cada solicitação MCP é resolvida pelo token de portador do chamador para a concessão dele, o Durable Object dele, a conta Monzo dele. Não existe solicitação que alcance os dados de outro usuário.
  • Solicitações não autenticadas recebem 401. O endpoint /mcp só responde a tokens de portador emitidos pelo próprio Worker.
  • O Monzo adiciona suas próprias barreiras. Clientes OAuth do portal de desenvolvedor só autorizam o dono do cliente (além de colaboradores explicitamente adicionados), e todo login exige aprovação no aplicativo Monzo no celular do titular da conta (SCA).
  • Os escopos são somente leitura e os endpoints de pagamento/transferência nunca são chamados.

Os riscos residuais são os usuais para qualquer conector: proteja os segredos implantados e trate sua sessão do claude.ai como a credencial que ela é.

Configuração

  1. Registre um cliente OAuth do Monzo em https://developers.monzo.comConfidencialidade: Confidencial (exigido para tokens de atualização). URL de redirecionamento: https://<your-worker>.workers.dev/callback.

  2. Preencha os segredos em .dev.vars (ignorado pelo git) para desenvolvimento local:

    MONZO_CLIENT_ID=oauth2client_...
    MONZO_CLIENT_SECRET=mnzconf...
    COOKIE_ENCRYPTION_KEY=<openssl rand -hex 32>
    
  3. Crie o namespace KV e cole o id retornado em wrangler.jsonc (substituindo <YOUR_OAUTH_KV_NAMESPACE_ID>):

    npx wrangler kv namespace create OAUTH_KV
    
  4. Implante e envie os segredos:

    npx wrangler deploy
    npx wrangler secret put MONZO_CLIENT_ID
    npx wrangler secret put MONZO_CLIENT_SECRET
    npx wrangler secret put COOKIE_ENCRYPTION_KEY
    
  5. Adicione o conector no claude.ai → Configurações → Conectores → Adicionar conector personalizado → https://<your-worker>.workers.dev/mcp → autorize. Você será redirecionado pelo login do Monzo (e-mail com link mágico + aprovar no aplicativo Monzo), e então o Claude mostra as cinco ferramentas.

Funciona também no Claude Code:

claude mcp add --transport http monzo https://<your-worker>.workers.dev/mcp

Notas e limitações

  • O Monzo só expõe os últimos 90 dias de transações, a menos que você reautentique imediatamente após aprovar o acesso; este conector aceita essa janela contínua.
  • Os clientes de desenvolvedor do Monzo são de usuário único, a menos que o Monzo aprove seu aplicativo para produção — adequado para o caso de uso pessoal para o qual foi construído.
  • Os segredos ficam em .dev.vars (local) e nos segredos do Wrangler (produção) — nunca no git. O .gitignore garante isso.

Licença

MIT — faça o que quiser, sem garantia. Os nomes e logotipos do Monzo, Claude e Cloudflare pertencem aos seus respectivos proprietários.