nz-openbank-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AKAHU_APP_TOKEN | Yes | Your Akahu Personal App token. | |
| AKAHU_READ_ONLY | No | Read-only mode. Defaults to true. Set to false to enable write tools. | true |
| AKAHU_USER_TOKEN | Yes | Your Akahu user token. | |
| AKAHU_AUTOMATION_BYPASS | No | Skip consent prompts for automatable write tools when read-only mode is disabled. Defaults to false. | false |
| NZ_OPENBANK_MCP_AUTH_MODE | No | Auth mode for the HTTP entrypoint: bearer or oauth. Defaults to bearer. | bearer |
| NZ_OPENBANK_MCP_HTTP_HOST | No | HTTP bind host. Defaults to 127.0.0.1. | 127.0.0.1 |
| NZ_OPENBANK_MCP_HTTP_PATH | No | HTTP path. Defaults to /mcp. | /mcp |
| NZ_OPENBANK_MCP_HTTP_PORT | No | HTTP bind port. Defaults to 8091. | 8091 |
| NZ_OPENBANK_MCP_BEARER_TOKEN | No | Static bearer token for HTTP bearer auth mode. | |
| NZ_OPENBANK_MCP_ALLOWED_USERS | No | Comma-separated allowed Google user emails for OAuth HTTP mode. | |
| NZ_OPENBANK_MCP_ALLOWED_DOMAINS | No | Comma-separated allowed Google hosted domains for OAuth HTTP mode. | |
| NZ_OPENBANK_MCP_PUBLIC_BASE_URL | No | Public base URL for OAuth HTTP mode, e.g. https://mcp.example.com/openbank-mcp. | |
| NZ_OPENBANK_MCP_GOOGLE_CLIENT_ID | No | Google OAuth client ID for OAuth HTTP mode. | |
| NZ_OPENBANK_MCP_GOOGLE_CLIENT_SECRET | No | Google OAuth client secret for OAuth HTTP mode. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| acct_list_accountsA | List every connected account with masked numbers and formatted balances. Returns {"accounts": [...]} where each entry has id, name, type (CHECKING/SAVINGS/CREDITCARD/FOREIGN/...), status, formatted_account (masked, e.g. "01-****-***4567-00"), connection (institution name, e.g. "ANZ"), balance (formatted with currency, e.g. "$2,543.21" or "USD 100.00") and currency (ISO 4217 code). balance and currency are None if the account has no balance block. |
| acct_get_accountB | Fetch a single account by id. Returns the same shape as one entry in list_accounts["accounts"]: id, name, type, status, formatted_account (masked), connection, balance (formatted with currency), currency. |
| acct_get_pending_transactionsA | List pending (not-yet-settled) transactions for one account. Pending entries affect available balance immediately and can change or vanish before they settle. Returns {"account_id", "transactions": [...]} where each transaction has account_id, date (YYYY-MM-DD, NZ calendar day), description, amount (formatted in the account's currency, e.g. "-$5.50"), amount_raw (number rounded to cents; negative = debit), currency (None if the account reports none, in which case amount has no symbol), type, merchant, category and pending (always true). Pending entries have no id. |
| acct_get_account_balanceA | Return just the balance for an account. Cheaper than get_account. Returns {"id", "balance", "available", "currency"} where balance and available are currency-formatted strings (e.g. "$2,543.21" or "USD 100.00") and currency is the ISO 4217 code. All three are None if the account has no balance block; available alone is None if not reported. |
| acct_refresh_all_accountsA | Trigger Akahu to fetch fresh data for every connected account. Rate-limited by your bank. Idempotent within rate-limit windows. Use before a query that needs the freshest balance or transaction data. Requires write consent unless AKAHU_AUTOMATION_BYPASS=true. Returns {"success": bool, "message": str | None}. |
| acct_refresh_accountA | Trigger Akahu to fetch fresh data for one specific account. Rate-limited by your bank. Idempotent within rate-limit windows. Use when you only need to refresh one account (e.g. checking before a payday lookup). Requires write consent unless AKAHU_AUTOMATION_BYPASS=true. Returns {"success": bool, "message": str | None, "account_id": str}. |
| txn_get_transactionsA | List settled transactions with optional filters. Returns {"transactions": [...], "truncated": bool} where each entry has id, account_id, date (YYYY-MM-DD, NZ calendar day), description, amount (formatted in the account's currency, e.g. "-$12.50" or "-USD 9.99"), amount_raw (number rounded to cents; negative = debit), currency (ISO code, or None when the account's currency is unknown, in which case amount has no symbol, e.g. "-1,234.50"), type, merchant (str | None), category (str | None). truncated is true when the scan stopped at the 20-page cap before reaching the end of the range; narrow the dates and call again. |
| txn_get_transactionA | Fetch one settled transaction by id. Returns the same shape as one entry in get_transactions["transactions"]. |
| txn_get_transactions_by_idsA | Batch-fetch settled transactions by their ids in one request. Useful when you have a list of transaction ids (e.g. from a prior query) and want to inspect them together. Returns {"transactions": [...]} with the same per-entry shape as get_transactions. |
| txn_get_pending_transactionsA | List all pending (not-yet-settled) transactions across the user's accounts. Pending transactions affect available balance immediately but do not appear in get_transactions until they settle, and they can change or vanish before then. Returns {"transactions": [...]} where each entry has account_id, date (YYYY-MM-DD, NZ calendar day), description, amount (formatted in the account's currency), amount_raw, currency (None if unknown), type, merchant, category and pending (always true). Pending entries have no id. |
| txn_search_transactionsA | Case-insensitive substring search across description and merchant name. Searches settled transactions in a date window until |
| txn_report_transaction_issueA | Submit a support ticket about a transaction to Akahu staff. Sends a ticket to a human at Akahu support. Always elicits user confirmation (not bypass-eligible); the prompt shows every value in the ticket, including the comment. Missing required values are collected before that prompt. issue_type validation:
Returns {"success": bool, "message": str | None}. |
| id_get_meA | Return identity/profile data for the connected Akahu user. Returns {"id": str, "email": str | None, "name": str | None}, where name joins the profile's first_name and last_name when present. |
| id_verify_nameA | Verify a name against the account holder via Akahu's identity check. If account_id is provided, the check is scoped to that one account (POST /verify/name/{account_id}); otherwise Akahu matches against every identity source the user has connected (POST /verify/name). Requires the appropriate Personal-App scope grant in your Akahu portal; without it Akahu returns 403 Forbidden. May incur a per-call charge from your bank. Always elicits user confirmation (not bypass-eligible). Returns {"success": bool, "item": dict | None, "message": str | None} where item is Akahu's match-result envelope (shape documented at https://developers.akahu.nz/docs/enduring-verify-name). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Tools are separated by resource (accounts vs transactions vs identity) and action, with the main overlaps being the pending-transaction pair (acct_get_pending_transactions per account vs txn_get_pending_transactions across all) and txn_get_transactions vs txn_search_transactions. Descriptions explicitly disambiguate these cases (e.g. 'prefer get_transactions when filtering by account or amount'), so misselection is unlikely but possible. acct_get_account, acct_get_account_balance and acct_list_accounts are clearly distinguished by scope and cost.
A single predictable pattern is used throughout: a short domain prefix (acct_/txn_/id_) followed by verb_noun (list_accounts, get_account, get_transactions, search_transactions, report_transaction_issue). Singular/plural distinctions (get_transaction vs get_transactions) are used meaningfully, and no naming style is mixed.
14 tools is well within the ideal range for a banking data aggregation API, and each tool earns its place: accounts, settled transactions, pending transactions, identity, refresh, and support/verification actions. The refresh pair (all vs one account) and the get/balance split are justified by differing cost and rate-limit behavior.
The surface covers the full read lifecycle for accounts and transactions (list, get, balance, pending, batch, search) plus identity, name verification, data refresh, and issue reporting. Minor gaps remain: there is no way to enumerate connected institutions/connections or consent state, and no pagination/offset control beyond the internal 20-page cap. These are workable around, but an agent cannot fully audit its data sources.