Deposits and withdrawals take an amount in pence and go through a dedupe id, which is what stops a retried request from transferring twice. The read side spans your account types by name, so "how much is in the joint account" resolves without you hunting for an account ID.
An MCP server over the Monzo developer API. It reads balances, pots and transactions across your Monzo account types, and can move money between an account and a pot.
- balance — balance, spending today and currency for an account type, optionally the total
- pots — the list of pots for an account type
- pot_deposit and pot_withdraw — move money between an account and a pot, in pence
- list_transactions — transactions for an account, with since, before and a limit
- retrieve_transaction — one transaction in detail, with merchant data expanded by default
- annotate_transaction — edit or remove a transaction's notes
- Account types addressed by name: default, personal, prepaid, flex, rewards and joint
- Pot transfers carry a dedupe id with a triggered_by value, so a repeat call does not move the money twice
Monzo developer credentials in a .env file: MONZO_ACCESS_TOKEN, MONZO_USER_ID and MONZO_ACCOUNT_ID. Adding the per-type account IDs is recommended — it cuts the number of API calls. Install with uv, then either uv run mcp install main.py or point your client at main.py, making sure requests is in the --with list.
