monzo-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
MCP server for the Monzo banking API. Read-only access to accounts, balances, pots, transactions, and spending analysis - all through Claude Code or any MCP client.
Unlike other Monzo MCP implementations that use raw bearer tokens (which expire in 6 hours), this server handles **full OAuth with automatic token refresh**.
Features
- **7 read-only tools** - no write operations, no money movement
- **OAuth with auto-refresh** - tokens refresh automatically, no manual regeneration
- **Local transaction cache** - SQLite database survives Monzo's 90-day SCA window
- **Auto-sync on demand** - the cache-reading tools run an incremental sync automatically if the cache wasn't synced today, so you rarely need to call monzo_sync by hand
- **Spending analysis** - category breakdowns, top merchants, month-over-month comparison
- **Transaction search** - search by merchant, payee (counterparty), description, or notes across cached history
- **Counterparty details** - bank transfers (faster payments, p2p, Bacs) are cached with the payee's name, sort code, and account number
Tools
| Tool | Description | Data source |
|------|-------------|-------------|
| monzo_list_accounts | List accounts with types and IDs | Live API |
| monzo_get_balance | Current balance and spend today | Live API |
| monzo_list_pots | Savings pots and balances | Live API |
| monzo_sync | Sync transactions to local cache | Live API -> SQLite |
| monzo_list_transactions | List/filter cached transactions | Local cache (auto-syncs if stale) |
| monzo_search_transactions | Search by merchant/payee/description/notes | Local cache (auto-syncs if stale) |
| monzo_spending | Spending analysis with category breakdown | Local cache (auto-syncs if stale) |
Prerequisites
- Python 3.13+ (tested on 3.13 and 3.14, on Linux, macOS and Windows, in CI)
- uv (recommended) or pip
- A Monzo account with an OAuth client registered at developers.monzo.com
Installation
This package is not on PyPI - the name belongs to an unrelated project. A container image is published instead; see Docker.
Setup
1. Register a Monzo OAuth client
Go to developers.monzo.com and create an OAuth client:
- Set the redirect URL to http://localhost:6600/callback
- Note your **Client ID** and **Client Secret**
2. Authenticate
This opens your browser for Monzo OAuth. After authorizing, approve the login in your **Monzo app** within 5 minutes for full transaction history access (Monzo's SCA window).
3. Register with Claude Code
On Windows the console script is at .venv\Scripts\monzo-mcp.exe.
4. First sync
In Claude Code, run monzo_sync to populate the local transaction cache. Do this immediately after auth to take advantage of the SCA window (up to 11 months of history).
Docker
Images are published to ghcr.io/partymola/monzo-mcp. Tags carry a v prefix (:vX.Y.Z), and :latest follows the most recent release.
**The container needs a volume.** Credentials and the transaction cache live under /data; with nothing mounted there, the container still starts and every tool reports that it is not configured, and anything you authorise is lost as soon as the container is replaced.
First register an OAuth client as described in Setup step 1 - auth prompts for the Client ID and secret, and there is no way to supply them later. The redirect URL is http://localhost:6600/callback, the same as a source install.
Authenticate once, into a named volume. Decide before you run this whether you want a bind mount instead - switching afterwards means authorising again: