Read-only Monzo banking MCP server
Project description
Monzo MCP Server for Claude Code
Read-only Monzo banking integration for Claude Code. Query balances, view transactions, check pots, and analyze spending — all through natural conversation.
Features
| Tool | Description |
|---|---|
monzo_is_authenticated |
Verify authentication status (live ping) |
monzo_list_accounts |
List all accounts (current, joint, flex) |
monzo_get_balance |
Current balance and today's spending |
monzo_list_transactions |
Transaction history with merchant details |
monzo_get_transaction |
Full detail on a single transaction |
monzo_list_pots |
All pots with balances and goals |
monzo_spending_summary |
Aggregated spending by category and merchant |
Prerequisites
- Python 3.10+
- A Monzo developer OAuth client — confidential type
- Set the redirect URL to
http://localhost:3118/callback - Claude Code (CLI or VS Code extension)
Why do I need my own OAuth client? Monzo restricts API access to personal use — there's no public app model. You create your own client at developers.monzo.com and only your credentials touch this server.
Quick Start
1. Create an OAuth Client
Go to developers.monzo.com and create a Confidential client.
- Redirect URL:
http://localhost:3118/callback
2. Installation Options
Option 1: Claude Code Plugin (Marketplace)
/plugin marketplace add tcoretech/monzo-mcp
/plugin install monzo@tcoretech
Option 2: uvx (recommended — no clone needed)
claude mcp add monzo \
-e MONZO_CLIENT_ID=your_client_id \
-e MONZO_CLIENT_SECRET=your_client_secret \
-- uvx --from monzo-mcp monzo-mcp
Option 3: pip install
pip install monzo-mcp
claude mcp add monzo \
-e MONZO_CLIENT_ID=your_client_id \
-e MONZO_CLIENT_SECRET=your_client_secret \
-- monzo-mcp
Option 4: Clone & Run from Source
git clone https://github.com/tcoretech/monzo-mcp.git
cd monzo-mcp
pip install -e .
claude mcp add monzo \
-e MONZO_CLIENT_ID=your_client_id \
-e MONZO_CLIENT_SECRET=your_client_secret \
-- python3 mcp-server/server.py
3. Generic MCP Configuration (Desktop/JSON)
For use with Claude Desktop or other MCP clients, add this to your configuration:
{
"mcpServers": {
"monzo": {
"command": "python3",
"args": [
"/absolute/path/to/monzo-mcp/mcp-server/server.py"
],
"env": {
"MONZO_CLIENT_ID": "YOUR_CLIENT_ID",
"MONZO_CLIENT_SECRET": "YOUR_CLIENT_SECRET",
"MONZO_REDIRECT_URI": "http://localhost:3118/callback"
}
}
}
}
Authentication (Seamless OAuth)
This server implements a Seamless Loopback Flow. You don't need to run a separate setup command.
- Just-in-Time Auth: When you first ask Claude about your Monzo account, the server will detect missing tokens and automatically open your browser to the Monzo login page.
- Loopback Listener: A temporary local server (defaulting to port 3118) catches the callback from Monzo and saves your tokens securely to
~/.monzo-mcp/tokens.json. - WSL & Docker Support: The server is environment-aware and will use PowerShell to bridge to your Windows host browser if running in WSL.
- SCA (Strong Customer Authentication): If Monzo requires an app approval, Claude will inform you. Simply tap "Approve" in your Monzo mobile app and tell Claude you've done so.
Note: Tokens are stored with
0600permissions (owner only). Access tokens are refreshed automatically.
Where are tokens stored?
~/.monzo-mcp/tokens.json # access_token, refresh_token, account_id
This file is created automatically, permissions restricted to your user, and never needs manual editing. Delete it to force re-authentication.
Usage Examples
Once connected, ask Claude things like:
- "What's my Monzo balance?"
- "Show my last 20 transactions"
- "How much did I spend on eating out this month?"
- "Give me a spending summary for the last 30 days"
- "What are my pot balances?"
- "Show transactions from Tesco last week"
Architecture
monzo-mcp/
├── .claude-plugin/ # Plugin metadata for marketplace
│ ├── plugin.json
│ └── marketplace.json
├── mcp-server/ # MCP server (Python)
│ ├── server.py # FastMCP entry point (stdio)
│ ├── tools.py # 7 read-only tool definitions
│ ├── monzo_client.py # Async API client with retry
│ ├── auth.py # OAuth token management, loopback listener, auto-refresh
│ └── .env.example
├── skills/monzo/
│ ├── SKILL.md # Domain knowledge for Claude
│ └── monzo-api-reference.md
├── pyproject.toml # Python packaging (pip/uvx)
├── LICENSE
└── README.md
Credential flow:
User provides Server handles internally
┌──────────────────┐ ┌──────────────────────────┐
│ MONZO_CLIENT_ID │──env──▶ │ OAuth browser flow │
│ MONZO_CLIENT_SECRET│ │ Token exchange │
└──────────────────┘ │ Token refresh │
│ Account auto-detection │
│ ~/.monzo-mcp/tokens.json │
└──────────────────────────┘
Security:
- Read-only — no write operations, no fund transfers
- Credentials stored locally only, never transmitted beyond the Monzo API
- Token file restricted to user permissions (0600)
- Automatic token refresh on expiry
- Exponential backoff on rate limits
Important Notes
- 90-day limit: Due to Monzo's Strong Customer Authentication (SCA), transaction history is limited to 90 days unless you re-authenticate within 5 minutes in the Monzo app.
- Personal use only: The Monzo API is restricted to personal use — Monzo does not allow public applications.
- Rate limits: Monzo enforces rate limits. The client handles retries automatically.
- Amounts: All API amounts are in minor units (pence for GBP). Claude converts to pounds.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file monzo_mcp-1.0.5.tar.gz.
File metadata
- Download URL: monzo_mcp-1.0.5.tar.gz
- Upload date:
- Size: 17.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5d0a0877415177ca8655eaaad19886dad5dc5b2b0332642eb1c9f3adea674c3
|
|
| MD5 |
dcac33dab340de34b5a87f8a7086264c
|
|
| BLAKE2b-256 |
66f34c5a255e40eb1365ffc7d8cc2987e222fd8af9f7eeb4a20ce66702babcec
|
Provenance
The following attestation bundles were made for monzo_mcp-1.0.5.tar.gz:
Publisher:
publish.yml on tcoretech/monzo-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
monzo_mcp-1.0.5.tar.gz -
Subject digest:
f5d0a0877415177ca8655eaaad19886dad5dc5b2b0332642eb1c9f3adea674c3 - Sigstore transparency entry: 1186463111
- Sigstore integration time:
-
Permalink:
tcoretech/monzo-mcp@0f5b03f460b8cbc66b59331875e068f8c26f46e5 -
Branch / Tag:
refs/tags/v1.0.5 - Owner: https://github.com/tcoretech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0f5b03f460b8cbc66b59331875e068f8c26f46e5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file monzo_mcp-1.0.5-py3-none-any.whl.
File metadata
- Download URL: monzo_mcp-1.0.5-py3-none-any.whl
- Upload date:
- Size: 16.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e776e298c5c97fc2b2c6eb0fcd28cc547a303764b023968078e3bc7227cc1dda
|
|
| MD5 |
89b9c1d87f3e76c5df6668fb717333d0
|
|
| BLAKE2b-256 |
4763ef1c6eb94325107f813da0f4fe6dddab6f0bb0a516e2ab9935c75bef1a05
|
Provenance
The following attestation bundles were made for monzo_mcp-1.0.5-py3-none-any.whl:
Publisher:
publish.yml on tcoretech/monzo-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
monzo_mcp-1.0.5-py3-none-any.whl -
Subject digest:
e776e298c5c97fc2b2c6eb0fcd28cc547a303764b023968078e3bc7227cc1dda - Sigstore transparency entry: 1186463113
- Sigstore integration time:
-
Permalink:
tcoretech/monzo-mcp@0f5b03f460b8cbc66b59331875e068f8c26f46e5 -
Branch / Tag:
refs/tags/v1.0.5 - Owner: https://github.com/tcoretech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0f5b03f460b8cbc66b59331875e068f8c26f46e5 -
Trigger Event:
release
-
Statement type: