trackmcp
Back to directory
silkyrich

monzo-claude-connector

View on GitHub

Read-only Monzo bank connector for Claude — remote MCP server on Cloudflare Workers

0 stars TypeScriptOthers Updated Jul 7, 2026

Documentation

Monzo → Claude Connector

Claude ⇄ Cloudflare Worker ⇄ Monzo

A remote MCP server, running on a Cloudflare

Worker, that gives Claude read-only access to your Monzo account over OAuth.

Once connected in claude.ai, you can ask things like *"what's my Monzo balance?"*,

*"list my recent transactions"*, or *"how much is in my savings pots?"* in any

chat — web, desktop, or phone. Authenticate once; it follows you everywhere.

No laptop, no local server, nothing to keep running.

> Not affiliated with Monzo. This is a personal-use tool built on Monzo's

> public developer API. Use at your own risk, and read

> Security model before deploying.

What it exposes

ToolDescription
`get_accounts`Open accounts (personal, joint, Flex, rewards) with ids/sort codes
`get_balance`Balance, total incl. pots, and spent-today — one account or all
`list_transactions`Recent transactions (last 90 days), filterable by date
`get_transaction`Full detail on a single transaction
`list_pots`Savings pots and their balances

Read-only by design: no payments, transfers, or pot movements — the tools

simply don't exist, so no amount of prompt injection can move money.

Architecture

code
Claude (claude.ai)  ──OAuth──>  This Worker  ──OAuth──>  Monzo API
                                     │
                     workers-oauth-provider (KV)  +  McpAgent (Durable Object)

is the OAuth server Claude authenticates to — it handles dynamic client

registration, `/authorize`, `/token`, and grant storage in KV.

(authorize → magic-link email → in-app approval → callback).

connected user, holding that user's Monzo tokens and refreshing them

automatically via the refresh token.

Security model

Worth understanding before you deploy — the design isolates users by

construction:

  • No standing bank credential in the Worker. The only Worker-level secrets

are the Monzo OAuth `client_id`/`client_secret`, which can exchange

authorization codes but cannot read any account data by themselves.

  • Tokens live per-grant, not per-Worker. When a user completes the OAuth

dance, their Monzo tokens are stored encrypted inside *their* grant

(`completeAuthorization({ props: ...tokens })`). Every MCP request is resolved

through the caller's bearer token to *their* grant, *their* Durable Object,

*their* Monzo account. There is no request that reaches another user's data.

  • Unauthenticated requests get 401. The `/mcp` endpoint only answers to

bearer tokens the Worker itself issued.

  • Monzo adds its own gates. Developer-portal OAuth clients only authorize

the client owner (plus explicitly added collaborators), and every login

requires approval in the Monzo app on the account holder's phone (SCA).

  • Scopes are read-only and the payment/transfer endpoints are never called.

Residual risks are the usual ones for any connector: protect the deployed

secrets, and treat your claude.ai session like the credential it is.

Setup

1. Register a Monzo OAuth client at —

Confidentiality: Confidential (required for refresh tokens).

Redirect URL: `https://.workers.dev/callback`.

2. Fill secrets in `.dev.vars` (gitignored) for local dev:

code
MONZO_CLIENT_ID=oauth2client_...
   MONZO_CLIENT_SECRET=mnzconf...
   COOKIE_ENCRYPTION_KEY=

3. Create the KV namespace and paste the returned id into

`wrangler.jsonc` (replacing ``):

code
npx wrangler kv namespace create OAUTH_KV

4. Deploy and push secrets:

code
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. Add the connector in claude.ai → Settings → Connectors → Add custom

connector → `https://.workers.dev/mcp` → authorize. You'll be

bounced through Monzo's login (magic-link email + approve in the Monzo app),

then Claude shows the five tools.

Works in Claude Code too:

code
claude mcp add --transport http monzo https://.workers.dev/mcp

Notes & limitations

  • Monzo only exposes the last 90 days of transactions unless you

re-authenticate immediately after approving access; this connector accepts

that rolling window.

  • Monzo developer clients are single-user unless Monzo approves your app

for production — fine for the personal-use case this is built for.

  • Secrets live in `.dev.vars` (local) and Wrangler secrets (prod) — never in

git. The `.gitignore` enforces this.

License

MIT — do what you like, no warranty. Monzo, Claude, and Cloudflare

names and logos belong to their respective owners.

Frequently asked questions

What is monzo-claude-connector?

monzo-claude-connector is Read-only Monzo bank connector for Claude — remote MCP server on Cloudflare Workers

How do I install monzo-claude-connector?

Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

Is monzo-claude-connector open source?

Yes — it is hosted on GitHub at https://github.com/silkyrich/monzo-claude-connector.

Related MCP tools

Run your own MCP server? See who uses it and what to fix.

Measure it with TrackMCP