Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Access Monzo bank account - check balance, view transactions, manage pots, send feed notifications. For personal finance queries and banking automation.
Access Monzo bank account - check balance, view transactions, manage pots, send feed notifications. For personal finance queries and banking automation.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Access your Monzo bank account to check balances, view transactions, manage savings pots, and send notifications to your Monzo app.
Before setting up this skill, you need: A Monzo account (UK personal, joint, or business account) The Monzo app installed on your phone (for SCA approval) OpenClaw running with workspace access Standard tools: curl, jq, openssl, bc (pre-installed on most Linux systems)
# 1. Set the MONZO_KEYRING_PASSWORD env var (see "Setting the Password" below) # 2. Create OAuth client at https://developers.monzo.com/ # - Set Confidentiality: Confidential # - Set Redirect URL: http://localhost # 3. Run setup scripts/setup.sh # 4. Approve in Monzo app when prompted, then: scripts/setup.sh --continue # 5. Test it scripts/balance.sh
The MONZO_KEYRING_PASSWORD environment variable is used to encrypt your Monzo credentials at rest. Choose a strong, unique password and don't lose it โ you'll need it if you ever move or restore the skill. There are several ways to provide this variable. Choose whichever fits your setup: Option A: OpenClaw skill config (simplest) Add to your OpenClaw config (e.g. openclaw.json): { skills: { entries: { "monzo": { enabled: true, env: { "MONZO_KEYRING_PASSWORD": "choose-a-secure-password-here" } } } } } Then restart: openclaw gateway restart Note: This stores the password in plaintext in the config file. Ensure the file has restrictive permissions (chmod 600) and is not checked into version control. Option B: Shell environment (keeps password out of config files) Add to your shell profile (~/.bashrc, ~/.zshrc, etc.): export MONZO_KEYRING_PASSWORD="choose-a-secure-password-here" Then restart your shell and OpenClaw. Option C: systemd EnvironmentFile (for server deployments) Create a secrets file (e.g. /etc/openclaw/monzo.env): MONZO_KEYRING_PASSWORD=choose-a-secure-password-here Set permissions: chmod 600 /etc/openclaw/monzo.env Reference it from your systemd unit with EnvironmentFile=/etc/openclaw/monzo.env. Option D: Password manager / secrets manager Use your preferred secrets tool to inject the env var at runtime. Any method that sets MONZO_KEYRING_PASSWORD in the process environment will work.
Go to https://developers.monzo.com/ and sign in with your Monzo account Click "Clients" โ "New OAuth Client" Fill in: Name: OpenClaw (or your preferred name) Logo URL: (leave blank) Redirect URLs: http://localhost โ exactly this, no trailing slash Description: (leave blank) Confidentiality: Confidential โ โ ๏ธ Important! Enables refresh tokens Click Submit Note your Client ID (oauth2client_...) and Client Secret (mnzconf....)
scripts/setup.sh The wizard will: Ask for your Client ID and Client Secret Give you an authorization URL to open in your browser Ask you to paste the redirect URL back Exchange the code for access tokens Save encrypted credentials Alternative: Non-interactive mode (useful for automation or agents): scripts/setup.sh --non-interactive \ --client-id oauth2client_xxx \ --client-secret mnzconf.xxx \ --auth-code eyJ...
โ ๏ธ This step is required! Monzo requires Strong Customer Authentication. Open the Monzo app on your phone Look for a notification about "API access" or a new connection Tap to approve If you don't see a notification: Go to Account โ Settings โ Privacy & Security โ Manage connected apps Find and approve your client After approving, complete setup: scripts/setup.sh --continue
# Check authentication scripts/whoami.sh # Check your balance scripts/balance.sh You should see your account info and current balance. You're done! ๐
This section tells the agent how to use this skill effectively.
Use this skill when the user asks about: Balance: "How much money do I have?", "What's my balance?" Transactions: "What did I spend on X?", "Show recent transactions" Spending analysis: "How much did I spend on coffee this month?" Savings: "How much is in my savings?", "Move ยฃX to my holiday pot" Notifications: "Send a reminder to my Monzo app"
# "How much money do I have?" scripts/balance.sh # "Show me recent transactions" / "What did I spend?" scripts/transactions.sh # All available, newest first # "Show me my last 5 transactions" scripts/transactions.sh --limit 5 # 5 most recent # "What did I spend this week?" scripts/transactions.sh --since 7d # "How much did I spend on coffee this month?" scripts/transactions.sh --search coffee --since 30d # "What are my savings pots?" scripts/pots.sh # "Put ยฃ50 in my holiday fund" scripts/pots.sh deposit pot_XXXXX 5000 # Amount in pence! # "Send a reminder to my phone" scripts/feed.sh --title "Don't forget!" --body "Check the gas meter"
Money is in pence: ยฃ50 = 5000, ยฃ1.50 = 150 Dates can be relative: --since 7d means last 7 days Use human-readable output by default (no --json flag) Pot IDs: Use scripts/pots.sh first to get pot IDs before depositing/withdrawing Multiple accounts: User may have personal, joint, and business accounts. Default is personal. Use scripts/whoami.sh to see all accounts.
If you see forbidden.insufficient_permissions: Tell the user to check their Monzo app and approve API access Then run scripts/setup.sh --continue If you see MONZO_KEYRING_PASSWORD not set: The env var isn't available in the process environment Guide user to set it using one of the methods in Step 1 of the setup guide
scripts/balance.sh # Default account scripts/balance.sh acc_... # Specific account scripts/balance.sh --json # JSON output Output: Current Balance: ยฃ1,234.56 Total (with pots): ยฃ2,500.00 Spent today: ยฃ12.34
Fetches all available transactions (paginated), displayed newest first. scripts/transactions.sh # All transactions, newest first scripts/transactions.sh --limit 10 # 10 most recent scripts/transactions.sh --since 7d # Last 7 days only scripts/transactions.sh --since 2026-01-01 # Since specific date scripts/transactions.sh --search coffee # Search by merchant/description/notes scripts/transactions.sh --search "Pret" --since 30d # Combined filters scripts/transactions.sh --id tx_... # Get specific transaction scripts/transactions.sh --json # JSON output Output: DATE AMOUNT DESCRIPTION CATEGORY ============ ========== =================================== =============== 2026-01-29 -ยฃ3.50 Pret A Manger eating_out 2026-01-29 -ยฃ12.00 TfL transport 2026-01-28 -ยฃ45.23 Tesco groceries Total: 3 transaction(s)
scripts/pots.sh # List all pots scripts/pots.sh list --json # JSON output scripts/pots.sh deposit pot_... 5000 # Deposit ยฃ50 (5000 pence) scripts/pots.sh withdraw pot_... 2000 # Withdraw ยฃ20 (2000 pence) Output (list): NAME BALANCE GOAL ID ========================= ============ ============ ==================== Holiday Fund ยฃ450.00 ยฃ1,000.00 pot_0000... Emergency ยฃ2,000.00 ยฃ3,000.00 pot_0001...
scripts/feed.sh --title "Reminder" # Simple notification scripts/feed.sh --title "Alert" --body "Details here" # With body scripts/feed.sh --title "Link" --url "https://..." # With tap action
scripts/whoami.sh # Show auth status and accounts scripts/whoami.sh --account-id # Just the default account ID scripts/whoami.sh --json # JSON output
scripts/receipt.sh create tx_... --merchant "Shop" --total 1234 --item "Thing:1234" scripts/receipt.sh get ext_... scripts/receipt.sh delete ext_...
scripts/webhooks.sh list scripts/webhooks.sh create https://your-server.com/webhook scripts/webhooks.sh delete webhook_...
Most common issue! Monzo requires app approval (SCA). Fix: Open Monzo app โ check for notification โ approve Or: Account โ Settings โ Privacy & Security โ Manage connected apps โ approve Run: scripts/setup.sh --continue
The env var isn't available in the process environment. Fix: Set MONZO_KEYRING_PASSWORD using any of the methods described in Step 1 of the setup guide, then restart OpenClaw.
Each auth code is single-use. Start fresh: scripts/setup.sh --reset
Your OAuth client isn't set to "Confidential". Create a new client with Confidentiality = Confidential, then: scripts/setup.sh --reset
Run setup first: scripts/setup.sh
Wrong MONZO_KEYRING_PASSWORD. Check your config matches what you used during setup.
Credentials are encrypted at rest (AES-256-CBC) Encryption key is your MONZO_KEYRING_PASSWORD Access tokens auto-refresh (no manual intervention needed) File permissions are set to 600 (owner only) All API calls use HTTPS No sensitive data is logged
skills/monzo/ โโโ SKILL.md # This documentation โโโ scripts/ โโโ lib/monzo.sh # Shared library โโโ setup # OAuth setup wizard โโโ whoami # Validate authentication โโโ balance # Check balance โโโ transactions # Transaction history โโโ pots # Savings pots โโโ feed # App notifications โโโ receipt # Receipt management โโโ webhooks # Webhook management Credentials: ~/.openclaw/credentials/monzo.json (encrypted, or ~/.clawdbot/credentials/monzo.json on older installs)
FeatureScriptsAuthenticationsetup, whoamiBalancebalanceTransactionstransactionsPots (Savings)potsFeed (Notifications)feedReceiptsreceiptWebhookswebhooks
Messaging, meetings, inboxes, CRM, and teammate communication surfaces.
Largest current source with strong distribution and engagement signals.