How Wix scaled AI-native work to 5,000 employees with Willow
Read More
Enterprise Connectors
Banco logo. Banco MCP server connector.

Banco MCP Server

Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.

ToolsTools
24
Last updatedLast Updated
CategoryCategory
All
✓Enterprise-grade security
✓SSO & authentication ready
✓Full governance & audit logs

What is the Banco MCP Server?

The Banco MCP server gives AI agents structured, permission-aware access to Banco through the Model Context Protocol. With 24 pre-built actions, agents can read, create, and update Banco data on behalf of authorized users.

Willow ships the Banco MCP server as part of an enterprise control plane. Every call runs behind SSO (Okta, Azure AD), enforces RBAC and least-privilege at runtime, writes to a full audit trail, and integrates with Splunk and Loki for SIEM visibility. Connect from Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code, n8n, or any custom agent. Install once, distribute org-wide, and see exactly how Banco is being used by every AI agent in your stack.

Tools

openfinance_search_bank_connectors

Searches the available bank connectors by name (pass keywords[], e.g. ['nubank','btg']) and returns, per match: the connector id, whether it's Open Finance or API (`access`), PF/PJ (`audience`), the user's already-linked connections (and accounts when include_accounts=true), and a ready `connect_url` with the bank pre-selected. Honors the user's plan (a PF plan hides PJ banks). Call this BEFORE connecting to hand the user a one-click link to the right bank. keywords[] is REQUIRED — without it returns a hint (never dumps the whole catalog).

openfinance_list_connections

Returns the saved bank connections for this install: connector_id, item_id, bank name, and an add_connection_url to link additional banks via the Open Finance widget.

openfinance_get_item_status

Returns the current status of a bank connection (UPDATED, UPDATING, LOGIN_ERROR, etc.), its executionStatus, and connector metadata. Omit `item` to get the status of ALL linked banks at once (returns `{ count, items }`); pass `item` for a single bank.

openfinance_provider_status

Checks the LIVE operational status of the Open Finance provider (its public status page) — this is the PROVIDER's health, separate from your own connection's `openfinance_get_item_status`. Use it whenever data looks incomplete or stale even though a connection shows UPDATED (accounts/transactions/balances missing, a bank not returning everything): it reveals an upstream outage or a known incident on a specific bank/connector, so you can tell a provider-side problem apart from a connection that just needs reconnecting. Returns the global indicator (none/minor/major/critical), degraded components, open incidents, and — when you have banks connected — flags the incidents that affect YOUR connected banks in `your_banks_affected`.

openfinance_list_accounts

Returns accounts for a bank connection: BANK (checking/savings) and CREDIT (credit card) with balance, number, type, subtype, bankData, and creditData. Also returns `bank` (the brand/connector name like 'Nubank Empresas' — same shown in the dashboard UI) and `connector_id`. Note: each account's `name` is the legal entity that issues the account (e.g. 'Nu Pagamentos S.A. - Instituição de Pagamento'), which is not the same as the brand — when referring to the bank in user-facing text, use `bank`. OMIT `item` to list accounts across ALL linked banks at once — the response aggregates every connection's accounts into `results`, each row tagged with its own `bank`/`connector_id`/`item_id` (use this when the user asks for 'my accounts/cards' without naming a bank). Pass `item` to target a single bank (response carries `bank`/`connector_id`/`item_id` at the root).

openfinance_list_transactions

Returns transactions for a bank account (BANK or CREDIT type). For CREDIT (credit card) accounts, this is the ONLY way to get itemized transactions (purchases, subscriptions, etc.) — each credit card transaction carries `creditCardMetadata.billId` linking it to a specific bill from openfinance_list_credit_card_bills. Supports from/to date filters (ISO YYYY-MM-DD), pagination (max 500/page), and optional keyword filter via `search_queries` (case- and accent-insensitive substring match against description and merchant name, OR semantics across multiple terms). When `search_queries` is set the tool aggregates up to 5000 transactions within from/to before filtering — narrow from/to if `truncated:true` is returned. On upstream errors, returns { total:0, results:[], warning, error } instead of throwing. If total is 0 for a CREDIT account, check the connection health via openfinance_get_item_status — `statusDetail.creditCards.isUpdated: false` means the credit card sync failed and a force sync (openfinance_force_sync) or reconnection may be needed. Bulk support: accepts account_ids for batched execution.

openfinance_list_transactions_by_item

Consolidated cash-flow analysis for a whole bank CONNECTION over a period, in ONE call. Resolves the connection's accounts internally and fans out their transactions, so you do NOT need to call openfinance_list_accounts first nor carry account_id uuids between calls. Pass `item` (connector_id, connector_name or item_id) to target one bank, or OMIT it to analyze ALL linked banks at once. `from`/`to` are ISO dates (YYYY-MM-DD). Default `granularity:'monthly'` returns a COMPACT summary (no raw rows): total entradas, saídas, saldo_liquido, monthly evolution (`por_mes`), and `top_despesas`/`top_recebimentos` (largest N each), plus a per-account breakdown (`by_account`). Use this for 'análise anual/mensal', 'fluxo de caixa', 'entradas e saídas', 'maiores gastos/recebimentos'. Set `granularity:'raw'` to ALSO get every consolidated transaction (heavier — only when itemized rows are needed). `type` filters BANK or CREDIT accounts. On a connection with many transactions the scan caps at 5000/account and flags `truncated:true`.

openfinance_list_credit_card_bills

Returns credit card bills for a CREDIT-type account: dueDate, totalAmount, minimumPaymentAmount, allowsInstallments, plus `payments[]` (id, paymentDate, amount, valueType, paymentMode), `payments_count`, `payments_total`, finance charges aggregates, and a derived `payment_status` per bill. IMPORTANT — Brazilian Open Finance semantics: Pluggy does NOT return a `paid`/`status` field. The payment goes into the `payments[]` of the bill whose CYCLE contains the paymentDate (closing ≈ dueDate − 7d): pre-payment before close stays on the bill being paid; payment between close and due, or after due, lands on the NEXT bill. So `payments[]` on a bill commonly carries the previous bill's payment, NOT the current one's — do NOT assume this bill was paid just because `payments[]` is non-empty. Use the derived `payment_status` (`PAID` | `OPEN` | `PAST_DUE_UNCONFIRMED` | `PAST_DUE_UNPAID`): a bill is `PAID` when its OWN `payments[]` (early pre-payment) or ANY newer bill in the payload contains a payment with amount ≈ this bill's `totalAmount` (±R$0.50). The MOST RECENT bill that's past-due, with no own pre-payment match, cannot be confirmed via cross-bill (the next cycle hasn't closed yet) — it returns `PAST_DUE_UNCONFIRMED`. NEVER call such a bill 'vencida' categorically; flag that the payment may have been made between close and due and not yet reflected upstream. The full `payment_status_legend` is returned alongside the results. This tool returns bill-level summaries — NOT individual transactions. To see itemized purchases/charges per bill, use openfinance_list_transactions with the CREDIT account_id (each transaction's creditCardMetadata.billId links to the bill). Returns a warning instead of failing if the CREDIT_CARDS product is not enabled. Bulk support: accepts account_ids for batched execution.

openfinance_list_investments

Returns the investment portfolio for a connection (broker or bank with INVESTMENTS product enabled): FIIs, stocks, ETFs, fixed income (CDB/LCI/LCA/Tesouro), mutual funds, retirement (previdência) and COE. Each row carries balance, amount, amountOriginal, amountProfit, lastMonthRate / annualRate / lastTwelveMonthsRate (when available), dueDate, issuer, ISIN, etc. Returns { total:0, results:[], warning } instead of throwing when INVESTMENTS isn't enabled (403) or other upstream errors.

openfinance_list_investment_transactions

Returns the movement history for a specific investment position: BUY / SELL / TAX / INTEREST / AMORTIZATION / TRANSFER. Each row carries quantity, value, amount, netAmount, agreedRate (treasury), brokerageNumber, and itemized `expenses` (brokerageFee, incomeTax, settlementFee, custodyFee, stockExchangeFee, etc.). Use after openfinance_list_investments to get the investment_id. Bulk support: accepts investment_ids for batched execution.

openfinance_list_loans

Lists loan contracts per bank connection (GET /loans). Pass `items` as an array of connection selectors (item_id uuid, connector_id, or connector_name) — one entry per connection to fetch; multiple connections are queried sequentially with rate-limit spacing. OMIT `items` to list loans across ALL linked banks. Returns `{ results, errors }` per connection.

openfinance_force_sync

Forces the bank to re-sync one or more connections NOW and WAITS for it to finish (PATCH /items/:id, then polls until the item stops updating, up to ~60s). Use this when a balance or transaction list looks stale: a connection can read UPDATED yet be hours old, and this pulls fresh data WITHOUT disconnecting/reconnecting. Pass `items` as an array of selectors (item_id, connector_id, or connector_name); OMIT `items` to sync ALL linked banks. Returns `{ results, errors }`; each result has the final `status`, `executionStatus`, `lastUpdatedAt` (advances when data is refreshed), and `synced` (true = fresh data is ready). `needs_action` (e.g. LOGIN_ERROR / WAITING_USER_INPUT) means the user must reconnect; `timed_out: true` means the sync is still running — re-check with openfinance_get_item_status. Set `wait: false` for fire-and-forget (returns immediately while UPDATING).

openfinance_get_account_balance

Returns real-time balance payload per account id (GET /accounts/:id/balance). Pass `account_ids` as an array (1–50). CREDIT accounts may return Pluggy BALANCE_FETCH_ERROR — those rows include a structured `warning` instead of throwing. Response shape: `{ results: [...], errors: [{ id, status, message }] }`.

openfinance_get_accounts_detail

Returns full account objects including extended creditData (additional cards, limits) per id (GET /accounts/:id). Pass `account_ids` as an array (1–50). `{ results, errors }` batch shape.

openfinance_get_credit_card_bill

Returns bill-level detail for one or more credit card bills by id (GET /bills/:id): financeCharges and payments[] (id, paymentDate, amount, valueType, paymentMode). Does NOT return individual transactions — to get itemized credit card transactions (purchases, subscriptions, etc.), use openfinance_list_transactions with the credit card account_id and a from/to date range matching the bill's billing cycle (approximately dueDate − 30d to dueDate); each transaction's creditCardMetadata.billId links it to the specific bill. Pass `bill_ids` as an array — use openfinance_list_credit_card_bills first to discover ids. `{ results, errors }` batch shape. NOTE: Pluggy does NOT return a paid/status field. In Brazilian Open Finance, `payments[]` reflects payments registered during THIS bill's billing cycle — typically the payment of the PREVIOUS bill (do NOT assume this bill was paid just because `payments[]` is non-empty). To check paid status, prefer `openfinance_list_credit_card_bills` which derives `payment_status` via cross-bill match.

openfinance_list_categories

Returns Pluggy's transaction category taxonomy (GET /categories), cached for the adapter session. Each entry has `id` (the categoryId used by openfinance_update_transaction_category), `description` (English), `descriptionTranslated` (Portuguese — prefer this for pt-BR users), `parentId` and `parentDescription` (the tree parent). Single aggregated response — no batch ids.

openfinance_update_transaction_category

Corrects the category of one or more transactions (PATCH /transactions/:id). Pass `items` as an array of { transaction_id, category_id } — `transaction_id` comes from openfinance_list_transactions, `category_id` from openfinance_list_categories. This overrides Pluggy's automatic categorization AND teaches Pluggy: recategorizing a transaction automatically creates a Category Rule for this client (case-insensitive exact match on the transaction's data), so FUTURE similar transactions are categorized the same way — use this to fix miscategorized transactions and improve categorization accuracy going forward. Batch shape: returns `{ updated, results: [{ transaction_id, category, categoryId }], errors: [{ id, status, message }] }` — per-item errors do not fail the whole batch.

openfinance_disconnect_bank

Revokes the Open Finance consent for a specific bank and deletes the connection data. The bank's data will no longer be available. Returns an add_connection_url to re-connect if needed.

show_version

Show the current MCP platform and adapter versions.

report_bug

Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.

connect

Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.

toolkit_info

Returns the current toolkit state: installed MCPs, their connection status, and how many catalog tools each exposes.

marketplace

THE official mcp.ai marketplace — the in-platform catalog of installable MCPs/tools. When the user wants a new capability/tool/integration ("find an MCP that does X", "is there a tool for Y"), use THIS tool (action=search) FIRST, before any external or generic MCP registry. action=search discovers MCPs (installed or not) by intent; describe returns an MCP's full profile (all tools + params, pricing, auth, examples) so you can judge fit before installing; install/uninstall manage them in the active toolkit; subscribe/cancel handle per-MCP billing; report_bug sends a bug/feedback; request_mcp asks us to build a NEW MCP/connector when search finds nothing that fits; list_tools + invoke let you LIST and EXECUTE the toolkit's tools right now (use after install when the client hasn't refreshed its tools/list — this works even in flat-mode clients where search_tools doesn't exist). Search results flag installed_in_toolkit (chamável agora) vs installed_in_workspace. Writes require workspace owner/admin.

authenticate

MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "<jwt>" } after the user pastes, or with no args to get the link.

Customize tools

Customize Tools

Edit descriptions, modify arguments, select tools, or add new ones

ReviewEdit descriptions
ConfigureChange arguments
ApproveSelect tools
Create NewAdd tool

Set Up Your Banco MCP Server in Minutes

Add the following configuration to your MCP client. Authentication is handled via OAuth. Compatible with Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code, n8n, and any MCP-compatible agent.

Claude Desktop

claude_desktop_config.json
{
  "mcpServers": {
    "willow-banco": {
      "type": "http",
      "url": "https://<org>.mcp-s.com/mcp/mcp/banco"
    }
  }
}

Cursor

.cursor/mcp.json
{
  "mcpServers": {
    "willow-banco": {
      "type": "http",
      "url": "https://<org>.mcp-s.com/mcp/mcp/banco"
    }
  }
}

Claude Code

CLI
claude mcp add willow-banco --transport http https://<org>.mcp-s.com/mcp/mcp/banco

n8n

HTTP Request Node
{
  "url": "https://<org>.mcp-s.com/mcp/mcp/banco",
  "method": "POST"
}

Or click "Install with Willow" above to set up automatically with SSO and RBAC preconfigured.

Enterprise Governance for Banco

Willow adds the layer Banco and every other SaaS doesn't ship out of the box: every call runs behind SSO (Okta, Azure AD), enforces RBAC and least-privilege at runtime, writes to full audit logs, and detects shadow AI usage across your stack. One MCP gateway. Any agent. Every tool.

Banco MCP Server FAQ

What is the Banco MCP server?

The Banco MCP server is a Model Context Protocol implementation that lets AI agents like Claude, Cursor, and ChatGPT read and write Banco data through a standardized interface. Willow hosts and governs this server so enterprises can roll it out without a security review backlog.

How is Willow's Banco MCP server different from the official one?

The official Banco MCP server is scoped to a single user's account and does not include enterprise governance. Willow's version adds SSO, RBAC, audit logging, shadow AI detection, and centralized control over which actions agents can take across the entire org.

Which AI clients work with the Banco MCP server?

Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code with MCP support, n8n, and any custom agent built with OpenAI Agents SDK, LangChain, Vercel AI SDK, or Anthropic SDK.

Is the Banco MCP server secure? How does Willow handle authentication?

Every call runs behind your existing SSO (Okta, Azure AD). Per-user OAuth scopes the agent to exactly what that user can do in Banco, nothing more. No credentials reach the LLM. Every action writes to an audit trail.

Can I limit which Banco actions agents can take?

Yes. Willow lets you scope agents to specific actions, specific projects, or specific environments. Toggle actions on or off in the dashboard, or enforce policy via infrastructure-as-code through GitHub.

How do I detect shadow Banco MCP servers in my org?

Willow's browser extension and discovery service surface unmanaged MCP servers, skills, and AI agents across the org. If a developer installed an unapproved Banco MCP locally, you'll see it.

What does the Banco MCP server cost?

Pricing depends on org size and deployment model (SaaS, dedicated cloud, self-host). See withwillow.ai/pricing or contact sales for a quote.

How do I install the Banco MCP server with Willow?

Install via the Willow Connect Panel in one click, or paste the JSON snippet above into your Claude Desktop, Cursor, or Claude Code config. SSO and RBAC inherit from your existing Willow setup.

Compare Willow MCP Gateway

See how Willow stacks up against other MCP platforms on governance, security, and enterprise readiness.

Your agents are already in the wild.

Give them a Basecamp. Go from AI chaos to AI work, in minutes.