Skip to main content
Glama
nz-openbank-mcp

nz-openbank-mcp

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
AKAHU_APP_TOKENYesYour Akahu Personal App token.
AKAHU_READ_ONLYNoRead-only mode. Defaults to true. Set to false to enable write tools.true
AKAHU_USER_TOKENYesYour Akahu user token.
AKAHU_AUTOMATION_BYPASSNoSkip consent prompts for automatable write tools when read-only mode is disabled. Defaults to false.false
NZ_OPENBANK_MCP_AUTH_MODENoAuth mode for the HTTP entrypoint: bearer or oauth. Defaults to bearer.bearer
NZ_OPENBANK_MCP_HTTP_HOSTNoHTTP bind host. Defaults to 127.0.0.1.127.0.0.1
NZ_OPENBANK_MCP_HTTP_PATHNoHTTP path. Defaults to /mcp./mcp
NZ_OPENBANK_MCP_HTTP_PORTNoHTTP bind port. Defaults to 8091.8091
NZ_OPENBANK_MCP_BEARER_TOKENNoStatic bearer token for HTTP bearer auth mode.
NZ_OPENBANK_MCP_ALLOWED_USERSNoComma-separated allowed Google user emails for OAuth HTTP mode.
NZ_OPENBANK_MCP_ALLOWED_DOMAINSNoComma-separated allowed Google hosted domains for OAuth HTTP mode.
NZ_OPENBANK_MCP_PUBLIC_BASE_URLNoPublic base URL for OAuth HTTP mode, e.g. https://mcp.example.com/openbank-mcp.
NZ_OPENBANK_MCP_GOOGLE_CLIENT_IDNoGoogle OAuth client ID for OAuth HTTP mode.
NZ_OPENBANK_MCP_GOOGLE_CLIENT_SECRETNoGoogle 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

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 limit matches are found. Without start_date the window is the 90 NZ days ending on end_date, or ending today. Use for free-text lookups; prefer get_transactions when filtering by account or amount. Returns {"transactions": [...], "truncated": bool} with the same shape and meaning as get_transactions.

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:

  • "DUPLICATE": requires other_transaction_id (the paired duplicate).

  • "ENRICHMENT_ERROR": requires fields=[...] listing affected field names.

  • "ENRICHMENT_SUGGESTION": requires fields=[...] listing suggested fields.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 14 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessSyncing